

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

# SageMaker トレーニングジョブのトレーニングプラン使用率
<a name="training-plan-utilization-for-training-jobs"></a>

トレーニングジョブを作成する際に、選択したプランを指定することにより、トレーニングジョブに SageMaker トレーニングプランを使用できます。

**注記**  
トレーニングジョブで使用するトレーニングプランのステータスは `Scheduled` または `Active` である必要があります。

トレーニングジョブに必要なキャパシティがすぐに利用できない場合、ジョブはキャパシティが利用可能になるまで、または `StoppingCondition` が満たされるまで、あるいはジョブがキャパシティが確保されるまで 2 日間 `Pending` となるまで、いずれか早い方まで待機します。停止条件が満たされると、ジョブは停止します。ジョブが 2 日間保留中の場合、ジョブは `InsufficientCapacityError` となり、終了します。

**重要**  
**リザーブドキャパシティの終了プロセス:** リザーブドキャパシティの終了時刻の 30 分前まで、すべてのリザーブドインスタンスにフルアクセスできます。リザーブドキャパシティの残り時間が 30 分になると、SageMaker トレーニングプランはそのリザーブドキャパシティー内で実行中のインスタンスを終了するプロセスを開始します。  
これらの終了によって進行状況が失われないように、トレーニングジョブのチェックポイントを設定することをお勧めします。

## トレーニングジョブにチェックポイントを作成する
<a name="training-jobs-checkpointing"></a>

SageMaker トレーニングジョブに SageMaker トレーニングプランを使用する場合は、トレーニングスクリプトにチェックポイントを実装します。これにより、リザーブドキャパシティの有効期限が切れる前にトレーニングの進行状況を保存できます。チェックポイントは、リザーブドキャパシティを使用する場合に特に重要です。これは、ジョブが 2 つのリザーブドキャパシティ間で中断された場合、またはトレーニングプランが終了日に達した場合に、最後に保存された時点からトレーニングを再開できるためです。

`SAGEMAKER_CURRENT_CAPACITY_BLOCK_EXPIRATION_TIMESTAMP` 環境変数を使用して、この値を指定できます。この変数は、チェックポイントプロセスを開始するタイミングを決定するのに役立ちます。このロジックをトレーニングスクリプトに組み込むことで、モデルの進行状況が適切な間隔で保存されるようにします。

Python トレーニングスクリプトでこのチェックポイントロジックを実装する方法の例を次に示します。

```
import os
import time
from datetime import datetime, timedelta

def is_close_to_expiration(threshold_minutes=30):
    # Retrieve the expiration timestamp from the environment variable
    expiration_time_str = os.environ.get('SAGEMAKER_CURRENT_CAPACITY_BLOCK_EXPIRATION_TIMESTAMP', '0')
    
    # If the timestamp is not set (default '0'), return False
    if expiration_time_str == '0':
        return False
    
    # Convert the timestamp string (in milliseconds) to a datetime object
    expiration_time = datetime(1970, 1, 1) + timedelta(milliseconds=int(expiration_time_str))
    
    # Calculate the time difference between now and the expiration time
    time_difference = expiration_time - datetime.now()
    
    # Return True if we're within the threshold time of expiration
    return time_difference < timedelta(minutes=threshold_minutes)

def start_checkpointing():
    # Placeholder function for checkpointing logic
    print("Starting checkpointing process...")
    # TODO: Implement actual checkpointing logic here
    # For example:
    # - Save model state
    # - Save optimizer state
    # - Save current epoch and iteration numbers
    # - Save any other relevant training state

# Main training loop
num_epochs = 100
final_checkpointing_done = False
for epoch in range(num_epochs):
    # TODO: Replace this with your actual training code
    # For example:
    # - Load a batch of data
    # - Forward pass
    # - Calculate loss
    # - Backward pass
    # - Update model parameters
    
    # Check if we're close to capacity expiration and haven't done final checkpointing
    if not final_checkpointing_done and is_close_to_expiration():
        start_checkpointing()
        final_checkpointing_done = True
    
    # Simulate some training time (remove this in actual implementation)
    time.sleep(1)
print("Training completed.")
```

**注記**  
トレーニングジョブのプロビジョニングは先入れ先出し (FIFO) の順序に従いますが、大規模なジョブを実行できない場合は、先に作成された大規模なクラスタージョブよりも前に、後で作成された小規模なクラスタージョブにキャパシティが割り当てられる場合があります。
SageMaker トレーニングのマネージドウォームプールは、SageMaker トレーニングプランと互換性があります。クラスターを再利用するには、同じクラスターを再利用するために、後続の `CreateTrainingJob` リクエストで同一の `TrainingPlanArn` 値を指定する必要があります。

**Topics**
+ [トレーニングジョブにチェックポイントを作成する](#training-jobs-checkpointing)
+ [SageMaker AI コンソールを使用してトレーニングジョブを作成する](use-training-plan-for-training-jobs-using-console.md)
+ [API、SageMaker SDK AWS CLIを使用してトレーニングジョブを作成する](use-training-plan-for-training-jobs-using-api-cli-sdk.md)

# SageMaker AI コンソールを使用してトレーニングジョブを作成する
<a name="use-training-plan-for-training-jobs-using-console"></a>

SageMaker AI UI を使用して、トレーニングジョブに SageMaker トレーニングプランを使用できます。トレーニング ジョブを作成する際に、インスタンスの選択とリージョンが利用可能なプランと一致する場合、利用可能なプランが提案されます。

SageMaker コンソールでトレーニングプランのリザーブドキャパシティを使用してトレーニングジョブを作成するには:

1. SageMaker AI コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) に移動します。

1. 左側のナビゲーションペインで **[トレーニング]**、**[トレーニングジョブ]** の順に選択します。

1. **[トレーニングジョブの作成]** をクリックします。

1. トレーニングジョブのリソースを設定する際は、**[インスタンスキャパシティ]** セクションを探します。選択したインスタンスタイプとリージョンに一致するプランがある場合は、ここに表示されます。コンピューティングキャパシティのニーズに合ったトレーニングプランを選択します。

   適切なプランがない場合は、インスタンスタイプまたはリージョンを調整するか、トレーニングプランを使用せずに続行できます。

1. トレーニングプランを選択した後 (または選択せずに続行した後)、残りのトレーニングジョブ設定を完了し、**[トレーニングジョブの作成]** をクリックしてプロセスを開始します。

![\[新しいトレーニングジョブを作成するための SageMaker AI コンソールページ このページには、ジョブ設定、アルゴリズムオプション、リソース設定、トレーニングプランの選択、停止条件など、さまざまな設定オプションが表示されます。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/training-plans/tp-create-training-job.png)


ジョブを確認して起動します。キャパシティがあれば、トレーニングプランが `Active` になり、直ちにジョブの実行が開始されます。

# API、SageMaker SDK AWS CLIを使用してトレーニングジョブを作成する
<a name="use-training-plan-for-training-jobs-using-api-cli-sdk"></a>

SageMakerトレーニングジョブに SageMaker トレーニングプランを使用するには、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) APIオペレーションを呼び出す際に、`ResourceConfig` で必要なプランの `TrainingPlanArn` パラメータを指定します。ジョブごとに 1 つのプランのみを使用できます。

**重要**  
`CreateTrainingJob` リクエストの `ResourceConfig` セクションで設定された `InstanceType` フィールドは、トレーニングプランの `InstanceType` と一致する必要があります。

## CLI を使用してプランでトレーニングジョブを実行する
<a name="training-job-cli"></a>

次の例は、 `create-training-job` AWS CLI コマンドの `TrainingPlanArn` 属性を使用して SageMaker トレーニングジョブを作成し、提供されたトレーニングプランに関連付ける方法を示しています。

 AWS CLI [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) コマンドを使用してトレーニングジョブを作成する方法の詳細については、「」を参照してください[https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-training-job.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-training-job.html)。

```
# Create a training job
aws sagemaker create-training-job \
  --training-job-name training-job-name \
  ...
    
  --resource-config '{
        "InstanceType": "ml.p5.48xlarge",
        "InstanceCount": 8,
        "VolumeSizeInGB": 10,
        "TrainingPlanArn": "training-plan-arn"
        }
    }' \
    ...
```

このコマンド AWS CLI 例では、SageMaker AI で新しいトレーニングジョブを作成し、 `--resource-config`引数でトレーニングプランを渡します。

```
aws sagemaker create-training-job \
  --training-job-name job-name \
  --role-arn arn:aws:iam::111122223333:role/DataAndAPIAccessRole \
  --algorithm-specification '{"TrainingInputMode": "File","TrainingImage": "111122223333.dkr.ecr.us-east-1.amazonaws.com/algo-image:tag", "ContainerArguments": [" "]}' \
  --input-data-config '[{"ChannelName":"training","DataSource":{"S3DataSource":{"S3DataType":"S3Prefix","S3Uri":"s3://bucketname/input","S3DataDistributionType":"ShardedByS3Key"}}}]' \
  --output-data-config '{"S3OutputPath": "s3://bucketname/output"}' \
  --resource-config '{"VolumeSizeInGB":10,"InstanceCount":4,"InstanceType":"ml.p5.48xlarge", "TrainingPlanArn" : "arn:aws:sagemaker:us-east-1:111122223333:training-plan/plan-name"}' \
  --stopping-condition '{"MaxRuntimeInSeconds": 1800}' \
  --region us-east-1
```

トレーニングジョブを作成したら、`DescribeTrainingJob` API を呼び出して、そのジョブがトレーニングプランに適切に割り当てられていることを検証できます。

```
aws sagemaker describe-training-job --training-job-name training-job-name
```

## SageMaker AI Python SDK を使用してプランでトレーニングジョブを実行する
<a name="training-job-sdk"></a>

または、[SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/v2.html) を使用してトレーニングプランに関連付けられたトレーニングジョブを作成することもできます。

Studio で JupyterLab の SageMaker Python SDK を使用してトレーニングジョブを作成する場合は、JupyterLab アプリケーションを実行するスペースで使用される実行ロールに、SageMaker トレーニングプランを使用するために必要なアクセス許可があることを確認します。SageMakerトレーニングプランを使用するために必要なアクセス許可の詳細については、「[SageMaker トレーニングプラン向け IAM](training-plan-iam-permissions.md)」を参照してください。

次の例は、SageMaker Python SDK を使用する際に、`Estimator` オブジェクトの `training_plan` 属性を使用して SageMaker トレーニングジョブを作成し、提供されたトレーニングプランに関連付ける方法を説明しています。

SageMaker 推定ツールの詳細については、「[SageMaker 推定ツールを使用してトレーニングジョブを実行する](https://docs.aws.amazon.com/sagemaker/latest/dg/docker-containers-adapt-your-own-private-registry-estimator.html)」を参照してください。

```
import sagemaker
import boto3
from sagemaker import get_execution_role
from sagemaker.estimator import Estimator
from sagemaker.inputs import TrainingInput

# Set up the session and SageMaker client
session = boto3.Session()
region = session.region_name
sagemaker_session = session.client('sagemaker')

# Get the execution role for the training job
role = get_execution_role()

# Define the input data configuration
trainingInput = TrainingInput(
    s3_data='s3://input-path',
    distribution='ShardedByS3Key',
    s3_data_type='S3Prefix'
)

estimator = Estimator(
    entry_point='train.py',
    image_uri="123456789123.dkr.ecr.{}.amazonaws.com/image:tag",
    role=role,
    instance_count=4,
    instance_type='ml.p5.48xlarge',
    training_plan="training-plan-arn",
    volume_size=20,
    max_run=3600,
    sagemaker_session=sagemaker_session,
    output_path="s3://output-path"
)

# Create the training job
estimator.fit(inputs=trainingInput, job_name=job_name)
```

トレーニングジョブを作成したら、`DescribeTrainingJob` API を呼び出して、そのジョブがトレーニングプランに適切に割り当てられていることを検証できます。

```
# Check job details
sagemaker_session.describe_training_job(TrainingJobName=job_name)
```