0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon SageMaker JumpStartでリアルタイム推論エンドポイントにモデルをデプロイしてみた

Posted at

はじめに

Amazon Sagemaker AIを触ってみたかったのですが、
機能が豊富すぎて、どこから手をつけていいか分かりませんでした。

そこで入門のための足がかりとしてSageMaker JumpStartを使って、
事前学習済みのモデルを、推論エンドポイントにデプロイしてみました。

目次

  1. はじめに
  2. Amazon SageMaker JumpStartとは?
  3. 事前学習済みモデルをデプロイ
  4. 推論エンドポイントにアクセス
  5. まとめ

Amazon SageMaker JumpStartとは?

JumpStartはSageMaker AIの機能の一部です。
事前学習済みの機械学習オープンソースモデルを手軽にデプロイできます。
モデルを一から作成しなくても良い点が魅力的です。
選択するモデルによってはファインチューニングや評価も行うことができます。

事前学習済みモデルをデプロイ

条件

  • IAMユーザーは検証用にadmin権限付与
  • 使用リージョンはオレゴン(us-west-2)を選択

Amazon SageMaker AI にアクセス

検索バーに「sagemakerAI」と入力し、
サービスにある「Amazon SageMaker AI」 をクリックします。
コンソールのホーム___コンソールのホーム___us-west-2.png

ドメインとプロファイルを作成する

「シングルユーザー向けの設定」をクリックします。
SageMaker Studioで使用するドメインとプロファイルが作成されます。
Amazon_SageMaker_AI___us-east-2.png

SageMaker Studioを開く

左のメニューバーから「Studio」をクリックします。
「Studioを開く」をクリックすると、新規タブが立ち上がります。
0.png

JumpStartから使用するモデルを選択する

SageMaker Studioの左のメニューから「JumpStart」をクリックします。
1.png

今回はStable diffusionをデプロイします。
検索バーに「stability」と入力し、プロバイダーの「Stability AI」をクリックします。
2.png

今回検証で使用するモデルは「Stable Diffusion XL 1.0」です。
今回はAWS marketplaceに登録されているモデルを使用します。
SageMakerPublicHub_-_SageMaker_Studio.png

ページ右上の「Deploy」をクリックします。
「Train」「Optimize」、「Evaluate」などは、このモデルでは使用できないようです。
3.png

モデルのサブスクライブ

Stable Diffusion XL 1.0使用するには、
AWS marketplaceでのサブスクリプションが必要となります。
左下の「Subscribe」をクリックすることで、AWS marketplaceの新規タブが開きます。
4.png

Stable Diffusion XL 1.0の「Pricing Terms」を見てみると、
モデルの利用料金はかからないことがわかります。
ページ下部のEULAを確認し、Accept Offerをクリックします。
5.png

Stable Diffusion XL 1.0のサブスクライブが完了しました。
AWS_Marketplace__Stable_Diffusion_XL_1_0.png

モデルの詳細を確認

Product Detailsをクリックすると、モデルの詳細を確認することができます
product_detail.png

概要、料金、使い方などを確認することができます。
AWS_Marketplace__Stable_Diffusion_XL_1_0.png

モデルを推論エンドポイントにデプロイ

先ほどのタブに戻って、「Deploy」をクリックします。
Stabilityai_Sdxl_1_0_-_SageMaker_Studio.png

デフォルトの設定のまま、右下の「Deploy」をクリックします。
この推論エンドポイントで使用するインスタンス対しては料金が発生しますので、
推論エンドポイントの消し忘れにはご注意ください。

料金の詳細については、 SageMaker AI の料金表から確認してください。

Cursor_と_Deploy_-_SageMaker_Studio.png

推論エンドポイントが作成されました。
作成してすぐは、Statusが「Creating」となっています。
Statusが「In service」に遷移すると、推論エンドポイントを使用することができます。
https___qiita-image-store_s3_ap-northeast-1_amazonaws_com_0_1053703_9495a3bb-8b1a-a319-7865-a0242561d767.png

Statusが「In service」に変わりました。
「jumpstart-dft-stabilityai-sdxl-1-0-20250209-035558」がエンドポイント名になります。
エンドポイント名はこの後の手順で使用します。
Jumpstart_Dft_Stabilityai_Sdxl_1_0_20250209_035558_-_SageMaker_Studio.png

推論エンドポイントにアクセス

モデルの詳細ページを参考に、推論エンドポイントにアクセスをし、
生成されたイメージを保存するコードを作成してみました。

実行環境

pythonのバージョンは3.12.7を使用しました。
依存関係は以下の通りです。

requirements.txt
boto3==1.36.16
botocore==1.36.16
jmespath==1.0.1
python-dateutil==2.9.0.post0
s3transfer==0.11.2
six==1.17.0
urllib3==2.3.0

実行コード

以下が推論エンドポイント利用検証用のコードになります。
endpoint_nameに先ほど確認したエンドポイント名を格納してください。
プロファイルとして、IAMユーザーのアクセスキーを発行して指定しています。

invoke_endpoint.py
import boto3
import json
import base64
import os

# SageMakerのエンドポイント名を設定
# 例 endpoint_name = "jumpstart-dft-stabilityai-sdxl-1-0-20250209-035558"
endpoint_name = "YOUR_INFFERENCE_ENDPOINT_NAME"


# リクエストペイロード
payload = {
    "cfg_scale": 7,
    "height": 1024,
    "width": 1024,
    "steps": 50,
    "seed": 42,
    "sampler": "K_DPMPP_2M",
    "text_prompts": [
        {
            "text": "A photograph of fresh pizza with basil and tomatoes, from a traditional oven",
            "weight": 1
        }
    ]
}

# SageMakerランタイムクライアントを初期化
sagemaker_runtime = boto3.client("sagemaker-runtime", region_name="us-west-2")

# エンドポイントにリクエスト送信
response = sagemaker_runtime.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType="application/json",
    Body=json.dumps(payload)
)

# レスポンスデータの取得
response_body = json.loads(response["Body"].read().decode("utf-8"))

# レスポンスから画像データを保存
if response_body.get("result") == "success" and "artifacts" in response_body:
    # 出力先ディレクトリ
    output_dir = "output_images"
    os.makedirs(output_dir, exist_ok=True)
    
    for index, artifact in enumerate(response_body["artifacts"]):
        # Base64データを取得
        base64_data = artifact.get("base64")
        finish_reason = artifact.get("finishReason", "UNKNOWN")
        seed = artifact.get("seed", "UNKNOWN")
        
        if base64_data:
            # Base64データをデコードしてバイナリ形式に変換
            image_data = base64.b64decode(base64_data)
            
            # ファイル名の作成
            file_name = f"image_{index+1}_seed_{seed}_{finish_reason}.png"
            file_path = os.path.join(output_dir, file_name)
            
            # 画像を保存
            with open(file_path, "wb") as f:
                f.write(image_data)
            print(f"画像が保存されました: {file_path}")
        else:
            print(f"アーティファクト {index+1} に画像データがありません。")
else:
    print("画像生成に失敗しました。レスポンス:", response_body)

結果

output_imagesディレクトリ配下に、バジルとトマトが乗ったピザが生成されました。

まとめ

SageMaker AIを資格などで勉強はすれど、実際に触ったことは無かったので、
JumpStartは入り口としてはとても良かったと思いました。

JumpStartでは使用できるデプロイオプションとして、リアルタイム推論とバッチ変換のみがサポートされていてデプロイオプションが限られているようなので、今後JumpStartを使用したデプロイ以外も試していきたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?