翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
アルゴリズムイメージ
アマゾン SageMaker アルゴリズムでは、買い手が予測を行う前にトレーニングのために自分のデータを持参する必要があります。
アルゴリズムには、以下のコンポーネントが含まれます。
-
に保存されているトレーニング画像Amazon ECR
-
Amazon Elastic Container Registry (Amazon ECR) に保存されている推論イメージ
アルゴリズム製品の場合、トレーニングコンテナーは、モデルのデプロイ時に推論コンテナーにロードされるモデルアーティファクトを生成します。
次の図は、アルゴリズム製品を公開して使用するワークフローを示しています。

-
出品者はトレーニングイメージと推論イメージ (展開時にはネットワークアクセスなし) を作成し、Amazon ECR レジストリにアップロードします。
-
その後、出品者はAmazonでアルゴリズムリソースを作成します。 SageMaker ML製品をAWS Marketplace。
-
購入者がML商品をサブスクライブした場合。
-
購入者は、互換性のあるデータセットと適切なハイパーパラメータ値を使用してトレーニングジョブを作成します。 SageMaker トレーニングイメージを実行し、トレーニングデータとハイパーパラメーターをトレーニングコンテナーにロードします。トレーニングジョブが完了すると、モデルアーティファクトは
/opt/ml/model/
圧縮され、購入者のSimple Storage Service (Amazon S3)バケツ。 -
購入者は、Amazon S3 に保存されているトレーニングのモデルアーティファクトを含むモデルパッケージを作成し、モデルをデプロイします。
-
SageMaker 推論イメージを実行し、圧縮されたモデル成果物を抽出し、ファイルを推論コンテナのディレクトリパスにロードします
/opt/ml/model/
推論に役立つコードによって消費される場所。 -
モデルがエンドポイントとしてデプロイされるか、バッチ変換ジョブとしてデプロイされるか、 SageMaker は、購入者に代わって推論用のデータをコンテナの HTTP エンドポイント経由でコンテナに渡し、予測結果を返します。
詳細については、次を参照してください。モデルのトレーニング。
アルゴリズムのトレーニングイメージを作成する
このセクションでは、トレーニングコードをトレーニングイメージにパッケージ化するためのチュートリアルを提供します。アルゴリズム製品を作成するには、トレーニング画像が必要です。
あるトレーニングイメージはトレーニングアルゴリズムを含む Docker イメージです。コンテナは特定のファイル構造に従い、 SageMaker コンテナとの間でデータをコピーします。
アルゴリズム製品を公開する際には、トレーニングイメージと推論イメージの両方が必要です。 トレーニングイメージを作成したら、推論イメージを作成する必要があります。 2 つの画像は 1 つの画像に結合することも、別々の画像として残すこともできます。画像を組み合わせるか分離するかは、あなた次第です。通常、推論はトレーニングよりも簡単であり、推論のパフォーマンスを高めるために別の画像が必要になる場合があります。
以下は、トレーニングイメージのパッケージコードの一例にすぎません。詳細については、次を参照してください。独自のアルゴリズムとモデルをAWS MarketplaceとAWS Marketplace SageMaker 例
ステップ 1: コンテナイメージを作成する
トレーニング画像を Amazon と互換性を持たせるには SageMaker、許可するには特定のファイル構造に従う必要があります SageMaker をクリックして、トレーニングデータと設定入力をコンテナ内の特定のパスにコピーします。トレーニングが完了すると、生成されたモデルアーティファクトはコンテナー内の特定のディレクトリパスに保存されます。 SageMaker からの COPY
以下は、LinuxのUbuntuディストリビューション上の開発環境にインストールされたDocker CLIを使用しています。
構成入力を読み取るようにプログラムを準備する
トレーニングプログラムに購入者提供の構成入力が必要な場合、実行時にコンテナ内にコピーされる場所は次のとおりです。必要に応じて、プログラムはそれらの特定のファイルパスから読み取る必要があります。
-
/opt/ml/input/config
は、プログラムの実行方法を制御する情報を含むディレクトリです。-
hyperparameters.json
は、JSON 形式のハイパーパラメータの名前と値の辞書です。値は文字列なので、変換が必要な場合があります。 -
resourceConfig.json
に使用されるネットワークレイアウトを記述する JSON 形式のファイルです分散トレーニング。 トレーニングイメージが分散トレーニングをサポートしていない場合、このファイルは無視できます。
-
設定入力の詳細については、「」を参照してください。Amazon SageMaker トレーニング情報の提供。
データ入力を読み取るためのプログラムの準備
トレーニングデータは、以下の 2 つのモードのいずれかでコンテナに渡すことができます。コンテナで実行されるトレーニングプログラムは、これら 2 つのモードのいずれかでトレーニングデータをダイジェストします。
ファイルモード
-
/opt/ml/input/data/<channel_name>/
には、そのチャンネルの入力データが含まれます。チャンネルは、への呼び出しに基づいて作成されますCreateTrainingJob
しかし、チャネルがアルゴリズムが期待するものと一致することが一般的に重要です。各チャンネルのファイルは以下からコピーされますSimple Storage Service (Amazon S3)をこのディレクトリに追加し、Amazon S3 キー構造によって示されるツリー構造を保持します。
パイプモード
-
/opt/ml/input/data/<channel_name>_<epoch_number>
は特定のエポックのパイプです。エポックはゼロから始まり、読むたびに1つずつ増加します。実行できるエポック数に制限はありませんが、次のエポックを読む前に各パイプを閉じる必要があります。
トレーニングアウトプットを記述するプログラムを準備する
トレーニングの出力は、次のコンテナディレクトリに書き込まれます。
-
/opt/ml/model/
は、トレーニングアルゴリズムが生成するモデルまたはモデルアーティファクトを書き込むディレクトリです。モデルは任意の形式にすることができます。単一のファイルでもディレクトリツリー全体でもかまいません。 SageMaker このディレクトリにあるファイルを、圧縮ファイル (.tar.gz) にパッケージ化します。このファイルは、によって返される Amazon S3 の場所で入手できます。DescribeTrainingJob
API オペレーション。 -
/opt/ml/output/
アルゴリズムが書き込めるディレクトリですfailure
ジョブが失敗した理由を説明するファイル。このファイルの内容はFailureReason
フィールドのDescribeTrainingJob
結果。成功したジョブの場合、このファイルは無視されるので、書き込む理由はありません。
コンテナ実行用のスクリプトを作成する
の作成train
シェルスクリプトで SageMaker Docker コンテナイメージを実行するときに実行されます。トレーニングが完了し、モデルアーティファクトがそれぞれのディレクトリに書き込まれたら、スクリプトを終了します。
./train
#!/bin/bash # Run your training program here # # # #
Dockerfile
の作成
の作成Dockerfile
ビルドコンテキストで。この例では Ubuntu 18.04 をベースイメージとして使用していますが、フレームワークで動作する任意のベースイメージから開始できます。
./Dockerfile
FROM ubuntu:18.04 # Add training dependencies and programs # # # # # # Add a script that SageMaker will run # Set run permissions # Prepend program directory to $PATH COPY /train /opt/program/train RUN chmod 755 /opt/program/train ENV PATH=/opt/program:${PATH}
-Dockerfile
以前に作成したものを追加しますtrain
スクリプトを画像に追加します。スクリプトのディレクトリが PATH に追加され、コンテナの実行時に実行できるようになります。
前の例では、実際のトレーニングロジックはありません。実際のトレーニングイメージについては、トレーニングの依存関係をDockerfile
を選択し、トレーニング入力を読み取るロジックを追加してモデルアーティファクトをトレーニングおよび生成します。
インターネットにアクセスできないため、トレーニング画像には必要な依存関係がすべて含まれている必要があります。
詳細については、次を参照してください。独自のアルゴリズムとモデルをAWS MarketplaceとAWS Marketplace SageMaker 例
ステップ 2: イメージをローカルでビルドしてテストする
ビルドコンテキストでは、次のファイルが存在します。
-
./Dockerfile
-
./train
-
トレーニングの依存関係と論理
次に、このコンテナイメージをビルド、実行、テストできます。
イメージを構築する
ビルドコンテキストで Docker コマンドを実行し、イメージをビルドしてタグ付けします。この例ではタグを使用していますmy-training-image
。
sudo docker build --tag my-training-image ./
この Docker コマンドを実行してイメージをビルドすると、Docker がDockerfile
。完了すると、次のような内容が表示されます。
Successfully built abcdef123456
Successfully tagged my-training-image:latest
をローカルで実行する
それが完了したら、次の例に示すように、イメージをローカルでテストします。
sudo docker run \ --rm \ --volume '<path_to_input>:/opt/ml/input:ro' \ --volume '<path_to_model>:/opt/ml/model' \ --volume '<path_to_output>:/opt/ml/output' \ --name my-training-container \ my-training-image \ train
以下はコマンドの詳細です。
-
--rm
— コンテナが停止したら、コンテナを自動的に削除します。 -
--volume '<path_to_input>:/opt/ml/input:ro'
— コンテナでテスト入力ディレクトリを読み取り専用として使用できるようにします。 -
--volume '<path_to_model>:/opt/ml/model'
— トレーニングテストが完了したときに、モデルアーティファクトが保存されているホストマシン上のパスをバインドマウントします。 -
--volume '<path_to_output>:/opt/ml/output'
— 失敗の理由があるパスをバインドマウントするfailure
ファイルはホストマシンに書き込まれます。 -
--name my-training-container
— この実行中のコンテナに名前を付けます。 -
my-training-image
— 構築イメージを実行します。 -
train
— 同じスクリプトを実行する SageMaker コンテナの実行時に実行されます。
このコマンドを実行すると、Docker はビルドしたトレーニングイメージからコンテナーを作成して実行します。コンテナはtrain
script、トレーニングプログラムを開始します。
トレーニングプログラムが終了してコンテナーが終了したら、出力モデルのアーティファクトが正しいことを確認します。さらに、ログ出力をチェックして、トレーニングジョブについて十分な情報が提供されていることを確認しながら、不要なログを生成していないことを確認します。
これで、アルゴリズム製品のトレーニングコードのパッケージ化が完了しました。アルゴリズム製品には推論イメージも含まれているため、次のセクションに進みます。 アルゴリズムの推論イメージを作成する。
アルゴリズムの推論イメージを作成する
このセクションでは、推論コードをアルゴリズム製品の推論イメージにパッケージ化するためのチュートリアルを提供します。
推論イメージは、推論ロジックを含む Docker イメージです。コンテナは実行時に HTTP エンドポイントを公開し、 SageMaker コンテナとの間でデータをやり取りします。
アルゴリズム製品を公開する際には、トレーニングイメージと推論イメージの両方が必要です。 先に「」を参照してください。アルゴリズムのトレーニングイメージを作成する。2 つの画像は 1 つの画像に結合することも、別々の画像として残すこともできます。画像を組み合わせるか分離するかは、あなた次第です。通常、推論はトレーニングよりも簡単であり、推論のパフォーマンスを高めるために別の画像が必要になる場合があります。
以下は、推論画像のパッケージコードの一例にすぎません。詳細については、次を参照してください。独自のアルゴリズムとモデルをAWS MarketplaceとAWS Marketplace SageMaker 例
次の例では、Web サービスを使用しています。Flask
ステップ 1: 推論画像を作成する
推論イメージと互換性を持たせるには SageMakerでは、Docker イメージは HTTP エンドポイントを公開する必要があります。コンテナが実行されている間、SageMaker 購入者が提供する推論用の入力をコンテナの HTTP エンドポイントに渡します。推論の結果は HTTP レスポンスの本文で返されます。
以下は、LinuxのUbuntuディストリビューション上の開発環境にインストールされたDocker CLIを使用しています。
ウェブサーバースクリプトを作成する
この例では、という名前の Python サーバーを使用しています。Flask
Flask
TCP ポート 8080 で 2 つの HTTP エンドポイントを処理する Flask Web サーバースクリプトを作成します。 SageMaker を使用します。予想される 2 つのエンドポイントは次のとおりです。
-
/ping
– SageMaker コンテナの準備ができているかどうかを確認するために、このエンドポイントに HTTP GET リクエストを行います。コンテナの準備ができたら、このエンドポイントで HTTP GET リクエストに HTTP 200 応答コードで応答します。 -
/invocations
– SageMaker 推論のためにこのエンドポイントに 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 here. # # # # # # Add your inference code here. # Return a response with a prediction response = {"prediction":"a","text":input_str} return json.dumps(response)
前の例では、実際の推論ロジックはありません。実際の推論画像については、推論ロジックを Web アプリに追加して、入力を処理して予測を返すようにします。
推論イメージはインターネットにアクセスできないため、必要な依存関係をすべて含める必要があります。
コンテナ実行用のスクリプトを作成する
という名前のスクリプトを作成しますserve
それを SageMaker Docker コンテナイメージを実行するときに実行されます。このスクリプトでは、HTTP Web サーバーを起動します。
./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 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 に追加され、コンテナの実行時に実行できるようになります。
モデルアーティファクトを動的に読み込むためのプログラムの準備
アルゴリズム製品の場合、購入者はトレーニングイメージで独自のデータセットを使用して、独自のモデルアーティファクトを生成します。トレーニングプロセスが完了すると、トレーニングコンテナはモデルアーティファクトをコンテナディレクトリに出力します。
/opt/ml/model/
。 SageMaker そのディレクトリの内容を.tar.gz ファイルに圧縮し、購入者のAWS アカウントAmazon S3 で。
モデルが展開されると、 SageMaker 推論イメージを実行し、Amazon S3 の購入者のアカウントに保存されている.tar.gz ファイルからモデルアーティファクトを抽出し、それらを/opt/ml/model/
ディレクトリ。実行時に、推論コンテナコードはモデルデータを使用します。
モデルアーティファクトファイルに含まれている可能性がある知的財産を保護するために、ファイルを出力する前に暗号化することもできます。詳細については、「 セキュリティと知的財産」を参照してください。
ステップ 2: イメージをローカルでビルドしてテストする
ビルドコンテキストでは、次のファイルが存在します。
-
./Dockerfile
-
./web_app_serve.py
-
./serve
次に、このコンテナイメージをビルド、実行、テストできます。
イメージを構築する
Docker コマンドを実行してイメージをビルドし、タグ付けします。この例ではタグを使用していますmy-inference-image
。
sudo docker build --tag my-inference-image ./
この Docker コマンドを実行してイメージをビルドすると、Docker がDockerfile
。完了すると、次のような内容が表示されます。
Successfully built abcdef123456
Successfully tagged my-inference-image:latest
をローカルで実行する
ビルドが完了したら、イメージをローカルでテストできます。
sudo docker run \ --rm \ --publish 8080:8080/tcp \ --volume '<path_to_model>:/opt/ml/model:ro' \ --detach \ --name my-inference-container \ my-inference-image \ serve
以下はコマンドの詳細です。
-
--rm
— コンテナが停止したら、コンテナを自動的に削除します。 -
--publish 8080:8080/tcp
— ポート8080を公開してポートをシミュレートする SageMaker は HTTP 要求をに送信します。 -
--volume '<path_to_model>:/opt/ml/model:ro'
— テストモデルアーティファクトがホストマシン上で読み取り専用として保存されている場所へのパスをバインドマウントし、コンテナ内の推論コードで使用できるようにします。 -
--detach
— コンテナをバックグラウンドで実行します。 -
--name my-inference-container
— この実行中のコンテナに名前を付けます。 -
my-inference-image
— 構築イメージを実行します。 -
serve
— 同じスクリプトを実行する SageMaker コンテナの実行時に実行されます。
このコマンドを実行すると、Docker は推論イメージからコンテナーを作成し、バックグラウンドで実行します。コンテナはserve
スクリプト。テスト目的で Web サーバーを起動します。
ping HTTP エンドポイントをテストする
メトリック SageMaker コンテナを実行し、定期的にエンドポイントに ping を送信します。 エンドポイントがステータスコード200のHTTPレスポンスを返すと、 SageMaker コンテナが推論の準備ができていることを確認します。
エンドポイントをテストし、レスポンスヘッダーを含めるには、次のコマンドを実行します。
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 エンドポイントをテストする
コンテナが200ステータスコードを返すことで準備完了を示すと、 SageMaker 推論データを/invocations
経由の HTTP エンドポイントPOST
リクエスト.
推論エンドポイントをテストするには、次のコマンドを実行します。
curl \ --request POST \ --data "hello world" \ http://127.0.0.1:8080/invocations
出力例を次の例で示します。
{"prediction": "a", "text": "hello world"}
これら 2 つの HTTP エンドポイントが動作すると、推論イメージは SageMaker。
アルゴリズム製品のモデルは、リアルタイムとバッチの 2 つの方法で展開できます。どちらの展開でも、 SageMaker は Docker コンテナの実行中に同じ HTTP エンドポイントを使用します。
コンテナを停止するには、次のコマンドを実行します。
sudo docker container stop my-inference-container
アルゴリズム製品のトレーニングイメージと推論イメージの両方が準備され、テストされたら、画像をアップロードします。