パッケージイメージのモデル - AWS Marketplace

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

パッケージイメージのモデル

アマゾン SageMaker モデルパッケージは、予測を行う事前トレーニング済みのモデルであり、購入者によるさらなるトレーニングを必要としません。

モデルパッケージには、以下のコンポーネントが含まれます。

注記

モデルアーティファクトは、モデルが予測を行うために使用するファイルで、通常は独自のトレーニングプロセスの結果です。アーティファクトは、モデルが必要とする任意のファイルタイプにすることができますが、use.tar.gz 圧縮する必要があります。モデルパッケージの場合、推論イメージにバンドルするか、Amazonに個別に保存することができます SageMaker。Amazon S3 に保存されているモデルアーティファクトは、実行時に推論コンテナにロードされます。モデルパッケージをパブリッシュすると、それらのアーティファクトはパブリッシュされ、AWS Marketplace購入者が直接アクセスできない Amazon S3 バケットを所有している。

ヒント

推論モデルがGluon、Keras、MXNet などのディープラーニングフレームワークで構築されている場合、 PyTorch, TensorFlow, TensorFlow-Lite、またはONNX、Amazonの使用を検討する SageMaker Neo。Neoは、次のような特定のクラウドインスタンスタイプファミリーにデプロイする推論モデルを自動的に最適化できます。ml.c4,ml.p2、その他。詳細については、次を参照してください。Neo を使用してモデルのパフォーマンスを最適化するアマゾン SageMaker デベロッパーガイド

次の図は、モデルパッケージ製品のパブリッシングと使用のワークフローを示しています。


      出品者がモデルパッケージ画像を作成する方法と、購入者がそれをどのように使用するかを示す図。
  1. 売り手は推論イメージを作成し (展開時にはネットワークアクセスなし)、それを Amazon ECR レジストリにプッシュします。

    モデルアーティファクトは、推論イメージにバンドルするか、S3 に個別に保存できます。

  2. 次に、出品者はAmazonでモデルパッケージリソースを作成します。 SageMaker ML製品をAWS Marketplace。

  3. 購入者は ML プロダクトに登録し、モデルをデプロイします。

    注記

    このモデルは、リアルタイム推論のエンドポイントとして、またはデータセット全体の予測を一度に取得するバッチジョブとして展開できます。詳細については、次を参照してください。推論のためのモデルをデプロイする

  4. SageMaker 推論イメージを実行します。推論イメージにバンドルされていない出品者提供のモデルアーティファクトは、実行時に動的に読み込まれます。

  5. SageMaker は、コンテナの HTTP エンドポイントを使用して購入者の推論データをコンテナに渡し、予測結果を返します。

モデルパッケージの推論イメージを作成する

このセクションでは、推論コードをモデルパッケージ製品の推論イメージにパッケージ化するためのチュートリアルを提供します。このプロセスは、以下のステップで構成されています。

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

注記

以下は、推論画像のパッケージコードの一例にすぎません。詳細については、次を参照してください。で Docker コンテナを使用する SageMakerAWS Marketplace SageMaker 例オン GitHub。

次の例では、Web サービスを使用しています。Flask、簡略化のため、本番準備完了とは見なされません。

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

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

次のチュートリアルでは、Linux Ubuntu ディストリビューションを使用する開発環境で Docker CLI を使用します。

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

この例では、という名前の Python サーバーを使用しています。Flaskですが、フレームワークで動作する任意の Web サーバーを使用できます。

注記

Flaskここでは簡単にするために使われています。本番環境対応の Web サーバーとは見なされません。

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 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)

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

推論イメージには必要なすべての依存関係が含まれている必要があります。これは、インターネットにアクセスできず、どのイメージにも電話をかけることができないためですAWS のサービス。

注記

リアルタイム推論とバッチ推論の両方に、この同じコードが呼び出されます

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

という名前のスクリプトを作成します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 に追加され、コンテナの実行時に実行できるようになります。

モデルアーティファクトをPackage 化またはアップロードする

モデルのトレーニングから推論イメージまでのモデルアーティファクトを提供する 2 つの方法は次のとおりです。

  • 推論イメージとともに静的にパッケージ化されています。

  • 実行時に動的に読み込まれます。動的に読み込まれるため、同じイメージを使用してさまざまな機械学習モデルをパッケージ化できます。

モデルアーティファクトを推論イメージとともにパッケージ化する場合は、アーティファクトをDockerfile

モデルアーティファクトを動的にロードする場合は、それらのアーティファクトを Amazon S3 の圧縮ファイル (.tar.gz) に個別に保存します。モデルパッケージを作成するときは、圧縮ファイルの場所を指定し、 SageMaker 内容を抽出してコンテナディレクトリにコピーします/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 コマンドを実行してイメージをビルドすると、Docker がDockerfile。終了すると、次のようなメッセージが表示されます。

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 は HTTP 要求をに送信します。

  • --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 エンドポイントをテストする

コンテナが ping に 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

推論画像の準備が整い、テストされたら、続行できます。画像をアップロードします