翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
モデルパッケージイメージの作成
Amazon SageMaker AI モデルパッケージは、予測を行う事前トレーニング済みのモデルであり、購入者による追加のトレーニングは必要ありません。SageMaker AI でモデルパッケージを作成し、機械学習製品を公開できます AWS Marketplace。以下のセクションでは、 のモデルパッケージを作成する方法について説明します AWS Marketplace。これには、コンテナイメージの作成、イメージのローカルでのビルドとテストが含まれます。
概要
モデルパッケージには、次のコンポーネントが含まれています。
-
Amazon Elastic Container Registry
(Amazon ECR) に保存された推論イメージ -
(オプション) Amazon S3
に個別に保存されているモデルアーティファクト
注記
モデルアーティファクトは、モデルが予測を行うために使用するファイルであり、通常は独自のトレーニングプロセスの結果です。アーティファクトは、モデルが必要とするどのようなファイルタイプでも構いませんが、.tar.gz 圧縮を使用する必要があります。モデルパッケージの場合、推論イメージ内にバンドルすることも、Amazon SageMaker AI に個別に保存することもできます。Amazon S3 に保存されているモデルアーティファクトは、実行時に推論コンテナにロードされます。モデルパッケージを公開すると、これらのアーティファクトは購入者が直接アクセスできない AWS Marketplace 所有の Amazon S3 バケットに公開され、保存されます。
ヒント
推論モデルが Gluon、Keras、MXNet、PyTorch、TensorFlow、TensorFlow-Lite、ONNX などの深層学習フレームワークで構築されている場合は、Amazon SageMaker AI Neo の使用を検討してください。Neo は、ml.c4
、ml.p2
などの、クラウドインスタンスタイプの特定のファミリーにデプロイする推論モデルを自動的に最適化できます。詳細については、Amazon SageMaker AI デベロッパーガイド」の「Neo を使用してモデルのパフォーマンスを最適化する」を参照してください。
次の図は、モデルパッケージ製品を公開して使用するワークフローを示しています。

の SageMaker AI モデルパッケージを作成するためのワークフロー AWS Marketplace には、次のステップが含まれます。
-
販売者は推論イメージ (デプロイ時のネットワークアクセス不可) を作成し、Amazon ECR レジストリにプッシュします。
モデルアーティファクトは推論イメージにバンドルすることも S3 に個別に保存することもできます。
-
次に、販売者は Amazon SageMaker AI でモデルパッケージリソースを作成し、ML 製品を公開します AWS Marketplace。
-
購入者は ML 製品をサブスクライブしてモデルをデプロイします。
注記
このモデルは、リアルタイムの推論を行うエンドポイントとしてデプロイすることも、データセット全体の予測を一度に取得するバッチジョブとしてデプロイすることもできます。詳細については、「推論のためのモデルをデプロイする」を参照してください。
-
SageMaker AI は推論イメージを実行します。推論イメージにバンドルされていない販売者提供のモデルアーティファクトは、ランタイムに動的に読み込まれます。
-
SageMaker AI は、コンテナの HTTP エンドポイントを使用して購入者の推論データをコンテナに渡し、予測結果を返します。
モデルパッケージ用の推論イメージの作成
このセクションでは、推論コードをモデルパッケージ製品の推論イメージにパッケージ化する手順を説明します。そのプロセスは、以下のステップで構成されています。
推論イメージは、推論ロジックを含む Docker イメージです。実行時にコンテナは HTTP エンドポイントを公開し、SageMaker AI がコンテナとの間でデータを送受信できるようにします。
注記
以下は、推論イメージのパッケージコードの一例です。詳細については、GitHub のSageMaker AI での Docker コンテナの使用」およびAWS Marketplace SageMaker AI の例
以下の例ではわかりやすくするために Flask
ステップ 1: コンテナイメージを作成する
推論イメージを SageMaker AI と互換性を持たせるには、Docker イメージが HTTP エンドポイントを公開する必要があります。コンテナの実行中、SageMaker AI は推論のために購入者入力をコンテナの HTTP エンドポイントに渡します。推論結果は HTTP レスポンスの本文で返されます。
次のチュートリアルでは、Linux Ubuntu ディストリビューションを使用する開発環境で Docker CLI を使用します。
ウェブサーバースクリプトを作成する
この例では Flask
注記
ここではわかりやすくするために Flask
SageMaker AI が使用する TCP ポート 8080 で 2 つの HTTP エンドポイントを提供する Flask ウェブサーバースクリプトを作成します。想定されるエンドポイントは次の 2 つです。
-
/ping
– SageMaker AI はこのエンドポイントに HTTP GET リクエストを行い、コンテナの準備が整っているかどうかを確認します。コンテナの準備が完了すると、コンテナはこのエンドポイントでの HTTP GET リクエストに HTTP 200 レスポンスコードで応答します。 -
/invocations
– SageMaker AI は、推論のためにこのエンドポイントに HTTP POST リクエストを行います。推論用の入力データはリクエストの本文で送信されます。ユーザー指定のコンテンツタイプは HTTP ヘッダーで渡されます。レスポンスの本文は推論出力です。タイムアウトの詳細については、「機械学習製品を作成するための要件とベストプラクティス」を参照してください。
./web_app_serve.py
# Import modules import json import re from flask import Flask from flask import request app = Flask(__name__) # Create a path for health checks @app.route("/ping") def endpoint_ping(): return "" # Create a path for inference @app.route("/invocations", methods=["POST"]) def endpoint_invocations(): # Read the input input_str = request.get_data().decode("utf8") # Add your inference code between these comments. # # # # # # Add your inference code above this comment. # Return a response with a prediction response = {"prediction":"a","text":input_str} return json.dumps(response)
前の例には、実際の推論ロジックはありません。実際の推論イメージについては、ウェブアプリに推論ロジックを追加し、入力を処理して実際の予測を返します。
推論イメージには、インターネットアクセスも、 への呼び出しもできないため、必要な依存関係がすべて含まれている必要があります AWS のサービス。
注記
これと同じコードがリアルタイム推論とバッチ推論の両方で呼び出されます。
コンテナ実行用のスクリプトを作成する
Docker コンテナイメージの実行時に SageMaker AI serve
が実行する という名前のスクリプトを作成します。次のスクリプトは HTTP ウェブサーバーを起動します。
./serve
#!/bin/bash # Run flask server on port 8080 for SageMaker flask run --host 0.0.0.0 --port 8080
Dockerfile
の作成
ビルドコンテキストに Dockerfile
を作成します。この例では Ubuntu 18.04 を使用していますが、フレームワークに適していれば、どのベースイメージからでも開始できます。
./Dockerfile
FROM ubuntu:18.04 # Specify encoding ENV LC_ALL=C.UTF-8 ENV LANG=C.UTF-8 # Install python-pip RUN apt-get update \ && apt-get install -y python3.6 python3-pip \ && ln -s /usr/bin/python3.6 /usr/bin/python \ && ln -s /usr/bin/pip3 /usr/bin/pip; # Install flask server RUN pip install -U Flask; # Add a web server script to the image # Set an environment to tell flask the script to run COPY /web_app_serve.py /web_app_serve.py ENV FLASK_APP=/web_app_serve.py # Add a script that Amazon SageMaker AI will run # Set run permissions # Prepend program directory to $PATH COPY /serve /opt/program/serve RUN chmod 755 /opt/program/serve ENV PATH=/opt/program:${PATH}
Dockerfile
は、以前に作成した 2 つのスクリプトをイメージに追加します。serve
スクリプトのディレクトリが PATH に追加されると、コンテナの実行時にそれを実行できるようになります。
モデルアーティファクトをパッケージ化またはアップロードする
モデルのトレーニングから推論イメージまで、モデルアーティファクトを提供する方法には、以下の 2 つがあります。
-
推論イメージと共に静的にパッケージ化します。
-
ランタイムに動的にロードします。動的に読み込まれるため、同じイメージをさまざまな機械学習モデルのパッケージ化に使用できます。
モデルのアーティファクトを推論イメージと一緒にパッケージ化する場合は、アーティファクトを Dockerfile
に含めてください。
モデルアーティファクトを動的にロードする場合は、それらのアーティファクトを Amazon S3 の圧縮ファイル (.tar.gz) に個別に保存します。モデルパッケージを作成するときは、圧縮ファイルの場所を指定します。SageMaker AI は、コンテナの実行/opt/ml/model/
時にコンテンツを抽出してコンテナディレクトリにコピーします。モデルパッケージを公開すると、それらのアーティファクトは、購入者が直接アクセスできない、 AWS Marketplace
所有の Amazon S3 バケットに公開および保存されます。
ステップ 2: イメージをローカルでビルドしてテストする
ビルドコンテキストには、現在、以下のファイルが存在します。
-
./Dockerfile
-
./web_app_serve.py
-
./serve
-
推論ロジックと (オプションの) 依存関係
次に、コンテナイメージをビルド、実行、テストします。
イメージを構築する
ビルドコンテキストで Docker コマンドを実行し、イメージをビルドしてタグ付けします。この例ではタグ my-inference-image
を使用します。
sudo docker build --tag my-inference-image ./
この Docker コマンドを実行してイメージをビルドすると、Dockerfile
の各行に基づいて Docker がイメージをビルドするときの出力が表示されます。終了すると、次のようなものが表示されます。
Successfully built abcdef123456
Successfully tagged my-inference-image:latest
をローカルで実行する
ビルドが完了したら、イメージをローカルでテストできます。
sudo docker run \ --rm \ --publish 8080:8080/tcp \ --detach \ --name my-inference-container \ my-inference-image \ serve
コマンドの詳細は次のとおりです。
-
--rm
- コンテナが停止したら自動的に削除します。 -
--publish 8080:8080/tcp
– ポート 8080 を公開して、SageMaker AI が HTTP リクエストを送信するポートをシミュレートします。 -
--detach
- コンテナをバックグラウンドで実行します。 -
--name my-inference-container
- 実行中のこのコンテナに名前を付けます。 -
my-inference-image
- ビルドされたイメージを実行します。 -
serve
– コンテナの実行時に SageMaker AI が実行するのと同じスクリプトを実行します。
このコマンドを実行すると、Docker は、ビルドした推論イメージからコンテナを作成してバックグラウンドで実行します。コンテナは serve
スクリプトを実行し、テスト目的でウェブサーバーを起動します。
HTTP エンドポイントへの ping をテストします。
SageMaker AI がコンテナを実行すると、定期的にエンドポイントに ping を送信します。エンドポイントがステータスコード 200 の HTTP レスポンスを返すと、コンテナが推論の準備ができていることを SageMaker AI に通知します。これをテストするには、次のコマンドを実行します。このコマンドはエンドポイントをテストしてレスポンスヘッダーを含めます。
curl --include http://127.0.0.1:8080/ping
出力例は次のとおりです。
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 0
Server: MyServer/0.16.0 Python/3.6.8
Date: Mon, 21 Oct 2019 06:58:54 GMT
推論 HTTP エンドポイントをテストします。
コンテナが ping に 200 のステータスコードを返すことで準備が整っていることを示すと、SageMaker AI はPOST
リクエストを介して推論データを HTTP /invocations
エンドポイントに渡します。以下のコマンドを実行して、推論ポイントをテストします。
curl \ --request POST \ --data "hello world" \ http://127.0.0.1:8080/invocations
出力例は次のとおりです。
{"prediction": "a", "text": "hello
world"}
これら 2 つの HTTP エンドポイントが機能するので、推論イメージは SageMaker AI と互換性があります。
注記
モデルパッケージ製品のモデルは、リアルタイムとバッチの 2 つの方法でデプロイできます。どちらのデプロイでも、SageMaker AI は Docker コンテナの実行中に同じ HTTP エンドポイントを使用します。
コンテナを停止するには、次のコマンドを実行します。
sudo docker container stop my-inference-container
推論イメージの準備とテストが完了したら、次の「Amazon Elastic Container Registry へのイメージのアップロード」に進むことができます。