翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SageMaker AI AWS Batch での の開始方法
AWS Batch サービスジョブを使用すると、スケジューリング、優先順位付け、キューイング機能を備えた AWS Batch ジョブキューを介して SageMaker トレーニングジョブを送信できます。このチュートリアルでは、 AWS Batch サービスジョブを使用してシンプルな SageMaker トレーニングジョブをセットアップして実行する方法を示します。
目次
概要
このチュートリアルでは、 を使用して SageMaker トレーニングジョブ AWS Batch のサービスジョブを設定する方法を示します AWS CLI。
- 対象者
-
このチュートリアルは、大規模な機械学習トレーニングジョブのセットアップと実行を担当するデータサイエンティストと開発者を対象としています。
- 使用される機能
-
このチュートリアルでは、 を使用して以下 AWS CLI を行う方法を示します。
-
SageMaker トレーニングジョブのサービス環境を作成する
-
SageMaker トレーニングジョブキューを作成する
-
SubmitServiceJob
API を使用してサービスジョブを送信する -
ジョブステータスのモニタリングと出力の表示
-
トレーニングジョブの CloudWatch ログにアクセスする
-
- 所要時間
-
このチュートリアルは完了までに約 15 分かかります。
- リージョンの制限
-
このチュートリアルは、 AWS Batch と SageMaker AI の両方が利用可能な任意の AWS リージョンで完了できます。
- リソースの使用コスト
-
AWS アカウントの作成には料金はかかりません。ただし、このソリューションを実装すると、次のリソースのコストが発生する可能性があります。
説明 コスト (USD) SageMaker AI トレーニングインスタンス 使用した SageMaker AI トレーニングインスタンスごとに料金が発生します。料金の詳細については、SageMaker AI の料金 」を参照してください。 Amazon S3 ストレージ トレーニングジョブの出力を保存するための最小限のコスト。詳細については、「Amazon S3 の料金 」を参照してください。
前提条件
このチュートリアルを開始する前に、 と SageMaker AI リソースの両方を作成および管理するために必要な以下のツール AWS Batch とリソースをインストールして設定する必要があります。
-
AWS CLI – AWS Batch や SageMaker AI などの AWS サービスを操作するためのコマンドラインツールです。このガイドでは、バージョン 2.8.6 以降を使用する必要があります。詳細については、「AWS Command Line Interface ユーザーガイド」の「AWS CLIのインストール、更新、およびアンインストール」を参照してください。をインストールしたら AWS CLI、これも設定することをお勧めします。詳細については、AWS Command Line Interface ユーザーガイドの
aws configure
を使用したクイック設定を参照してください。
ステップ 1: SageMaker AI 実行ロールを作成する
SageMaker AI は実行ロールを使用して、ユーザーに代わって他の AWS サービスを使用してオペレーションを実行します。実行ロールを作成し、トレーニングジョブに必要なサービスとリソースを使用するためのアクセス許可を SageMaker AI に付与する必要があります。Amazon S3 のアクセス許可が含まれているため、 AmazonSageMakerFullAccess
管理ポリシーを使用します。
注記
次の手順に従って、このチュートリアルの SageMaker AI 実行ロールを作成します。
本番環境の実行ロールを作成する前に、SageMaker AI デベロッパーガイド」の「SageMaker AI 実行ロールの使用方法」を確認することをお勧めします。 SageMaker
-
IAM ロールの作成
次の信頼ポリシー
sagemaker-trust-policy.json
を使用して、 という名前の JSON ファイルを作成します。信頼ポリシーを使用して IAM ロールを作成します。
aws iam create-role \ --role-name SageMakerExecutionRole \ --assume-role-policy-document file://sagemaker-trust-policy.json \ --description "Execution role for SageMaker training jobs"
-
管理ポリシーをアタッチする
必要な管理ポリシーをロールにアタッチします。
aws iam attach-role-policy \ --role-name SageMakerExecutionRole \ --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
aws iam attach-role-policy \ --role-name SageMakerExecutionRole \ --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
-
ロール ARN を書き留める
ロール ARN を取得します。これは後のステップで必要になります。
aws iam get-role --role-name SageMakerExecutionRole --query 'Role.Arn' --output text
トレーニングジョブペイロードを作成するときに使用するので、この ARN を保存します。
ステップ 2: サービス環境を作成する
サービス環境は、SageMaker トレーニングジョブの容量制約を定義します。サービス環境は、同時に実行できるトレーニングインスタンスの最大数をカプセル化します。
重要
SageMaker Training 用の最初のサービス環境を作成すると、 AWS Batch はアカウントAWSServiceRoleForAWSBatchWithSagemaker
で というサービスにリンクされたロールを自動的に作成します。このロールにより、 AWS Batch はユーザーに代わって SageMaker トレーニングジョブをキューに入れ、管理できます。このサービスにリンクされたロールとそのアクセス許可の詳細については、「」を参照してくださいSageMaker AI AWS Batch での のロールの使用。
最大 5 つのインスタンスを処理できるサービス環境を作成します。
aws batch create-service-environment \ --service-environment-name
TutorialServiceEnvironment
\ --service-environment-type SAGEMAKER_TRAINING \ --capacity-limits capacityUnit=NUM_INSTANCES,maxCapacity=5
出力:
{ "serviceEnvironmentName": "
TutorialServiceEnvironment
", "serviceEnvironmentArn": "arn:aws:batch:your-region
:your-account-id
:service-environment/TutorialServiceEnvironment
" }
サービス環境が正常に作成されたことを確認します。
aws batch describe-service-environments --service-environments
TutorialServiceEnvironment
出力:
{ "serviceEnvironments": [ { "serviceEnvironmentName": "
TutorialServiceEnvironment
", "serviceEnvironmentArn": "arn:aws:batch:your-region
:your-account-id
:service-environment/TutorialServiceEnvironment
", "serviceEnvironmentType": "SAGEMAKER_TRAINING", "state": "ENABLED", "status": "VALID", "capacityLimits": [ { "maxCapacity": 5, "capacityUnit": "NUM_INSTANCES" } ], "tags": {} } ] }
サービス環境の詳細については、「」を参照してくださいのサービス環境 AWS Batch。
ステップ 3: SageMaker ジョブキューを作成する
SageMaker ジョブキューは、サービスジョブのスケジューリングと実行を管理します。このキューに送信されたジョブは、使用可能な容量に基づいてサービス環境にディスパッチされます。
SageMaker トレーニングジョブキューを作成します。
aws batch create-job-queue \ --job-queue-name
my-sm-training-fifo-jq
\ --job-queue-type SAGEMAKER_TRAINING \ --priority 1 \ --service-environment-order order=1,serviceEnvironment=TutorialServiceEnvironment
出力:
{ "jobQueueName": "
my-sm-training-fifo-jq
", "jobQueueArn": "arn:aws:batch:your-region
:your-account-id
:job-queue/my-sm-training-fifo-jq
" }
ジョブキューが正常に作成されたことを確認します。
aws batch describe-job-queues --job-queues
my-sm-training-fifo-jq
出力:
{ "jobQueues": [ { "jobQueueName": "
my-sm-training-fifo-jq
", "jobQueueArn": "arn:aws:batch:your-region
:your-account-id
:job-queue/my-sm-training-fifo-jq
", "state": "ENABLED", "status": "VALID", "statusReason": "JobQueue Healthy", "priority": 1, "computeEnvironmentOrder": [], "serviceEnvironmentOrder": [ { "order": 1, "serviceEnvironment": "arn:aws:batch:your-region
:your-account-id
:service-environment/TutorialServiceEnvironment
" } ], "jobQueueType": "SAGEMAKER_TRAINING", "tags": {} } ] }
SageMaker ジョブキューの詳細については、「」を参照してくださいで SageMaker トレーニングジョブキューを作成する AWS Batch。
ステップ 4: トレーニングジョブを作成して送信する
次に、シンプルなトレーニングジョブを作成し、ジョブキューに送信します。この例では、サービスジョブの機能を示す基本的な「hello world」トレーニングジョブを使用しています。
という名前のファイルを作成し、次の内容を記述します。my_training_job.json
your-account-id
をアカウント ID に置き換えます AWS 。
注記
S3OutputPath
は SageMaker トレーニングジョブの作成に必要ですが、このチュートリアルの結果は Amazon S3 バケットに保存されず、次の JSON でパスを使用できます。本番環境では、必要に応じて出力を保存するために有効な Amazon S3 バケットが必要です。
{ "TrainingJobName": "
my-simple-training-job
", "RoleArn": "arn:aws:iam::your-account-id
:role/SageMakerExecutionRole", "AlgorithmSpecification": { "TrainingInputMode": "File", "TrainingImage": "763104351884.dkr.ecr.us-west-2.amazonaws.com/pytorch-training:2.0.0-cpu-py310", "ContainerEntrypoint": [ "echo", "hello world" ] }, "ResourceConfig": { "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "VolumeSizeInGB": 1 }, "OutputDataConfig": { "S3OutputPath": "s3://your-s3-bucket/output" }, "StoppingCondition": { "MaxRuntimeInSeconds": 30 } }
SubmitServiceJob API を使用してトレーニングジョブを送信します。
aws batch submit-service-job \ --job-queue
my-sm-training-fifo-jq
\ --job-namemy-batch-sm-job
\ --service-job-type SAGEMAKER_TRAINING \ --retry-strategy attempts=1 \ --timeout-config attemptDurationSeconds=60 \ --service-request-payload file://my_training_job.json
出力:
{ "jobArn": "arn:aws:batch:
your-region
:your-account-id
:service-job/your-job-id
", "jobName": "my-batch-sm-job
", "jobId": "your-job-id
" }
サービスジョブペイロードの詳細については、「」を参照してくださいのサービスジョブペイロード AWS Batch。サービスジョブの送信の詳細については、「」を参照してくださいでサービスジョブを送信する AWS Batch。
ステップ 5: ジョブのステータスをモニタリングする
DescribeServiceJob、GetJobQueueSnapshot の AWS Batch APIs を使用してトレーニングジョブをモニタリングできます。 ListServiceJobs このセクションでは、ジョブのステータスとキュー情報を確認するさまざまな方法を示します。
キューで実行中のジョブを表示します。
aws batch list-service-jobs \ --job-queue
my-sm-training-fifo-jq
--job-status RUNNING
出力:
{ "jobSummaryList": [ { "latestAttempt": { "serviceResourceId": { "name": "TrainingJobArn", "value": "arn:aws:sagemaker:
your-region
:your-account-id
:training-job/AWSBatch<my-simple-training-job>
<your-attempt-id>
" } }, "createdAt": 1753718760, "jobArn": "arn:aws:batch:your-region
:your-account-id
:service-job/your-job-id
", "jobId": "your-job-id
", "jobName": "my-batch-sm-job
", "serviceJobType": "SAGEMAKER_TRAINING", "status": "RUNNING", "startedAt": 1753718820 } ] }
RUNNABLE
状態にあるジョブを表示します。
aws batch list-service-jobs \ --job-queue
my-sm-training-fifo-jq
--job-status RUNNABLE
キュー内の今後のジョブのスナップショットを取得します。
aws batch get-job-queue-snapshot --job-queue
my-sm-training-fifo-jq
出力:
{ "frontOfQueue": { "jobs": [ { "jobArn": "arn:aws:batch:
your-region
:your-account-id
:service-job/your-job-id
", "earliestTimeAtPosition": 1753718880 }, { "jobArn": "arn:aws:batch:your-region
:your-account-id
:service-job/your-job-id-2
", "earliestTimeAtPosition": 1753718940 } ], "lastUpdatedAt": 1753718970 } }
名前でジョブを検索します。
aws batch list-service-jobs \ --job-queue
my-sm-training-fifo-jq
\ --filters name=JOB_NAME,values="my-batch-sm-job
"
出力:
{ "jobSummaryList": [ { "latestAttempt": { "serviceResourceId": { "name": "TrainingJobArn", "value": "arn:aws:sagemaker:
your-region
:your-account-id
:training-job/AWSBatch<my-simple-training-job>
<your-attempt-id>
" } }, "createdAt": 1753718760, "jobArn": "arn:aws:batch:your-region
:your-account-id
:service-job/your-job-id
", "jobId": "your-job-id
", "jobName": "my-batch-sm-job
", "serviceJobType": "SAGEMAKER_TRAINING", "status": "RUNNING" } ] }
ジョブ状態マッピングの詳細については、「」を参照してくださいAWS Batch サービスジョブのステータスを SageMaker AI ステータスにマッピングする。
ステップ 6: ジョブ出力を表示する
ジョブが完了すると、 と SageMaker AI APIs の両方を通じてその出力 AWS Batch とログを表示できます。
ジョブの詳細については、以下を参照してください AWS Batch。
aws batch describe-service-job \ --job-id
your-job-id
出力:
{ "attempts": [ { "serviceResourceId": { "name": "TrainingJobArn", "value": "arn:aws:sagemaker:
your-region
:your-account-id
:training-job/AWSBatch<my-simple-training-job>
<your-attempt-id>
" }, "startedAt": 1753718820, "stoppedAt": 1753718880, "statusReason": "Received status from SageMaker: Training job completed" } ], "createdAt": 1753718760, "jobArn": "arn:aws:batch:your-region
:your-account-id
:service-job/your-job-id
", "jobId": "your-job-id
", "jobName": "my-batch-sm-job
", "jobQueue": "arn:aws:batch:your-region
:your-account-id
:job-queue/my-sm-training-fifo-jq
", "latestAttempt": { "serviceResourceId": { "name": "TrainingJobArn", "value": "arn:aws:sagemaker:your-region
:your-account-id
:training-job/AWSBatch<my-simple-training-job>
<your-attempt-id>
" } }, "retryStrategy": { "attempts": 1, "evaluateOnExit": [] }, "serviceRequestPayload": "your-training-job-request-json
", "serviceJobType": "SAGEMAKER_TRAINING", "startedAt": 1753718820, "status": "SUCCEEDED", "statusReason": "Received status from SageMaker: Training job completed", "stoppedAt": 1753718880, "tags": {}, "timeoutConfig": { "attemptDurationSeconds": 60 } }
このコマンドは、SageMaker AI を介してジョブに直接アクセスするために使用できる SageMaker トレーニングジョブ ARN を含む包括的なジョブ情報を返します。
aws sagemaker describe-training-job \ --training-job-name AWSBatch
<my-simple-training-job>
<your-attempt-id>
トレーニングジョブの CloudWatch ログを表示するには、まずログストリーム名を取得します。
aws logs describe-log-streams \ --log-group-name /aws/sagemaker/TrainingJobs \ --log-stream-name-prefix AWSBatch
my-simple-training-job
出力:
{ "logStreams": [ { "logStreamName": "
your-log-stream-name
", "creationTime": 1753718830, "firstEventTimestamp": 1753718840, "lastEventTimestamp": 1753718850, "lastIngestionTime": 1753718860, "uploadSequenceToken":upload-sequence-token
, "arn": "arn:aws:logs:your-region
:your-account-id
:log-group:/aws/sagemaker/TrainingJobs:log-stream:AWSBatch<my-simple-training-job>
<your-attempt-id>
/algo-1-algo-id
", "storedBytes": 0 } ] }
次に、前のレスポンスのログストリーム名を使用してログを取得します。
aws logs get-log-events \ --log-group-name /aws/sagemaker/TrainingJobs \ --log-stream-name
your-log-stream-name
出力:
{ "events": [ { "timestamp": 1753718845, "message": "hello world", "ingestionTime": 1753718865 } ], "nextForwardToken": "
next-forward-token
", "nextBackwardToken": "next-backward-token
" }
ログ出力には、トレーニングジョブからの「hello world」メッセージが表示され、ジョブが正常に実行されたことを確認します。
ステップ 7: チュートリアルリソースをクリーンアップする
チュートリアルが完了したら、継続的な料金が発生しないように、作成したリソースをクリーンアップします。
まず、ジョブキューを無効にして削除します。
aws batch update-job-queue \ --job-queue
my-sm-training-fifo-jq
\ --state DISABLED
ジョブキューが無効になるまで待ってから、削除します。
aws batch delete-job-queue \ --job-queue
my-sm-training-fifo-jq
次に、サービス環境を無効にして削除します。
aws batch update-service-environment \ --service-environment
TutorialServiceEnvironment
\ --state DISABLED
サービス環境が無効になるまで待ってから、削除します。
aws batch delete-service-environment \ --service-environment
TutorialServiceEnvironment
その他のリソース
チュートリアルを完了したら、次のトピックを試すことができます。
-
PySDK にはヘルパークラスとユーティリティがあるため、サービスジョブの作成とジョブキューへの送信に PySDK を使用することをお勧めします。PySDK の使用例については、GitHub のSageMaker AI examples
」を参照してください。 -
のサービスジョブ AWS Batch の詳細を確認してください。
-
より複雑なトレーニングジョブ設定のサービスジョブペイロード AWS Batchについては、「」を参照してください。
-
でサービスジョブを送信する AWS Batch と
SubmitServiceJob
API について説明します。 -
ジョブの状態遷移を理解するAWS Batch サービスジョブのステータスを SageMaker AI ステータスにマッピングするには、「」を参照してください。
-
Python を使用して SageMaker トレーニングジョブを作成および送信するその他の機能豊富な方法については、SageMaker AI Python SDK ドキュメント
を参照してください。 SageMaker -
より複雑な機械学習ワークフローについては、SageMaker サンプルノートブック
をご覧ください。