AWS SageMakerでのスコアリングコードの使用¶
このトピックでは、AWS SageMakerにデプロイされたDataRobotのスコアリングコードを使用して、予測を行う方法について説明します。 スコアリングコードを使用すると、機械学習モデルをJARファイルとしてダウンロードし、選択した環境にデプロイできます。
AWS SageMakerを使用すると、機械学習モデルを取り込んでAPIエンドポイントとして公開できます。また、DataRobotはJavaおよびPythonでモデルをエクスポートできます。 エクスポートしたら、モデルをAWS SageMakerにデプロイできます。 この例では、Java JARファイルを指定するDataRobotスコアリングコードエクスポートに焦点を当てています。
インポートするモデルがスコアリングコードをサポートしていることを確認します。 スコアリングコードのエクスポートをサポートしているモデルは、「スコアリングコード」アイコンで示されます。
AWS SageMakerにデプロイする理由
DataRobotでは、プラットフォームに完全に統合されたスケーラブルな予測サーバーを提供しますが、代わりにAWS SageMaker上でのデプロイを行う理由があります。
-
会社の方針またはガバナンス上の判断。
-
DataRobotモデルの上にカスタム機能の設定。
-
API呼び出しのオーバーヘッドなしでの低レイテンシースコアリング。 一般的に、Javaコードの実行はPython APIを介したスコアリングよりも高速です。
-
DataRobot APIと通信できないシステムにモデルを統合する機能。
スコアリングコードをダウンロードする¶
DataRobotのモデルをAWS SageMakerにデプロイするには、まずモデル(DataRobotが提供するスコアリングコードJARファイル)を含むTAR.GZアーカイブを作成します。 JARファイルはリーダーボードまたはデプロイからダウンロードできます。
備考
DataRobotのライセンスによっては、デプロイページからのみコードが利用できる場合があります。
スコアリングコードのAWS S3バケットへのアップロード¶
スコアリングコードJARファイルをダウンロードしたら、Codegen JARファイルをAWS S3バケットにアップロードして、SageMakerがアクセスできるようにする必要があります。
SageMakerはアーカイブ(tar.gz
形式)でS3バケットにアップロードされることを想定しています。 以下のコマンドのいずれかを使用して、モデルをtar.gz
アーカイブとして圧縮します。
tar -czvf 5e8471fa169e846a096d5137.jar.tar.gz 5e8471fa169e846a096d5137.jar
MacOSでは、デプロイ時に問題を引き起こす可能性のある隠しファイルをtar.gz
パッケージに追加しています。 これらの問題を防ぐには、次のコマンドを使用します。
COPYFILE\_DISABLE=1 tar -czvf 5e8471fa169e846a096d5137.jar.tar.gz 5e8471fa169e846a096d5137.jar
tar.gz
アーカイブを作成したら、S3にアップロードします。
-
Amazon S3コンソールを開きます。
-
アップロードをクリックし、
tar.gz
アーカイブをS3バケットに送信します。
Amazon ECRにDockerイメージを公開¶
次に、推論コードを含むDockerイメージをAmazon ECRに公開します。 この例では、次のコマンドでDataRobot指定のDockerイメージをダウンロードできます。
docker pull datarobotdev/scoring-inference-code-sagemaker:latest
Amazon ECRにイメージを公開するには:
-
イメージのプッシュ先のAmazon ECRレジストリに対して、Dockerクライアントを認証します。 使用するレジストリごとに認証トークンを取得する必要があり、トークンは12時間有効です。 ここにリストされているさまざまな認証オプションについては、Amazonのドキュメントを参照してください。
-
トークンベースの認証を使用します。
TOKEN=$(aws ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken')
curl -i -H "Authorization: Basic $TOKEN" <https://xxxxxxx.dkr.ecr.us-east-1.amazonaws.com/v2/sagemakertest/tags/list>
-
次に、イメージをプッシュできるAmazon ECRレジストリを作成します。
aws ecr create-repository --repository-name sagemakerdemo
このコマンドを使用すると、以下に示す出力結果が返されます。
AWSマネジメントコンソールからリポジトリを作成することもできます。
-
ECRサービス > リポジトリを作成に移動し、リポジトリ名を指定します。
-
プッシュするイメージを特定します。 dockerイメージコマンドを実行して、システム上のイメージを一覧表示します。
-
イメージにタグを付けてAWS ECRにプッシュします。
-
プレースホルダー
xxxxxxxx
は、DataRobot提供のDockerイメージのイメージIDを示します。このイメージには、Docker Hubからダウンロードした推論コード(scoring-inference-code-sagemaker:latest
)が含まれています。 -
Amazon ECRレジストリ、リポジトリ、および使用するオプションのイメージタグ名の組み合わせを使用して、イメージにタグを付けます。 レジストリの形式は
*aws_account_id.dkr.ecr.region.amazonaws.com*
です。 リポジトリ名は、イメージ用に作成したリポジトリと一致する必要があります。 イメージタグを省略すると、DataRobotはタグが最新であると想定します。docker tag xxxxxxxx "${account}.dkr.ecr.${region}.amazonaws.com/sagemakerdemo"
-
イメージをプッシュします。
docker push ${account}.dkr.ecr.${region}.amazonaws.com/sagemakermlopsdockerized
プッシュされたら、AWSマネジメントコンソールからイメージを検証できます。
モデルを作成¶
-
AWSにサインインして、検索バーに
SageMaker
と入力します。 最初の結果、Amazon SageMaker
を選択すると、SageMakerのコンソールに入り、モデルを作成することができます。 -
アカウントに既存の役割がない場合、IAMの役割のフィールドで、ドロップダウンからCreate a new role(新しい役割の作成)を選択します。 このオプションを選択すると、必要な権限のある役割が作成され、現在のユーザーのインスタンスに割り当てられます。
-
Container input optionsフィールド(1)でProvide model artifacts and inference image location(モデルアーティファクトおよび推論イメージの場所を指定)を選択します。 S3バケット内のスコアリングコードイメージ(モデル)の場所(2)および推論コードを含むDockerイメージのレジストリパス(3)を指定します。
-
完了したら、フィールドの下にあるAdd container(コンテナを追加)をクリックします。
モデル設定は次の例と一致する必要があります。
エンドポイント設定を作成¶
予測用のエンドポイントを設定するには:
-
左側のダッシュボードを開き、Endpoint configurations(エンドポイント設定)ページに移動して、新しいエンドポイント設定を作成します。 アップロードされたモデルを選択します。
-
Endpoint configuration name(1)を入力し、必要に応じてEncryption key(2)を指定します。 完了したら、ページの下部にあるCreate endpoint configuration(エンドポイント設定を作成)を選択します。
-
ダッシュボードを使用してEndpoints(エンドポイント)に移動し、新しいエンドポイントを作成します。
エンドポイントに名前を付け(1)、既存のエンドポイント設定を使用(2)を選択します。 上記の手順で作成した設定を選択します(3)。 完了したら、エンドポイント設定を選択をクリックします。 エンドポイントが作成されたら、モデルで予測リクエストを作成できます。
エンドポイントがリクエストを処理する準備ができると、ステータスがInServiceに変わります。
予測の作成¶
SageMakerエンドポイントのステータスがInServiceに変わると、このエンドポイントに対する予測を開始できます。
最初にコマンドラインからエンドポイントをテストして、エンドポイントが応答していることを確認します。 以下のコマンドを使用してテスト予測を行い、CSV文字列の本文にデータを渡します。
aws sagemaker-runtime invoke-endpoint --endpoint-name mlops-dockerized-endpoint-new
備考
上記のコマンドを実行するには、AWS CLIがインストールされていることを確認してください。
注意事項¶
SageMakerでデプロイする際、以下の点に留意してください。
-
MLOpsのエージェントが設定されていない限り、事前定義済みデータのドリフトや精度の追跡はできません。
-
AWS SageMakerにデプロイされる結果として、追加の時間オーバーヘッドが発生する可能性があります。