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 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 実行ロールの使用方法」を確認することをお勧めします。

  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 トレーニング用の最初のサービス環境を作成すると、 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 ジョブのキューの詳細については、「AWS Batch で SageMaker トレーニングジョブのキューを作成する」を参照してください。

ステップ 4: トレーニングジョブを作成して送信する

次に、シンプルなトレーニングジョブを作成し、ジョブキューに送信します。この例では、サービスジョブの機能を示す基本的な「hello world」トレーニングジョブを使用しています。

my_training_job.json という名前のファイルを作成し、次の内容を記述します。your-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-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

その他のリソース

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