翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SageMaker Inference Recommender を使用するための前提条件
Amazon SageMaker Inference Recommender を使用する前に、前提条件ステップを完了させる必要があります。例として、両方のタイプの Amazon SageMaker Inference Recommender レコメンデーションジョブに対して、PyTorch (v1.7.1) ResNet-18 の事前学習済みモデルを使用する方法を示します。ここに示す例では AWS SDK for Python (Boto3)を使用しています。
注記
-
次のコード例では Python を使用しています。ターミナルまたは AWS CLIで次のコードサンプルのいずれかを実行する場合は、
!
プレフィックスを削除します。 -
Amazon SageMaker Studio ノートブックで Python 3 (TensorFlow 2.6 Python 3.8 CPU 最適化) カーネルを使用して、次の例を実行できます。Studio の詳細については、「Amazon SageMaker Studio」を参照してください。
-
Amazon SageMaker AI の IAM ロールを作成します。
IAM 管理ポリシーがアタッチされた Amazon SageMaker AI の IAM
AmazonSageMakerFullAccess
ロールを作成します。 -
環境をセットアップします。
依存関係をインポートし AWS リージョン、、SageMaker AI IAM ロール (ステップ 1 から)、および SageMaker AI クライアントの変数を作成します。
!pip install --upgrade pip awscli botocore boto3 --quiet from sagemaker import get_execution_role, Session, image_uris import boto3 region = boto3.Session().region_name role = get_execution_role() sagemaker_client = boto3.client("sagemaker", region_name=region) sagemaker_session = Session()
-
(オプション) Inference Recommender によってベンチマークされた既存のモデルを確認します。
Inference Recommender は、人気のあるモデルズーのモデルをベンチマークします。Inference Recommender は、まだベンチマークされていないモデルもサポートします。
ListModelMetaData
を使用して、一般的なモデルズーで見つかった機械学習モデルのドメイン、フレームワーク、タスク、モデル名を一覧表示するレスポンスオブジェクトを取得します。後のステップでドメイン、フレームワーク、フレームワークのバージョン、タスク、モデル名を使用して、推論 Docker イメージを選択し、モデルを SageMaker Model Registry に登録します。以下は、SDK for Python (Boto3) を使用してモデルメタデータを一覧表示する方法を示しています。
list_model_metadata_response=sagemaker_client.list_model_metadata()
出力には、以下の例のようなモデルのサマリー (
ModelMetadataSummaries
) とレスポンスメタデータ (ResponseMetadata
) が含まれます。{ 'ModelMetadataSummaries': [{ 'Domain': 'NATURAL_LANGUAGE_PROCESSING', 'Framework': 'PYTORCH:1.6.0', 'Model': 'bert-base-cased', 'Task': 'FILL_MASK' }, { 'Domain': 'NATURAL_LANGUAGE_PROCESSING', 'Framework': 'PYTORCH:1.6.0', 'Model': 'bert-base-uncased', 'Task': 'FILL_MASK' }, { 'Domain': 'COMPUTER_VISION', 'Framework': 'MXNET:1.8.0', 'Model': 'resnet18v2-gluon', 'Task': 'IMAGE_CLASSIFICATION' }, { 'Domain': 'COMPUTER_VISION', 'Framework': 'PYTORCH:1.6.0', 'Model': 'resnet152', 'Task': 'IMAGE_CLASSIFICATION' }], 'ResponseMetadata': { 'HTTPHeaders': { 'content-length': '2345', 'content-type': 'application/x-amz-json-1.1', 'date': 'Tue, 19 Oct 2021 20:52:03 GMT', 'x-amzn-requestid': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' }, 'HTTPStatusCode': 200, 'RequestId': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'RetryAttempts': 0 } }
このデモでは、PyTorch (v1.7.1) ResNet-18 モデルを使用してイメージ分類を実行します。次の Python コードサンプルでは、フレームワーク、フレームワークのバージョン、ドメイン、タスクを変数に格納して、後で使用できるようにします。
# ML framework details framework = 'pytorch' framework_version = '1.7.1' # ML model details ml_domain = 'COMPUTER_VISION' ml_task = 'IMAGE_CLASSIFICATION'
-
Amazon S3 に機械学習モデルをアップロードします。
事前トレーニング済みの機械学習モデルがない場合は、この PyTorch (v1.7.1) ResNet-18 モデルを使用してください。
# Optional: Download a sample PyTorch model import torch from torchvision import models, transforms, datasets # Create an example input for tracing image = torch.zeros([1, 3, 256, 256], dtype=torch.float32) # Load a pretrained resnet18 model from TorchHub model = models.resnet18(pretrained=True) # Tell the model we are using it for evaluation (not training). Note this is required for Inferentia compilation. model.eval() model_trace = torch.jit.trace(model, image) # Save your traced model model_trace.save('model.pth')
サンプル推論スクリプト
inference.py
をダウンロードします。code
ディレクトリを作成して、推論スクリプトをcode
ディレクトリに移動します。# Download the inference script !wget https://aws-ml-blog-artifacts.s3.us-east-2.amazonaws.com/inference.py # move it into a code/ directory !mkdir code !mv inference.py code/
Amazon SageMaker AI では、事前トレーニング済みの機械学習モデルを圧縮された TAR ファイル () としてパッケージ化する必要があります
*.tar.gz
。この要件を満たすようにモデルと推論スクリプトを圧縮します。!tar -czf test.tar.gz model.pth code/inference.py
エンドポイントがプロビジョニングされると、アーカイブ内のファイルが抽出され、エンドポイントの
/opt/ml/model/
に抽出されます。モデルとモデルのアーティファクトを
.tar.gz
ファイルとして圧縮したら、それらを Amazon S3 バケットにアップロードします。以下の例は、 AWS CLIを使用して Amazon S3 にモデルをアップロードする方法を示しています。!aws s3 cp test.tar.gz s3://
{your-bucket}
/models/ -
構築済みの Docker 推論イメージを選択するか、独自の推論 Docker イメージを作成する。
SageMaker AI は、Apache MXNet、TensorFlow、PyTorch、Chainer など、最も一般的な機械学習フレームワークの組み込みアルゴリズムと構築済みの Docker イメージ用のコンテナを提供します。使用可能な SageMaker AI イメージの完全なリストについては、「利用可能な深層学習コンテナイメージ
」を参照してください。 既存の SageMaker AI コンテナがニーズを満たさず、独自のコンテナがない場合は、新しい Docker イメージを作成します。Docker イメージを作成する方法については、「カスタム推論コードを持つコンテナ」を参照してください。
以下に、SageMaker Python SDK を使用して PyTorch バージョン 1.7.1 推論イメージを取得する方法を示します。
from sagemaker import image_uris ## Uncomment and replace with your own values if you did not define ## these variables a previous step. #framework = 'pytorch' #framework_version = '1.7.1' # Note: you can use any CPU-based instance here, # this is just to set the arch as CPU for the Docker image instance_type = 'ml.m5.2xlarge' image_uri = image_uris.retrieve(framework, region, version=framework_version, py_version='py3', instance_type=instance_type, image_scope='inference')
利用可能な SageMaker AI インスタンスのリストについては、Amazon SageMakerの料金
」を参照してください。 -
サンプルペイロードアーカイブを作成します。
ロードテストツールが SageMaker AI エンドポイントに送信できる個々のファイルを含むアーカイブを作成します。推論コードは、サンプルペイロードからファイル形式を読み取り可能である必要がります。
次の例では、この例の後のステップで ResNet-18 モデルに使用する.jpg イメージをダウンロードします。
!wget https://cdn.pixabay.com/photo/2020/12/18/05/56/flowers-5841251_1280.jpg
サンプルペイロードを tarball として圧縮します。
!tar -cvzf payload.tar.gz flowers-5841251_1280.jpg
サンプルペイロードを Amazon S3 にアップロードし、Amazon S3 URI を書き留めます。
!aws s3 cp payload.tar.gz s3://{bucket}/models/
Amazon S3 URI は後のステップで必要になるため、変数に格納します。
bucket_prefix='models' bucket =
'<your-bucket-name>'
# Provide the name of your S3 bucket payload_s3_key = f"{bucket_prefix}/payload.tar.gz" sample_payload_url= f"s3://{bucket}/{payload_s3_key}" -
レコメンデーションジョブ向けにモデルの入力を準備します。
最後の前提条件として、モデルの入力を準備するための 2 つのオプションがあります。モデルを SageMaker Model Registry に登録できます。SageMaker Model Registry を使用して本番稼働用のモデルをカタログ化できます。または、SageMaker AI モデルを作成して、レコメンデーションジョブを作成するときに
ContainerConfig
フィールドで指定できます。最初のオプションは、モデルバージョンの管理やモデルのデプロイの自動化など、Model Registry が備えている機能を利用する場合に最適です。2 番目のオプションは、すぐに使い始める必要がある場合に最適です。1 つ目のオプションを選択する場合は、ステップ 7 に進みます。2 つ目のオプションを選択する場合は、ステップ 7 をスキップしてステップ 8 に進みます。 -
オプション 1: モデルをモデルレジストリに登録します
SageMaker Model Registry を使用すると、本番用のモデルのカタログ化、モデルバージョンの管理、メタデータ (トレーニング指標など) のモデルへの関連付け、モデルの承認ステータスの管理、モデルの本番環境へのデプロイ、CI/CD を使用したモデル展開の自動化を行えます。
SageMaker モデルレジストリを使用してモデルを追跡および管理する場合は、モデルパッケージグループ内のバージョン管理されたモデルパッケージとして表されます。バージョン管理されていないモデルパッケージは、モデルグループの一部ではありません。モデルパッケージグループは、モデルの複数のバージョンまたはイテレーションを保持します。レジストリ内のすべてのモデルに対してそれらを作成する必要はありませんが、それらはすべて同じ目的を持つさまざまなモデルを整理し、自動バージョニングを提供するのに役立ちます。
Amazon SageMaker Inference Recommender を使用するには、バージョン管理されたモデルパッケージが必要です。バージョン管理されたモデルパッケージは、 AWS SDK for Python (Boto3) または Amazon SageMaker Studio Classic を使用してプログラムで作成できます。バージョン管理されたモデルパッケージをプログラムで作成するには、まずモデルパッケージグループを
CreateModelPackageGroup
API で作成します。次に、CreateModelPackage
API を使用してモデルパッケージを作成します。このメソッドを呼び出すと、バージョン管理されたモデルパッケージが作成されます。モデルグループを作成する および Amazon SageMaker Studio Classic を使用して、プログラムでインタラクティブにモデルパッケージグループを作成する方法と、バージョニングされたモデルパッケージを作成する方法モデルバージョンを登録するの詳細については、 AWS SDK for Python (Boto3) 「」および「」を参照してください。
次のコードサンプルは、 AWS SDK for Python (Boto3)を使用して、バージョン管理されたモデルパッケージを作成する方法を示します。
注記
Inference Recommender ジョブを作成するために、モデルパッケージを承認する必要はありません。
-
モデルパッケージグループを作成する
CreateModelPackageGroup
API を使用して、モデルパッケージグループを作成します。モデルパッケージグループのModelPackageGroupName
に名前を付け、必要に応じてモデルパッケージの説明をModelPackageGroupDescription
フィールドに指定します。model_package_group_name =
'<INSERT>'
model_package_group_description ='<INSERT>'
model_package_group_input_dict = { "ModelPackageGroupName" : model_package_group_name, "ModelPackageGroupDescription" : model_package_group_description, } model_package_group_response = sagemaker_client.create_model_package_group(**model_package_group_input_dict)CreateModelPackageGroup
に渡すことができるオプションの引数と必須の引数の完全なリストについては、Amazon SageMaker API リファレンスガイドを参照してください。推論コードを実行する Docker イメージとモデルアーティファクトの Amazon S3 の場所を指定して、モデルパッケージを作成し、
InferenceSpecification
の値を指定します。InferenceSpecification
には、このモデルパッケージに基づいてモデルで実行できる推論ジョブに関する情報が含まれている必要があります。その内容は次のとおりです。-
推論コードを実行するイメージの Amazon ECR パス。
-
(オプション) モデルパッケージが推論に使用される変換ジョブとリアルタイムエンドポイントでサポートするインスタンスタイプ。
-
モデルパッケージが推論でサポートする入力および出力コンテンツ形式。
モデルパッケージを作成するときは、次のパラメータも指定する必要があります。
-
Domain: モデルパッケージとそのコンポーネントの機械学習ドメイン。一般的な機械学習ドメインは、コンピュータビジョンと自然言語処理が含まれます。
-
Task: モデルパッケージが実行する機械学習タスク。一般的な機械学習タスクには、物体検出とイメージ分類が含まれます。API リファレンスガイドに記載されているどのタスクもユースケースを満たさない場合は、「OTHER」を指定してください。サポートされている機械学習タスクのリストについては、Task API フィールドの説明を参照してください。
-
SamplePayloadUrl: サンプルペイロードが保存される Amazon Simple Storage Service (Amazon S3) パス。このパスは GZIP で圧縮された単一の TAR アーカイブ (サフィックスは .tar.gz) を指す必要があります。
-
Framework: モデルパッケージコンテナイメージの機械学習フレームワーク。
-
FrameworkVersion: モデルパッケージコンテナイメージのフレームワークバージョン。
SupportedRealtimeInferenceInstanceTypes の推論をリアルタイムで生成するために使用するインスタンスタイプの許可リストを指定すると、Inference Recommender は
Default
ジョブ中、インスタンスタイプの探索空間を制限します。予算に制約がある場合、またはモデルとコンテナイメージをサポートできる特定のインスタンスタイプのセットが存在することがわかっている場合は、このパラメータを使用します。前のステップでは、トレーニング済みの ResNet18 モデルをダウンロードし、
models
というディレクトリの Amazon S3 バケットに保存しました。PyTorch (v1.7.1) Deep Learning Containers 推論イメージを取得し、その URI をimage_uri
という変数に格納しました。これらの変数を次のコードサンプルで使用して、CreateModelPackage
API への入力として使用するディクショナリを定義します。# Provide the Amazon S3 URI of your compressed tarfile # so that Model Registry knows where to find your model artifacts bucket_prefix='models' bucket =
'<your-bucket-name>'
# Provide the name of your S3 bucket model_s3_key = f"{bucket_prefix}/test.tar.gz" model_url= f"s3://{bucket}/{model_s3_key}" # Similar open source model to the packaged model # The name of the ML model as standardized by common model zoos nearest_model_name = 'resnet18' # The supported MIME types for input and output data. In this example, # we are using images as input. input_content_type='image/jpeg' # Optional - provide a description of your model. model_package_description ='<INSERT>'
## Uncomment if you did not store the domain and task in an earlier ## step #ml_domain = 'COMPUTER_VISION' #ml_task = 'IMAGE_CLASSIFICATION' ## Uncomment if you did not store the framework and framework version ## in a previous step. #framework = 'PYTORCH' #framework_version = '1.7.1' # Optional: Used for optimizing your model using SageMaker Neo # PyTorch uses NCHW format for images data_input_configuration = "[[1,3,256,256]]" # Create a dictionary to use as input for creating a model pacakge group model_package_input_dict = { "ModelPackageGroupName" : model_package_group_name, "ModelPackageDescription" : model_package_description, "Domain": ml_domain, "Task": ml_task, "SamplePayloadUrl": sample_payload_url, "InferenceSpecification": { "Containers": [ { "Image": image_uri, "ModelDataUrl": model_url, "Framework": framework.upper(), "FrameworkVersion": framework_version, "NearestModelName": nearest_model_name, "ModelInput": {"DataInputConfig": data_input_configuration} } ], "SupportedContentTypes": [input_content_type] } } -
-
モデルパッケージを作成する
CreateModelPackage
API を使用してモデルパッケージを作成します。前のステップで定義した入力ディクショナリを渡します。model_package_response = sagemaker_client.create_model_package(**model_package_input_dict)
Amazon SageMaker Inference Recommender を使用するには、モデルパッケージ ARN が必要です。モデルパッケージの ARN を書き留めるか、変数に格納します。
model_package_arn = model_package_response["ModelPackageArn"] print('ModelPackage Version ARN : {}'.format(model_package_arn))
-
-
オプション 2: モデルを作成して
ContainerConfig
フィールドを設定します推論レコメンデーションジョブを開始する際、モデルをモデルレジストリに登録する必要がない場合は、このオプションを使用します。次のステップでは、SageMaker AI でモデルを作成し、レコメンデーションジョブの入力として
ContainerConfig
フィールドを設定します。-
モデルを作成する
CreateModel
API を使用してモデルを作成します。SageMaker AI ホスティングにモデルをデプロイするときにこのメソッドを呼び出す例については、「モデルの作成 (AWS SDK for Python (Boto3))」を参照してください。前のステップでは、トレーニング済みの ResNet18 モデルをダウンロードし、
models
というディレクトリの Amazon S3 バケットに保存しました。PyTorch (v1.7.1) Deep Learning Containers 推論イメージを取得し、その URI をimage_uri
という変数に格納しました。これらの変数を次のコードサンプルで使用します。ここでは、CreateModel
API への入力として使用するディクショナリを定義します。model_name = '
<name_of_the_model>
' # Role to give SageMaker permission to access AWS services. sagemaker_role= "arn:aws:iam::<region>
:<account>
:role/*" # Provide the Amazon S3 URI of your compressed tarfile # so that Model Registry knows where to find your model artifacts bucket_prefix='models' bucket = '<your-bucket-name>
' # Provide the name of your S3 bucket model_s3_key = f"{bucket_prefix}/test.tar.gz" model_url= f"s3://{bucket}/{model_s3_key}" #Create model create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, PrimaryContainer = { 'Image': image_uri, 'ModelDataUrl': model_url, }) -
ContainerConfig
フィールドを設定する次に、作成したモデルで ContainerConfig フィールドを設定し、そのフィールドに次のパラメータを指定する必要があります。
-
Domain
: モデルとそのコンポーネント (コンピュータビジョンや自然言語処理など) の機械学習ドメイン。 -
Task
: イメージ分類やオブジェクトの検出など、モデルが実行する機械学習タスク。 -
PayloadConfig
: レコメンデーションジョブのペイロードの構成。サブフィールドの詳細については、「RecommendationJobPayloadConfig
」を参照してください。 -
Framework
: PyTorch などのコンテナイメージの機械学習フレームワーク。 -
FrameworkVersion
: コンテナイメージのフレームワークバージョン。 -
(オプション)
SupportedInstanceTypes
: 推論をリアルタイムで生成するために使用されるインスタンスタイプのリスト。
SupportedInstanceTypes
パラメータを使用すると、Inference Recommender はDefault
ジョブ中にインスタンスタイプの探索空間を制限します。予算に制約がある場合、またはモデルとコンテナイメージをサポートできる特定のインスタンスタイプのセットが存在することがわかっている場合は、このパラメータを使用します。次のコードサンプルでは、以前に定義したパラメータを
NearestModelName
と共に使用して、CreateInferenceRecommendationsJob
API への入力として使用するディクショナリを定義します。## Uncomment if you did not store the domain and task in a previous step #ml_domain = 'COMPUTER_VISION' #ml_task = 'IMAGE_CLASSIFICATION' ## Uncomment if you did not store the framework and framework version in a previous step #framework = 'PYTORCH' #framework_version = '1.7.1' # The name of the ML model as standardized by common model zoos nearest_model_name = 'resnet18' # The supported MIME types for input and output data. In this example, # we are using images as input input_content_type='image/jpeg' # Optional: Used for optimizing your model using SageMaker Neo # PyTorch uses NCHW format for images data_input_configuration = "[[1,3,256,256]]" # Create a dictionary to use as input for creating an inference recommendation job container_config = { "Domain": ml_domain, "Framework": framework.upper(), "FrameworkVersion": framework_version, "NearestModelName": nearest_model_name, "PayloadConfig": { "SamplePayloadUrl": sample_payload_url, "SupportedContentTypes": [ input_content_type ] }, "DataInputConfig": data_input_configuration "Task": ml_task, }
-
-