アルゴリズムイメージの作成 - AWS Marketplace

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

アルゴリズムイメージの作成

Amazon SageMaker アルゴリズムでは、予測を行う前に、購入者が独自のデータを持ってトレーニングする必要があります。 AWS Marketplace 販売者として、 SageMaker を使用して、購入者が にデプロイできる機械学習 (ML) アルゴリズムとモデルを作成できます AWS。以下のセクションでは、 のアルゴリズムイメージを作成する方法を説明します AWS Marketplace。これには、アルゴリズムをトレーニングするための Docker トレーニングイメージと、推論ロジックを含む推論イメージの作成が含まれます。アルゴリズム製品を公開するには、トレーニングイメージと推論イメージの両方が必要です。

概要

アルゴリズムには以下のコンポーネントが含まれています。

  • Amazon ECRに保存されているトレーニングイメージ

  • Amazon Elastic Container Registry (Amazon ECR) に保存されている推論イメージ

注記

アルゴリズム製品では、トレーニングコンテナによってモデルアーティファクトが生成され、モデルのデプロイ時に推論コンテナに読み込まれます。

次の図は、アルゴリズム製品を公開して使用するワークフローを示しています。

販売者がアルゴリズムパッケージイメージを作成する方法と購入者がそれを使用する方法を示す図。

の SageMaker アルゴリズムを作成するためのワークフロー AWS Marketplace には、次のステップが含まれます。

  1. 販売者はトレーニングイメージと推論イメージ (デプロイ時にネットワークアクセスなし) を作成し、Amazon ECR Registry にアップロードします。

  2. 次に、販売者は Amazon にアルゴリズムリソースを作成し SageMaker 、ML 製品を に公開します AWS Marketplace。

  3. 購入者は ML 製品をサブスクライブします。

  4. 購入者は、互換性のあるデータセットと適切なハイパーパラメータ値を使用してトレーニングジョブを作成します。 はトレーニングイメージ SageMaker を実行し、トレーニングデータとハイパーパラメータをトレーニングコンテナにロードします。トレーニングジョブが完了すると、/opt/ml/model/ にあるモデルアーティファクトが圧縮され、購入者の Amazon S3 バケットにコピーされます。

  5. 購入者は Amazon S3 に保存されているトレーニングのモデルアーティファクトを含むモデルパッケージを作成し、モデルをデプロイします。

  6. SageMaker は推論イメージを実行し、圧縮されたモデルアーティファクトを抽出し、ファイルを推論コンテナディレクトリパスにロードします。/opt/ml/model/このパスは、推論を提供するコードによって消費されます。

  7. モデルがエンドポイントとしてデプロイされるかバッチ変換ジョブとしてデプロイされるかにかかわらず、 SageMaker は、購入者に代わって推論用のデータをコンテナのHTTPエンドポイント経由でコンテナに渡し、予測結果を返します。

注記

詳細については、「モデルのトレーニング」を参照してください。

アルゴリズム用のトレーニングイメージの作成

このセクションでは、トレーニングコードをトレーニングイメージにパッケージ化する手順を説明します。アルゴリズム製品を作成するには、トレーニングイメージが必要です。

トレーニングイメージは、トレーニングアルゴリズムを含む Docker イメージです。コンテナは、特定のファイル構造に従って、 SageMaker がコンテナとの間でデータをコピーできるようにします。

アルゴリズム製品を公開する際は、トレーニングイメージと推論イメージの両方が必要です。トレーニングイメージを作成したら、推論イメージを作成する必要があります。2 つのイメージは 1 つのイメージに結合することも、個別のイメージのままにしておくこともできます。イメージを結合するか個別のイメージのままにするかは、ユーザーしだいです。通常、推論は学習よりも単純です。イメージを結合せずに個別のイメージのままにすると、推論のパフォーマンスが向上することがあります。

注記

以下は、トレーニングイメージのパッケージコードの一例です。詳細については、「 で独自のアルゴリズムとモデルを使用する」および AWS MarketplaceAWS Marketplace SageMaker 「」の例を参照してください GitHub。

ステップ 1: コンテナイメージを作成する

トレーニングイメージを Amazon と互換性を持たせるには SageMaker、トレーニングデータと設定入力をコンテナ内の特定のパス SageMaker にコピーできるように、特定のファイル構造に従う必要があります。トレーニングが完了すると、生成されたモデルアーティファクトは、 SageMaker コピー元のコンテナ内の特定のディレクトリパスに保存されます。

以下は、Linux の Ubuntu ディストリビューションの開発環境にCLIインストールされた Docker を使用します。

設定入力を読み取れるようプログラムを準備します。

トレーニングプログラムで購入者提供の設定入力が必要な場合は、実行時に以下がコンテナ内にコピーされます。必要に応じて、プログラムはこれらの特定のファイルパスから読み取りを行う必要があります。

  • /opt/ml/input/config は、プログラムの実行方法を制御する情報が保存されているディレクトリです。

    • hyperparameters.json は、ハイパーパラメータの名前と値のJSONフォーマットされたディクショナリです。値は文字列のため、変換が必要になる場合があります。

    • resourceConfig.json は、分散トレーニング に使用されるネットワークレイアウトを説明するJSONフォーマットファイルです。トレーニングイメージが分散トレーニングをサポートしていない場合は、このファイルを無視できます。

注記

設定入力の詳細については、「Amazon SageMaker がトレーニング情報を提供する方法」を参照してください。

データ入力を読み取れるようプログラムを準備します。

トレーニングデータは、次の 2 つのモードのいずれかでコンテナに渡すことができます。コンテナ内で実行されるトレーニングプログラムは、これら 2 つのモードのいずれかでトレーニングデータのダイジェストを作成します。

ファイルモード

  • /opt/ml/input/data/<channel_name>/ にそのチャネルの入力データが含まれます。チャネルは CreateTrainingJob オペレーションの呼び出しに基づいて作成されますが、一般的にはアルゴリズムが期待するものとチャネルが一致することが重要です。各チャネルのファイルは Amazon S3 からこのディレクトリにコピーされ、Amazon S3 のキー構造によって示されるツリー構造が保持されます。

パイプモード

  • /opt/ml/input/data/<channel_name>_<epoch_number> は特定のエポックのパイプです。エポックは 0 から始まり、読み込まれるたびに 1 ずつ増えていきます。実行できるエポックの数に制限はありませんが、次のエポックを読み込む前に各パイプを閉じる必要があります。

トレーニング出力を書き込めるようプログラムを準備します。

トレーニングの出力は次のコンテナディレクトリに書き込まれます。

  • /opt/ml/model/ はトレーニングアルゴリズムが生成するモデルまたはモデルアーティファクトが書き込まれるディレクトリです。モデルはどのような形式でもかまいません。1 つのファイルでも、ディレクトリ全体の tree. SageMaker packages でも、このディレクトリ内のすべてのファイルを圧縮ファイル (.tar.gz) にすることができます。このファイルは、 DescribeTrainingJobAPIオペレーションによって返される Amazon S3 の場所にあります。

  • /opt/ml/output/ は、ジョブが失敗した理由が記述された failure ファイルをアルゴリズムが書き込むことができるディレクトリです。このファイルの内容は DescribeTrainingJob の結果の FailureReason フィールドに返されます。ジョブが成功してもこのファイルは無視されるため、このファイルを書き込む理由はありません。

コンテナ実行用のスクリプトを作成する

Docker train コンテナイメージ SageMaker の実行時に実行されるシェルスクリプトを作成します。トレーニングが完了し、モデルアーティファクトがそれぞれのディレクトリに書き込まれたら、スクリプトを終了します。

./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 MarketplaceAWS Marketplace SageMaker 「」の例を参照してください GitHub。

ステップ 2: イメージをローカルでビルドしてテストする

ビルドコンテキストには、現在、以下のファイルが存在します。

  • ./Dockerfile

  • ./train

  • トレーニングの依存関係とロジック

次に、このコンテナイメージをビルド、実行、テストできます。

イメージを構築する

ビルドコンテキストで Docker コマンドを実行し、イメージをビルドしてタグ付けします。この例ではタグ my-training-image を使用します。

sudo docker build --tag my-training-image ./

この Docker コマンドを実行してイメージをビルドすると、Dockerfile の各行に基づいて Docker がイメージをビルドするときの出力が表示されます。終了すると、次のようなものが表示されます。

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 スクリプトを実行します。これで、トレーニングプログラムが起動します。

トレーニングプログラムが終了し、コンテナが終了したら、出力モデルのアーティファクトが正しいことを確認します。さらに、ログ出力をチェックして、トレーニングジョブに関する十分な情報が提供されていることを確認し、併せて、不要なログが生成されていないことを確認します。

これで、アルゴリズム製品用のトレーニングコードのパッケージ化が完了しました。アルゴリズム製品には推論イメージも含まれるため、次のセクション、「 アルゴリズムの推論イメージの作成」に進んでください。

アルゴリズムの推論イメージの作成

このセクションでは、推論コードをアルゴリズム製品の推論イメージにパッケージ化する手順を説明します。

推論イメージは、推論ロジックを含む Docker イメージです。実行時にコンテナはHTTPエンドポイントを公開し、 SageMaker がコンテナとの間でデータを渡すようにします。

アルゴリズム製品を公開する際は、トレーニングイメージと推論イメージの両方が必要です。これをまだ確認していない場合は、「アルゴリズム用のトレーニングイメージの作成」に関する前のセクションを参照してください。2 つのイメージは 1 つのイメージに結合することも、個別のイメージのままにしておくこともできます。イメージを結合するか個別のイメージのままにするかは、ユーザーしだいです。通常、推論は学習よりも単純です。イメージを結合せずに個別のイメージのままにすると、推論のパフォーマンスが向上することがあります。

注記

以下は、推論イメージのパッケージコードの一例です。詳細については、「 で独自のアルゴリズムとモデルを使用する」および AWS MarketplaceAWS Marketplace SageMaker 「」の例を参照してください GitHub。

以下の例ではわかりやすくするために Flask というウェブサービスを使用していますが、本番環境に対応しているとは見なされていません。

ステップ 1: 推論イメージを作成する

推論イメージを と互換性を持たせるには SageMaker、Docker イメージがHTTPエンドポイントを公開する必要があります。コンテナの実行中に、 は購入者から提供された推論SageMaker の入力をコンテナのHTTPエンドポイントに渡します。推論の結果は、HTTPレスポンスの本文に返されます。

以下は、Linux の Ubuntu ディストリビューションの開発環境にCLIインストールされた Docker を使用します。

ウェブサーバースクリプトを作成する

この例では Flask という Python サーバーを使用していますが、フレームワークに適した任意のウェブサーバーを使用できます。

注記

ここではわかりやすくするために Flask を使用しています。本番環境に対応するウェブサーバーとは見なされません。

SageMaker が使用するTCPポート 8080 の 2 つのHTTPエンドポイントを提供する Flask ウェブサーバースクリプトを作成します。想定されるエンドポイントは次の 2 つです。

  • /ping – このエンドポイントにHTTPGETリクエスト SageMaker を行い、コンテナの準備が整っているかどうかを確認します。コンテナの準備ができたら、200 HTTP レスポンスコードでこのエンドポイントのHTTPGETリクエストに応答します。

  • /invocations – 推論のためにこのエンドポイントにHTTPPOSTリクエスト SageMaker を行います。推論用の入力データはリクエストの本文で送信されます。ユーザー指定のコンテンツタイプは、 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)

前の例には、実際の推論ロジックはありません。実際の推論イメージについては、ウェブアプリに推論ロジックを追加し、入力を処理して予測を返します。

推論イメージはインターネットにアクセスできないため、必要な依存関係がすべて含まれている必要があります。

コンテナ実行用のスクリプトを作成する

Docker コンテナイメージserve SageMaker の実行時に実行される という名前のスクリプトを作成します。このスクリプトで、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 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 compressed the contents in that directory into a .tar.gz file and stored it in the buyer's AWS アカウント in Amazon S3.

モデルがデプロイされ、推論イメージ SageMaker が実行され、Amazon S3 の購入者アカウントに保存されている .tar.gz ファイルからモデルアーティファクトが抽出され、/opt/ml/model/ディレクトリの推論コンテナにロードされます。実行時、推論コンテナコードはモデルデータを使用します。

注記

モデルアーティファクトファイルに含まれる可能性のある知的財産を保護するために、ファイル出力前の暗号化を選択できます。詳細については、「Amazon のセキュリティと知的財産 SageMaker」を参照してください。

ステップ 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 \   --volume '<path_to_model>:/opt/ml/model:ro' \   --detach \   --name my-inference-container \   my-inference-image \   serve

コマンドの詳細は次のとおりです。

  • --rm - コンテナが停止したら自動的に削除します。

  • --publish 8080:8080/tcp – ポート 8080 を公開して、ポートがHTTPリクエスト SageMaker を送信することをシミュレートします。

  • --volume '<path_to_model>:/opt/ml/model:ro' - テストモデルアーティファクトが保存されているホストマシン上のパスを、コンテナ内の推論コードで使用できるよう読み取り専用としてバインドマウントします。

  • --detach - コンテナをバックグラウンドで実行します。

  • --name my-inference-container - 実行中のこのコンテナに名前を付けます。

  • my-inference-image - ビルドされたイメージを実行します。

  • serve – コンテナ SageMaker の実行時に同じスクリプト実行を実行します。

このコマンドを実行すると、Docker は、推論イメージからコンテナを作成してバックグラウンドで実行します。コンテナは serve スクリプトを実行し、テスト目的でウェブサーバーを起動します。

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 はPOSTリクエストを介して推論データを/invocationsHTTPエンドポイントに渡します。

以下のコマンドを実行して、推論エンドポイントをテストします。

curl \   --request POST \   --data "hello world" \   http://127.0.0.1:8080/invocations

以下の例に、出力例を示します。

{"prediction": "a", "text": "hello world"}

これらの 2 つのHTTPエンドポイントが機能すると、推論イメージは と互換性を持つようになりました SageMaker。

注記

アルゴリズム製品のモデルは、リアルタイムとバッチの 2 つの方法でデプロイできます。両方のデプロイで、 は Docker コンテナの実行中に同じHTTPエンドポイント SageMaker を使用します。

コンテナを停止するには、次のコマンドを実行します。

sudo docker container stop my-inference-container

アルゴリズム製品のトレーニングイメージと推論イメージの両方の準備とテストが完了したら、「Amazon Elastic Container Registry へのイメージのアップロード」に進みます。