

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

# SageMaker AI AWS Batch での の開始方法
<a name="getting-started-sagemaker"></a>

AWS Batch サービスジョブを使用すると、スケジューリング、優先順位付け、キューイング機能を備えた AWS Batch ジョブキューを介して SageMaker トレーニングジョブを送信できます。このチュートリアルでは、 AWS Batch サービスジョブを使用してシンプルな SageMaker トレーニングジョブをセットアップして実行する方法を示します。

**Contents**
+ [概要:](#getting-started-sagemaker-context)
+ [前提条件](#getting-started-sagemaker-prerequisites)
+ [ステップ 1: SageMaker AI 実行ロールを作成する](#getting-started-sagemaker-step-1)
+ [ステップ 2: サービス環境を作成する](#getting-started-sagemaker-step-2)
+ [ステップ 3: SageMaker ジョブキューを作成する](#getting-started-sagemaker-step-3)
+ [ステップ 4: トレーニングジョブを作成して送信する](#getting-started-sagemaker-step-4)
+ [ステップ 5: ジョブステータスをモニタリングする](#getting-started-sagemaker-step-5)
+ [ステップ 6: ジョブ出力を表示する](#getting-started-sagemaker-step-6)
+ [ステップ7: チュートリアルのリソースをクリーンアップする](#getting-started-sagemaker-step-7)
+ [その他のリソース](#getting-started-sagemaker-additional-resources)

## 概要:
<a name="getting-started-sagemaker-context"></a>

このチュートリアルでは、 を使用して SageMaker トレーニングジョブ AWS Batch のサービスジョブを設定する方法を示します AWS CLI。

**対象者**  
このチュートリアルは、大規模な機械学習トレーニングジョブのセットアップと実行を担当するデータサイエンティストと開発者を対象としています。

**使用される機能**  
このチュートリアルでは、 を使用して以下 AWS CLI を行う方法を示します。  
+ SageMaker トレーニングジョブのサービス環境を作成する
+ SageMaker トレーニングジョブのキューを作成する
+ `SubmitServiceJob` API を使用してサービスジョブを送信する
+ ジョブステータスをモニタリングし、出力を表示する
+ トレーニングジョブに関する CloudWatch Logs にアクセスする

**所要時間**  
このチュートリアルは完了までに約 15 分かかります。

**リージョンの制限**  
このチュートリアルは、 AWS Batch と SageMaker AI の両方が利用可能な任意の AWS リージョンで完了できます。

**リソースの使用コスト**  
 AWS アカウントの作成には料金はかかりません。ただし、このソリューションを実装することによって、以下のリソースにコストが発生する可能性があります。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/batch/latest/userguide/getting-started-sagemaker.html)

## 前提条件
<a name="getting-started-sagemaker-prerequisites"></a>

このチュートリアルを開始する前に、 と SageMaker AI リソースの両方を作成および管理するために必要な以下のツール AWS Batch とリソースをインストールして設定する必要があります。
+ **AWS CLI** – AWS Batch や SageMaker AI などの AWS サービスを操作するためのコマンドラインツールです。このガイドでは、バージョン 2.8.6 以降を使用する必要があります。詳細については、「*AWS Command Line Interface ユーザーガイド*」の「[AWS CLIのインストール、更新、およびアンインストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」を参照してください。をインストールしたら AWS CLI、 も設定することをお勧めします。詳細については、*AWS Command Line Interface ユーザーガイド*の [`aws configure` を使用したクイック設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)を参照してください。

## ステップ 1: SageMaker AI 実行ロールを作成する
<a name="getting-started-sagemaker-step-1"></a>

SageMaker AI は実行ロールを使用して、他の AWS サービスを使用するユーザーに代わって操作を実行します。実行ロールを作成し、トレーニングジョブに必要なサービスとリソースを使用するためのアクセス許可を SageMaker AI に付与する必要があります。Amazon S3 のアクセス許可が含まれているため、`AmazonSageMakerFullAccess` マネージドポリシーを使用します。

**注記**  
次の手順に従って、このチュートリアルの SageMaker AI 実行ロールを作成します。  
本番環境の実行ロールを作成する前に、「*[SageMaker AI デベロッパーガイド](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html)*」の「[SageMaker AI 実行ロールの使用方法](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)」を確認することをお勧めします。

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"
   ```

1. 

**マネージドポリシーをアタッチする**

   必要なマネージドポリシーをロールにアタッチします。

   ```
   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
   ```

1. 

**ロールの ARN を書き留めておきます。**

   ロール ARN を取得します。これは後のステップで必要になります。

   ```
   aws iam get-role --role-name SageMakerExecutionRole --query 'Role.Arn' --output text
   ```

   トレーニングジョブペイロードを作成するときに使用するので、この ARN を保存します。

## ステップ 2: サービス環境を作成する
<a name="getting-started-sagemaker-step-2"></a>

サービス環境は、SageMaker トレーニングジョブの容量制約を定義します。サービス環境は、同時に実行できるトレーニングインスタンスの最大数をカプセル化します。

**重要**  
SageMaker トレーニング用の最初のサービス環境を作成すると、 AWS Batch はアカウントで `AWSServiceRoleForAWSBatchWithSagemaker` という名前の、サービスにリンクされたロールを自動的に作成します。このロールにより、 AWS Batch はユーザーに代わって SageMaker トレーニングジョブをキューに入れ、管理できます。サービスにリンクされたロールおよびその許可の詳細については、「[SageMaker AI AWS Batch での のロールの使用](using-service-linked-roles-batch-sagemaker.md)」を参照してください。

最大 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](service-environments.md)」を参照してください。

## ステップ 3: SageMaker ジョブキューを作成する
<a name="getting-started-sagemaker-step-3"></a>

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 トレーニングジョブのキューを作成する](create-sagemaker-job-queue.md)」を参照してください。

## ステップ 4: トレーニングジョブを作成して送信する
<a name="getting-started-sagemaker-step-4"></a>

次に、シンプルなトレーニングジョブを作成し、ジョブキューに送信します。この例では、サービスジョブの機能を示す基本的な「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](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html) 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](service-job-payload.md)」を参照してください。サービスジョブの送信の詳細については、「[でサービスジョブを送信する AWS Batch](service-job-submit.md)」を参照してください。

## ステップ 5: ジョブステータスをモニタリングする
<a name="getting-started-sagemaker-step-5"></a>

トレーニングジョブは、[DescribeServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeServiceJob.html) AWS Batch APIs を使用してモニタリングできます。 [ListServiceJobs](https://docs.aws.amazon.com/batch/latest/APIReference/API_ListServiceJobs.html) [GetJobQueueSnapshot](https://docs.aws.amazon.com/batch/latest/APIReference/API_GetJobQueueSnapshot.html) このセクションでは、ジョブのステータスとキュー情報を確認するさまざまな方法を示します。

キューで実行中のジョブを表示します。

```
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 ステータスにマッピングする](service-job-status.md)」を参照してください。

## ステップ 6: ジョブ出力を表示する
<a name="getting-started-sagemaker-step-6"></a>

ジョブが完了すると、 と 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: チュートリアルのリソースをクリーンアップする
<a name="getting-started-sagemaker-step-7"></a>

このチュートリアルを完了したら、不要な課金が発生しないよう、作成したリソースをクリーンアップします。

まず、ジョブキューを無効にして削除します。

```
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
```

## その他のリソース
<a name="getting-started-sagemaker-additional-resources"></a>

チュートリアルが完了したら、次のトピックを試すことができます。
+ PySDK にはヘルパークラスとユーティリティがあるため、サービスジョブの作成とジョブキューへの送信に PySDK を使用することをお勧めします。PySDK の使用例については、GitHub の「[SageMaker AI の例](https://github.com/aws/amazon-sagemaker-examples)」を参照してください。
+ [のサービスジョブ AWS Batch](service-jobs.md) の詳細を確認してください。
+ より複雑なトレーニングジョブ設定については、「[のサービスジョブペイロード AWS Batch](service-job-payload.md)」を参照してください。
+ [でサービスジョブを送信する AWS Batch](service-job-submit.md) と `SubmitServiceJob` API について説明します。
+ ジョブ状態の遷移を理解するには、「[AWS Batch サービスジョブのステータスを SageMaker AI ステータスにマッピングする](service-job-status.md)」を参照してください。
+ Python を使用して SageMaker トレーニングジョブを作成および送信するその他の機能豊富な方法については、「[SageMaker AI Python SDK ドキュメント](https://sagemaker.readthedocs.io/en/stable/)」を参照してください。
+ より複雑な機械学習ワークフローについては、「[SageMaker サンプルノートブック](https://github.com/aws/amazon-sagemaker-examples)」をご覧ください。