のカスタム Docker コンテナイメージを作成し SageMaker 、AWSStep Functions のモデルトレーニングに使用します。 - AWS 規範ガイダンス

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

のカスタム Docker コンテナイメージを作成し SageMaker 、AWSStep Functions のモデルトレーニングに使用します。

作成者: Julia Bluszcz (AWS)、Neha Sharma (AWS)、Aubrey Oosthuizen (AWS)、Mohan Gowda Purushothama (AWS)、Mateusz Zaremba (AWS)

環境:本稼働

テクノロジー: 機械学習と AI DevOps

AWS サービス: Amazon ECR、Amazon SageMaker、AWSStep Functions

[概要]

このパターンは、Amazon SageMaker 用の Docker コンテナイメージを作成し、AWSStep Functions のトレーニングモデルに使用する方法を示しています。カスタムアルゴリズムをコンテナにパッケージ化することで、プログラミング言語、フレームワーク、依存関係に関係なく、 SageMaker 環境内のほぼすべてのコードを実行できます。

提供されたSageMaker ノートブックの例では、カスタム Docker コンテナイメージは Amazon Elastic Container Registry (Amazon ECR) に保存されます。次に、Step Functions は Amazon に保存されているコンテナECRを使用して、 の Python 処理スクリプトを実行します SageMaker。次に、コンテナはモデルを Amazon Simple Storage Service (Amazon S3) にエクスポートします。

前提条件と制限

前提条件

製品バージョン

  • AWS Step Functions Data Science SDKバージョン 2.3.0

  • Amazon SageMaker Python SDKバージョン 2.78.0

アーキテクチャ

次の図は、 の Docker コンテナイメージを作成し SageMaker、それを Step Functions のトレーニングモデルに使用するワークフローの例を示しています。

Step Functions トレーニングモデルとして使用する SageMaker の Docker コンテナイメージを作成するワークフロー。

この図表は、次のワークフローを示しています:

  1. データサイエンティストまたは DevOps エンジニアは、Amazon SageMaker ノートブックを使用してカスタム Docker コンテナイメージを作成します。

  2. データサイエンティストまたは DevOps エンジニアは、Docker コンテナイメージをECRプライベートレジストリにある Amazon プライベートリポジトリに保存します。

  3. データサイエンティストまたは DevOps エンジニアは、Docker コンテナを使用して Step Functions ワークフローで Python SageMaker 処理ジョブを実行します。

自動化とスケール

このパターンの SageMaker ノートブック例では、ml.m5.xlargeノートブックインスタンスタイプを使用します。ユースケースに応じて、インスタンスタイプを変更することができます。 SageMaker ノートブックインスタンスタイプの詳細については、「Amazon SageMaker 料金」を参照してください。

ツール

  • Amazon Elastic Container Registry (Amazon ECR) は、安全でスケーラブル、信頼性の高いマネージドコンテナイメージレジストリサービスです。

  • Amazon SageMaker は、ML モデルを構築およびトレーニングし、本番環境対応のホスト環境にデプロイするのに役立つマネージド機械学習 (ML) サービスです。

  • Amazon SageMaker Python SDK は、 で機械学習モデルをトレーニングおよびデプロイするためのオープンソースライブラリです SageMaker。

  • AWS Step Functions は、Lambda AWS 関数とその他のサービスを組み合わせてビジネスクリティカルなアプリケーションを構築するのに役立つサーバーレスオーケストレーションAWSサービスです。

  • AWS Step Functions Data Science Python SDK は、機械学習モデルを処理および公開する Step Functions ワークフローの作成に役立つオープンソースライブラリです。

エピック

タスク説明必要なスキル

Amazon をセットアップECRし、新しいプライベートレジストリを作成します。

まだセットアップしていない場合は、「Amazon ユーザーガイド」の「Amazon でのセットアップ」の指示ECRに従って Amazon をセットアップします。 ECR ECR 各AWSアカウントには、デフォルトのプライベート Amazon ECRレジストリが用意されています。

DevOps エンジニア

Amazon ECRプライベートリポジトリを作成します。

Amazon ECRユーザーガイド「プライベートリポジトリの作成」の指示に従います。

注:作成したリポジトリは、カスタム Docker コンテナイメージを保存する位置です。

DevOps エンジニア

SageMaker 処理ジョブの実行に必要な仕様を含む Dockerfile を作成します。

Dockerfile を設定して SageMaker 処理ジョブを実行するために必要な仕様を含む Dockerfile を作成します。手順については、「Amazon SageMaker デベロッパーガイド」の「独自のトレーニングコンテナの適応」を参照してください。

Dockerfiles の詳細については、Docker ドキュメントの Dockerfile リファレンスを参照してください。

例:Jupyter Notebookのコードセルで[Dockerfile]を作成

セル 1

# Make docker folder !mkdir -p docker

セル 2

%%writefile docker/Dockerfile FROM python:3.7-slim-buster RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3 ENV PYTHONUNBUFFERED=TRUE ENTRYPOINT ["python3"]
DevOps エンジニア

Docker コンテナイメージを構築し、Amazon にプッシュしますECR。

  1. docker build コマンドを実行して、作成した Dockerfile AWS を使用してコンテナイメージを構築しますCLI。

  2. docker push コマンドECRを実行して、コンテナイメージを Amazon にプッシュします。

詳細については、「 での独自のアルゴリズムコンテナの構築」の「コンテナの構築と登録」を参照してください GitHub。

Docker イメージを構築して登録する Jupyter Notebookのコードセルの例

重要:次のセルを実行する前に、Dockerfile が作成され、docker というディレクトリに保存されていることを確認します。また、Amazon ECRリポジトリを作成し、最初のセルのecr_repository値をリポジトリの名前に置き換えてください。

セル 1

import boto3 tag = ':latest' account_id = boto3.client('sts').get_caller_identity().get('Account') region = boto3.Session().region_name ecr_repository = 'byoc' image_uri = '{}.dkr.ecr.{}.amazonaws.com/{}'.format(account_id, region, ecr_repository + tag)

セル 2

# Build docker image !docker build -t $image_uri docker

セル 3

# Authenticate to ECR !aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin {account_id}.dkr.ecr.{region}.amazonaws.com

セル 4

# Push docker image !docker push $image_uri

注:「Docker クライアントをプライベートレジストリーで検証して」docker pushdocker pull コマンドを使用できるようにしなければなりません。これらのコマンドは、レジストリー内のリポジトリにイメージをプッシュし、またはレジストリーのリポジトリからイメージをプルします。

DevOps エンジニア
タスク説明必要なスキル

カスタム処理とモデルトレーニングロジックを含む Python スクリプトを作成します。

カスタム処理ロジックを書き込んでデータ処理スクリプトで実行します。その後、これを Python スクリプトとして、training.py という名前で保存します。

詳細については、「」の SageMaker 「スクリプトモードで独自のモデルを持参する」を参照してください GitHub。

カスタム処理とモデルトレーニングロジックを含む Python スクリプトの例

%%writefile training.py from numpy import empty import pandas as pd import os from sklearn import datasets, svm from joblib import dump, load if __name__ == '__main__': digits = datasets.load_digits() #create classifier object clf = svm.SVC(gamma=0.001, C=100.) #fit the model clf.fit(digits.data[:-1], digits.target[:-1]) #model output in binary format output_path = os.path.join('/opt/ml/processing/model', "model.joblib") dump(clf, output_path)
データサイエンティスト

ステップの 1 つとして SageMaker 処理ジョブを含む Step Functions ワークフローを作成します。

AWS Step Functions Data Science SDK をインストールしてインポートし、training.py ファイルを Amazon S3 にアップロードします。次に、Amazon SageMaker Python SDKを使用して Step Functions で処理ステップを定義します。

重要: AWSアカウントで Step Functions IAMの実行ロールが作成されていることを確認してください。

Amazon S3 にアップロードする環境設定例とカスタムトレーニングスクリプト

!pip install stepfunctions import boto3 import stepfunctions import sagemaker import datetime from stepfunctions import steps from stepfunctions.inputs import ExecutionInput from stepfunctions.steps import ( Chain ) from stepfunctions.workflow import Workflow from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput sagemaker_session = sagemaker.Session() bucket = sagemaker_session.default_bucket() role = sagemaker.get_execution_role() prefix = 'byoc-training-model' # See prerequisites section to create this role workflow_execution_role = f"arn:aws:iam::{account_id}:role/AmazonSageMaker-StepFunctionsWorkflowExecutionRole" execution_input = ExecutionInput( schema={ "PreprocessingJobName": str}) input_code = sagemaker_session.upload_data( "training.py", bucket=bucket, key_prefix="preprocessing.py", )

カスタム Amazon ECRイメージと Python スクリプトを使用する SageMaker 処理ステップ定義の例

注:必ず execution_input パラメータを使用してジョブ名を指定してください。パラメータの値は、ジョブを実行するたびに一意でなければなりません。また、[training.py]ファイルのコードは input パラメータとして ProcessingStep に渡されます。即ち、このコードはコンテナ内にコピーされます。ProcessingInput コードの宛先は、container_entrypoint 内の 2 番目の引数と同じです。

script_processor = ScriptProcessor(command=['python3'], image_uri=image_uri, role=role, instance_count=1, instance_type='ml.m5.xlarge') processing_step = steps.ProcessingStep( "training-step", processor=script_processor, job_name=execution_input["PreprocessingJobName"], inputs=[ ProcessingInput( source=input_code, destination="/opt/ml/processing/input/code", input_name="code", ), ], outputs=[ ProcessingOutput( source='/opt/ml/processing/model', destination="s3://{}/{}".format(bucket, prefix), output_name='byoc-example') ], container_entrypoint=["python3", "/opt/ml/processing/input/code/training.py"], )

SageMaker 処理ジョブを実行する Step Functions ワークフローの例

: このワークフローの例には、完全な Step Functions ワークフローではなく、 SageMaker 処理ジョブステップのみが含まれます。ワークフローの完全な例については、AWSStep Functions データサイエンスSDKドキュメントの「 のノートブックの例 SageMaker」を参照してください。

workflow_graph = Chain([processing_step]) workflow = Workflow( name="ProcessingWorkflow", definition=workflow_graph, role=workflow_execution_role ) workflow.create() # Execute workflow execution = workflow.execute( inputs={ "PreprocessingJobName": str(datetime.datetime.now().strftime("%Y%m%d%H%M-%SS")), # Each pre processing job (SageMaker processing job) requires a unique name, } ) execution_output = execution.get_output(wait=True)
データサイエンティスト

関連リソース