Amazon SageMaker の段階的トレーニング - アマゾン SageMaker

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

Amazon SageMaker の段階的トレーニング

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

段階的トレーニングは次の目的で使用します。

  • 前回のトレーニングでは考慮されていなかったためモデルのパフォーマンスが低下していた根本的なパターンを含む拡張データセットを使用して、新しいモデルをトレーニングする。

  • トレーニングジョブで、一般に入手可能な一般的なモデルのモデルアーティファクトまたはその一部を使用する。新しいモデルを最初からトレーニングする必要がない。

  • 中止されたトレーニングジョブを再開する。

  • さまざまなハイパーパラメータ設定を使用するか、さまざまなデータセットを使用して、モデルのいくつかのバリアントをトレーニングする。

トレーニングジョブの詳細については、Amazon SageMaker でモデルをトレーニングするを参照してください。

段階的にトレーニングするには、SageMaker コンソールまたは Amazon SageMaker Python SDK を使用します。

重要

段階的トレーニングを現在サポートしているのは、3 つの組み込みアルゴリズム (オブジェクト検出アルゴリズムイメージ分類アルゴリズム、および セマンティックセグメンテーションアルゴリズム) のみです。

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

この手順を完了するには、以下が必要です。

  • トレーニングデータを保存した Amazon Simple Storage Service (Amazon S3) バケット。

  • ジョブの出力を保存する S3 バケットの URI。

  • トレーニングコードが保存される Amazon Elastic コンテナレジストリのパス。詳細については、「Docker レジストリパスとサンプルコード」を参照してください。

  • 段階的トレーニングで使用するモデルアーティファクトが保存されている S3 バケットの URL。モデルアーティファクトの URL を見つけるには、モデルの作成に使用されたトレーニングジョブの詳細ページを参照してください。詳細ページを見つけるには、SageMaker コンソールで [Inference] (推論)、[Models] (モデル) の順に選択し、モデルを選択します。

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

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

  1. https://console.aws.amazon.com/sagemaker/ で Amazon SageMaker コンソールを開きます。

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

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

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

  5. 使用するアルゴリズムを選択します。アルゴリズムについては、Amazon を使用する SageMaker ビルトインアルゴリズムまたは事前トレーニング済みモデルを参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

    9. [Done] (完了) を選択します。

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

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

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

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

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

    5. [Compression type] (圧縮タイプ) では、チャネルにモデルを使用するため、[None] (なし) を選択します。

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

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

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

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

    10. [Done] (完了) を選択します。

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

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

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

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

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

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

段階的トレーニングを実行する (API)

この例は、SageMaker API を使用して、SageMaker イメージ分類アルゴリズムと Caltech 256 イメージデータセットを使ってモデルをトレーニングし、その後最初のモデルを使用して新しいモデルをトレーニングする方法を示します。入力および出力ソースに Amazon S3 を使用します。段階的トレーニング使用の詳細については、段階的トレーニングのサンプルノートブックを参照してください。

注記

この例では、段階的トレーニングで元のデータセットを使用しましたが、新しく追加されたサンプルを含むものなど、さまざまなデータセットを使用できます。新しいデータセットを 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 に保存されます。モデルをデプロイして予測を得るには、ステップ 5: モデルを Amazon EC2 にデプロイするを参照してください。