翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SageMaker AI AWS Batch での の開始方法
AWS Batch サービスジョブを使用すると、スケジューリング、優先順位付け、キューイング機能を備えた AWS Batch ジョブキューを介して SageMaker トレーニングジョブを送信できます。このチュートリアルでは、 AWS Batch サービスジョブを使用してシンプルな SageMaker トレーニングジョブをセットアップして実行する方法を示します。
目次
概要:
このチュートリアルでは、 を使用して SageMaker トレーニングジョブ AWS Batch のサービスジョブを設定する方法を示します AWS CLI。
- 対象者
-
このチュートリアルは、大規模な機械学習トレーニングジョブのセットアップと実行を担当するデータサイエンティストと開発者を対象としています。
- 使用される機能
-
このチュートリアルでは、 を使用して以下 AWS CLI を行う方法を示します。
-
SageMaker トレーニングジョブのサービス環境を作成する
-
SageMaker トレーニングジョブのキューを作成する
-
SubmitServiceJobAPI を使用してサービスジョブを送信する -
ジョブステータスをモニタリングし、出力を表示する
-
トレーニングジョブに関する CloudWatch Logs にアクセスする
-
- 所要時間
-
このチュートリアルは完了までに約 15 分かかります。
- リージョンの制限
-
このチュートリアルは、 AWS Batch と SageMaker AI の両方が利用可能な任意の AWS リージョンで完了できます。
- リソースの使用コスト
-
AWS アカウントの作成には料金はかかりません。ただし、このソリューションを実装することによって、以下のリソースにコストが発生する可能性があります。
説明 コスト (USD) SageMaker AI トレーニングのインスタンス 使用した SageMaker AI トレーニングインスタンスごとに料金が発生します。料金の詳細については、「Amazon SageMaker の料金 」を参照してください。 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 実行ロールの使用方法」を確認することをお勧めします。
-
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/AmazonSageMakerFullAccessaws 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 トレーニング用の最初のサービス環境を作成すると、 AWS Batch
はアカウントで AWSServiceRoleForAWSBatchWithSagemaker という名前の、サービスにリンクされたロールを自動的に作成します。このロールにより、 AWS Batch はユーザーに代わって SageMaker トレーニングジョブをキューに入れ、管理できます。サービスにリンクされたロールおよびその許可の詳細については、「SageMaker AI AWS Batch での のロールの使用」を参照してください。
最大 5 つのインスタンスを処理できるサービス環境を作成します。
aws batch create-service-environment \ --service-environment-nameTutorialServiceEnvironment\ --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-environmentsTutorialServiceEnvironment
出力:
{ "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-namemy-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-queuesmy-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 ジョブのキューの詳細については、「AWS Batch で SageMaker トレーニングジョブのキューを作成する」を参照してください。
ステップ 4: トレーニングジョブを作成して送信する
次に、シンプルなトレーニングジョブを作成し、ジョブキューに送信します。この例では、サービスジョブの機能を示す基本的な「hello world」トレーニングジョブを使用しています。
という名前のファイルを作成し、次の内容を記述します。my_training_job.jsonyour-account-id は、自分の AWS
アカウント ID に置き換えます。
注記
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-queuemy-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-queuemy-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-queuemy-sm-training-fifo-jq--job-status RUNNABLE
キュー内の今後のジョブのスナップショットを取得します。
aws batch get-job-queue-snapshot --job-queuemy-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-queuemy-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-idyour-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 AWSBatchmy-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-nameyour-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-queuemy-sm-training-fifo-jq\ --state DISABLED
ジョブキューが無効になるまで待ってから、それを削除します。
aws batch delete-job-queue \ --job-queuemy-sm-training-fifo-jq
次に、サービス環境を無効にして削除します。
aws batch update-service-environment \ --service-environmentTutorialServiceEnvironment\ --state DISABLED
サービス環境が無効になるまで待ってから、それを削除します。
aws batch delete-service-environment \ --service-environmentTutorialServiceEnvironment
その他のリソース
チュートリアルが完了したら、次のトピックを試すことができます。
-
PySDK にはヘルパークラスとユーティリティがあるため、サービスジョブの作成とジョブキューへの送信に PySDK を使用することをお勧めします。PySDK の使用例については、GitHub の「SageMaker AI の例
」を参照してください。 -
のサービスジョブ AWS Batch の詳細を確認してください。
-
より複雑なトレーニングジョブ設定については、「のサービスジョブペイロード AWS Batch」を参照してください。
-
でサービスジョブを送信する AWS Batch と
SubmitServiceJobAPI について説明します。 -
ジョブ状態の遷移を理解するには、「AWS Batch サービスジョブのステータスを SageMaker AI ステータスにマッピングする」を参照してください。
-
Python を使用して SageMaker トレーニングジョブを作成および送信するその他の機能豊富な方法については、「SageMaker AI Python SDK ドキュメント
」を参照してください。 -
より複雑な機械学習ワークフローについては、「SageMaker サンプルノートブック
」をご覧ください。