

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

# Amazon SageMaker AI の段階的トレーニングを使用する
<a name="incremental-training"></a>

時間が経つにつれて、モデルが以前ほど良くない推論を生成することに気付く場合があります。段階的トレーニングでは、既存のモデルの成果物を使用したり、拡張されたデータセットを使用して新しいモデルをトレーニングしたりすることができます。段階的トレーニングは時間とリソースの両方を節約します。

段階的トレーニングは次の目的で使用します。
+ 前回のトレーニングでは考慮されていなかったためモデルのパフォーマンスが低下していた根本的なパターンを含む拡張データセットを使用して、新しいモデルをトレーニングする。
+ トレーニングジョブで、一般に入手可能な一般的なモデルのモデルアーティファクトまたはその一部を使用する。新しいモデルを最初からトレーニングする必要がない。
+ 中止されたトレーニングジョブを再開する。
+ さまざまなハイパーパラメータ設定を使用するか、さまざまなデータセットを使用して、モデルのいくつかのバリアントをトレーニングする。

トレーニングジョブの詳細については、[Amazon SageMaker でモデルをトレーニングする](how-it-works-training.md)を参照してください。

段階的にトレーニングするには、SageMaker AI コンソールまたは [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) を使用します。

**重要**  
段階的トレーニングを現在サポートしているのは、3 つの組み込みアルゴリズム ([オブジェクト検出 - MXNet](object-detection.md)、[画像分類 - MXNet](image-classification.md)、および [セマンティックセグメンテーションアルゴリズム](semantic-segmentation.md)) のみです。

**Topics**
+ [段階的トレーニングを実行する (コンソール)](#incremental-training-console)
+ [段階的トレーニングを実行する (API)](#incremental-training-api)

## 段階的トレーニングを実行する (コンソール)
<a name="incremental-training-console"></a>

この手順を完了するには、以下が必要です。
+ トレーニングデータを保存した Amazon Simple Storage Service (Amazon S3) バケット。
+ ジョブの出力を保存する S3 バケットの URI。
+ トレーニングコードが保存される Amazon Elastic コンテナレジストリのパス。詳細については、「[Docker Registry Paths and Example Code](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths)」を参照してください。
+ 段階的トレーニングで使用するモデルアーティファクトが保存されている S3 バケットの URL。モデルアーティファクトの URL を見つけるには、モデルの作成に使用されたトレーニングジョブの詳細ページを参照してください。詳細ページを見つけるには、SageMaker AI コンソールで **[推論]**、**[モデル]** の順に選択し、モデルを選択します。

停止したトレーニングジョブを再開するには、モデルまたは完了したトレーニングジョブの場合と同様に、詳細ページに保存されているモデルアーティファクトの URL を使用します。

**段階的トレーニングを実行するには (コンソール)**

1. Amazon SageMaker AI コンソール ([https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)) を開きます。

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

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

1. トレーニングジョブの名前を指定します。名前は、 AWS アカウントの AWS リージョン内で一意である必要があります。トレーニングジョブ名は 1 〜 63 文字で指定する必要があります。有効な文字は、a ～ z、A ～ Z、0 ～ 9、および . : \$1 = @ \$1 % - (ハイフン) です。

1. 使用するアルゴリズムを選択します。アルゴリズムについては、[Amazon SageMaker の組み込みアルゴリズムと事前トレーニング済みモデル](algos.md)を参照してください。

1. (オプション) [**リソース設定**] で、デフォルト値をそのまま使用するか、リソース消費量を増やして計算時間を短縮します。

   1. (オプション) [**インスタンスタイプ**] で、使用する ML コンピューティングインスタンスのタイプを選択します。ほとんどの場合、**ml.m4.xlarge** で十分です。

   1. [**インスタンス数**] で、デフォルトの 1 を使用します。

   1. (オプション) [**インスタンスあたりのボリュームサイズ (GB)**] で、プロビジョニングする ML ストレージボリュームのサイズを選択します。ほとんどの場合、デフォルトの 1 を使用できます。大規模なデータセットを使用する場合は、サイズを大きくします。

1. トレーニングデータセットの入力データに関する情報を入力します。

   1. [**チャネル名**] で、デフォルト (**train**) をそのまま使用するか、またはトレーニングデータセットにわかりやすい名前 (**expanded-training-dataset** など) を入力します。

   1. [**InputMode**] で [**ファイル**] を選択します。段階的トレーニングの場合は、ファイル入力モードを使用する必要があります。

   1. [**S3 データディストリビューションタイプ**] で [**FullyReplicated**] を選択します。これにより、各 ML コンピューティングインスタンスは、段階的にトレーニングするときに、展開されたデータセットの完全なレプリケーションを使用します。

   1. 展開されたデータセットが圧縮されていない場合は、[**圧縮タイプ**] を [**なし**] に設定します。展開されたデータセットが Gzip を使用して圧縮されている場合は、[**Gzip**] に設定します。

   1. (オプション) ファイル入力モードを使用している場合は、[**コンテンツタイプ**] を空のままにします。パイプ入力モードの場合は、適切な MIME タイプを指定します。*コンテンツタイプ* は、多目的インターネットメール拡張 (MIME) タイプのデータです。

   1. [**レコードラッパー**] で、データセットが RecordIO 形式で保存されている場合は、[**RecordIO**] を選択します。データセットが RecordIO 形式のファイルとして保存されていない場合は、[**なし**] を選択します。

   1. **[S3 data type]** (S3 データタイプ) で、データセットを単一ファイルとして保存した場合は、**[S3Prefix]** を選択します。データセットがフォルダ内の複数のファイルとして保存されている場合は、[**マニフェスト**] を選択します。

   1. [**S3 の場所**] に、展開したデータセットが保存されている場所のパスの URL を入力します。

   1. **[Done]** (完了) をクリックします。

1. トレーニングジョブでモデルアーティファクトを使用するには、新しいチャネルを追加して、モデルアーティファクトに関する必要な情報を提供する必要があります。

   1. [**入力データ設定**] で [**チャネルの追加**] を選択します。

   1. [**チャネル名**] に、このチャネルをモデルアーティファクトのソースとして識別するために、**model** と入力します。

   1. [**InputMode**] で [**ファイル**] を選択します。モデルアーティファクトがファイルとして保存されます。

   1. [**S3 データディストリビューションタイプ**] で [**FullyReplicated**] を選択します。これは、各 ML コンピューティングインスタンスがトレーニングにすべてのモデルアーティファクトを使用する必要があることを示しています。

   1. [**圧縮タイプ**] で、チャネルにモデルを使用しているため、[**なし**] を選択します。

   1. [**コンテンツタイプ**] を空のままにしておきます。コンテンツタイプ は、多目的インターネットメール拡張 (MIME) タイプのデータです。モデルアーティファクトは、空のままにしておきます。

   1. モデルアーティファクトは RecordIO 形式で保存されていないため、[**レコードラッパー**] を [**なし**] に設定します。

   1. [**S3 データタイプ**] で、組み込みアルゴリズムまたはモデルを単一ファイルとして保存するアルゴリズムを使用している場合は、[**S3Prefix**] を選択します。モデルを複数のファイルとして保存するアルゴリズムを使用している場合は、[**マニフェスト**] を選択します。

   1. [**S3 の場所**] に、モデルアーティファクトが保存されている場所のパスの URL を入力します。通常、モデルは `model.tar.gz` という名前で保存されます。モデルアーティファクトの URL を検索するには、ナビゲーションペインで [**推論**] を選択してから [**モデル**] を選択します。モデルのリストから、詳細ページを表示するモデルを選択します。モデルアーティファクトの URL は、[**プライマリコンテナ**] にリストされます。

   1. **[Done]** (完了) をクリックします。

1. [**出力データ設定**] で、以下の情報を入力します。

   1. [**S3 の場所**] に、出力データを保存する S3 バケットのパスを入力します。

   1. (オプション) [**暗号化キー**] で、保存する出力データを暗号化するための AWS Key Management Service (AWS KMS) 暗号化キーを追加できます。キー ID またはその Amazon リソース番号 (ARN) を入力します。詳細については、[KMS で管理された暗号化キー](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html)を参照してください。

1. (オプション) [**タグ**] で、1 つ以上のタグをトレーニングジョブに追加します。*タグ*は、定義して AWS リソースに割り当てることができるメタデータです。この例では、タグを使用してトレーニングジョブを管理しやすくすることができます。タグは、ユーザーが定義するキーと値で構成されます。たとえば、**Project** をキーとし、トレーニングジョブに関連するプロジェクトを参照する値 (**Home value forecasts** など) を持つタグを作成するとします。

1. **[トレーニングジョブの作成]** を選択します。SageMaker AI がトレーニングジョブを作成し実行します。

トレーニングジョブが完了すると、新しくトレーニングされたモデルアーティファクトは、**[Output data configuration]** (出力データ設定) フィールドで指定された **S3 出力パス**に保存されます。モデルをデプロイして予測を得るには、[モデルを Amazon EC2 にデプロイする](ex1-model-deployment.md)を参照してください。

## 段階的トレーニングを実行する (API)
<a name="incremental-training-api"></a>

この例は、SageMaker AI API を使用して、SageMaker AI イメージ分類アルゴリズムと [Caltech 256 イメージデータセット](https://data.caltech.edu/records/nyy15-4j048)を使ってモデルをトレーニングし、その後最初のモデルを使用して新しいモデルをトレーニングする方法を示します。入力および出力ソースに Amazon S3 を使用します。段階的トレーニング使用の詳細については、[段階的トレーニングのサンプルノートブック](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/imageclassification_caltech/Image-classification-incremental-training-highlevel.html)を参照してください。

**注記**  
この例では、段階的トレーニングで元のデータセットを使用しましたが、新しく追加されたサンプルを含むものなど、さまざまなデータセットを使用できます。新しいデータセットを S3 にアップロードし、新しいモデルのトレーニングに使用される `data_channels` 変数を調整します。

必要なアクセス許可を付与し、環境変数を初期化する AWS Identity and Access Management (IAM) ロールを取得します。

```
import sagemaker
from sagemaker import get_execution_role

role = get_execution_role()
print(role)

sess = sagemaker.Session()

bucket=sess.default_bucket()
print(bucket)
prefix = 'ic-incr-training'
```

イメージ分類アルゴリズムのトレーニングイメージを取得します。

```
from sagemaker.amazon.amazon_estimator import get_image_uri

training_image = get_image_uri(sess.boto_region_name, 'image-classification', repo_version="latest")
#Display the training image
print (training_image)
```

トレーニングと検証のデータセットをダウンロードして、それらを Amazon Simple Storage Service (Amazon S3) にアップロードします。

```
import os
import urllib.request
import boto3

# Define a download function
def download(url):
    filename = url.split("/")[-1]
    if not os.path.exists(filename):
        urllib.request.urlretrieve(url, filename)

# Download the caltech-256 training and validation datasets
download('http://data.mxnet.io/data/caltech-256/caltech-256-60-train.rec')
download('http://data.mxnet.io/data/caltech-256/caltech-256-60-val.rec')

# Create four channels: train, validation, train_lst, and validation_lst
s3train = 's3://{}/{}/train/'.format(bucket, prefix)
s3validation = 's3://{}/{}/validation/'.format(bucket, prefix)

# Upload the first files to the train and validation channels
!aws s3 cp caltech-256-60-train.rec $s3train --quiet
!aws s3 cp caltech-256-60-val.rec $s3validation --quiet
```

トレーニングハイパーパラメータを定義します。

```
# Define hyperparameters for the estimator
hyperparams = { "num_layers": "18",
                "resize": "32",
                "num_training_samples": "50000",
                "num_classes": "10",
                "image_shape": "3,28,28",
                "mini_batch_size": "128",
                "epochs": "3",
                "learning_rate": "0.1",
                "lr_scheduler_step": "2,3",
                "lr_scheduler_factor": "0.1",
                "augmentation_type": "crop_color",
                "optimizer": "sgd",
                "momentum": "0.9",
                "weight_decay": "0.0001",
                "beta_1": "0.9",
                "beta_2": "0.999",
                "gamma": "0.9",
                "eps": "1e-8",
                "top_k": "5",
                "checkpoint_frequency": "1",
                "use_pretrained_model": "0",
                "model_prefix": "" }
```

推定器オブジェクトを作成し、トレーニングデータセットと検証データセットを使用して最初のモデルをトレーニングします。

```
# Fit the base estimator
s3_output_location = 's3://{}/{}/output'.format(bucket, prefix)
ic = sagemaker.estimator.Estimator(training_image,
                                   role,
                                   instance_count=1,
                                   instance_type='ml.p2.xlarge',
                                   volume_size=50,
                                   max_run=360000,
                                   input_mode='File',
                                   output_path=s3_output_location,
                                   sagemaker_session=sess,
                                   hyperparameters=hyperparams)

train_data = sagemaker.inputs.TrainingInput(s3train, distribution='FullyReplicated',
                                        content_type='application/x-recordio', s3_data_type='S3Prefix')
validation_data = sagemaker.inputs.TrainingInput(s3validation, distribution='FullyReplicated',
                                             content_type='application/x-recordio', s3_data_type='S3Prefix')

data_channels = {'train': train_data, 'validation': validation_data}

ic.fit(inputs=data_channels, logs=True)
```

モデルを使用して別のモデルを段階的にトレーニングするには、新しい推定器オブジェクトを作成し、`model_uri` 入力引数にモデルアーティファクト (この例では `ic.model_data`) を使用します。

```
# Given the base estimator, create a new one for incremental training
incr_ic = sagemaker.estimator.Estimator(training_image,
                                        role,
                                        instance_count=1,
                                        instance_type='ml.p2.xlarge',
                                        volume_size=50,
                                        max_run=360000,
                                        input_mode='File',
                                        output_path=s3_output_location,
                                        sagemaker_session=sess,
                                        hyperparameters=hyperparams,
                                        model_uri=ic.model_data) # This parameter will ingest the previous job's model as a new channel
incr_ic.fit(inputs=data_channels, logs=True)
```

トレーニングジョブが完了した後、新しくトレーニングされたモデルアーティファクトは、`Output_path` で指定した `S3 output path` に保存されます。モデルをデプロイして予測を得るには、[モデルを Amazon EC2 にデプロイする](ex1-model-deployment.md)を参照してください。