SageMaker AI AWS Batch での の開始方法 - AWS Batch

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

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

  1. IAM ロールの作成

    次の信頼ポリシーsagemaker-trust-policy.jsonを使用して、 という名前の JSON ファイルを作成します。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "sagemaker.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

    信頼ポリシーを使用して IAM ロールを作成します。

    aws iam create-role \ --role-name SageMakerExecutionRole \ --assume-role-policy-document file://sagemaker-trust-policy.json \ --description "Execution role for SageMaker training jobs"
  2. 管理ポリシーをアタッチする

    必要な管理ポリシーをロールにアタッチします。

    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
  3. ロール 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-name my-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: ジョブのステータスをモニタリングする

DescribeServiceJobGetJobQueueSnapshot の 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 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-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

その他のリソース

チュートリアルを完了したら、次のトピックを試すことができます。