拡張マニフェストファイルを使用してトレーニングジョブにデータセットメタデータを提供する - Amazon SageMaker

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

拡張マニフェストファイルを使用してトレーニングジョブにデータセットメタデータを提供する

データセットとともにメタデータをトレーニングジョブに含めるには、拡張マニフェストファイルを使用します。拡張マニフェストファイルを使用する場合は、データセットを Amazon Simple Storage Service (Amazon S3) に保存し、そこに保存されているデータセットを使用するようにトレーニングジョブを設定する必要があります。1 つ以上の Channel に対してこのデータセットの場所と形式を指定します。拡張マニフェストはパイプ入力モードのみをサポートできます。パイプ入力モードの詳細についてはChannelInputModeのセクションを参照してください。

チャネルのパラメータを指定するときは、S3Uri と呼ばれるファイルへのパスを指定します。Amazon は、S3DataTypeS3DataSourceで指定されている内容に基づいてこの URI SageMaker を解釈します。AugmentedManifestFile オプションは、入力データを含むメタデータを含むマニフェスト形式を定義します。データにラベルを付けた場合は、拡張マニフェストファイルの使用が、前処理の代わりになります。ラベル付きのデータを使用してジョブをトレーニングする場合は、通常、トレーニング前にデータセットを前処理して、データセットをメタデータと結合する必要があります。トレーニングデータセットが大きい場合、前処理に時間とコストがかかる可能性があります。

拡張マニフェストファイル形式

拡張マニフェストファイルは JSON Lines 形式で形式設定する必要があります。JSON Lines 形式では、ファイル内の各行が完全な JSON オブジェクトであり、その後に改行区切り文字が続きます。

トレーニング中、JSON SageMaker の各行を解析し、その属性の一部またはすべてをトレーニングアルゴリズムに送信します。渡す属性の内容とそれらを渡す順序は、CreateTrainingJob API の AttributeNames パラメータで指定します。AttributeNamesパラメータは、JSON SageMaker オブジェクト内でトレーニング入力として使用する属性名を順番に並べたリストです。

たとえば、AttributeNames["line", "book"] をリストした場合、入力データには、指定された順序で linebook の属性名を含める必要があります。この例では、次の拡張マニフェストファイルの内容が有効です。

{"author": "Herman Melville", "line": "Call me Ishmael", "book": "Moby Dick"} {"line": "It was love at first sight.", "author": "Joseph Heller", "book": "Catch-22"}

SageMaker リストにない属性名がリストされている属性の前後または中間にあっても無視します。

拡張マニフェストファイルを使用するときには、以下のガイドラインに従ってください。

  • AttributeNames パラメータにリストされている属性の順序によって、トレーニングジョブでアルゴリズムに渡される属性の順序が決まります。

  • 一覧は JSON AttributeNames 行のすべての属性のサブセットであってもかまいません。 SageMaker ファイル内のリストにない属性は無視されます。

  • テキスト、数値、データ配列、オブジェクトなど、JSON 形式で許可されている任意のタイプのデータを AttributeNames に指定できます。

  • 属性名として S3 URI を含めるには、サフィックス -ref をそれに追加します。

属性名にサフィックス -ref が含まれている場合、属性の値はトレーニングジョブにアクセス可能なデータファイルの S3 URI である必要があります。例えば、AttributeNames["image-ref", "is-a-cat"] が含まれている場合、次の例は有効な拡張マニフェストファイルを示しています。

{"image-ref": "s3://mybucket/sample01/image1.jpg", "is-a-cat": 1} {"image-ref": "s3://mybucket/sample02/image2.jpg", "is-a-cat": 0}

このマニフェストファイルの最初の JSON 行の場合、 SageMaker image1.jpgs3://mybucket/sample01/is-a-cat"1"画像分類の対象となる属性からファイルと文字列表現を取得します。

ヒント

拡張マニフェストファイルを作成するには、Amazon SageMaker Ground Truth を使用してラベル付けジョブを作成します。ラベル付けジョブの出力の詳細については、「出力データ」を参照してください。

拡張マニフェストファイルのデータをストリーミングする

拡張マニフェスト形式を使用すると、RecordIO ファイルを作成しなくても、ファイルを使ってパイプモードでトレーニングを行うことができます。CreateTrainingJob リクエストの InputDataConfig パラメータの値として、トレーニングチャネルと検証チャネルの両方を指定する必要があります。拡張マニフェストファイルは、パイプ入力モードを使用しているチャネルでのみサポートされます。チャネルごとにデータがその拡張マニフェストファイルから抽出され、チャネルの名前付きパイプを介してアルゴリズムに (順番に) ストリーミングされます。パイプモードは先入れ先出し (FIFO) 方式を使用するため、レコードはキューに入れられた順に処理されます。パイプ入力モードの詳細については、「Input Mode」を参照してください。

サフィックス "-ref" が付いた属性名は、形式設定済みのバイナリデータを指します。アルゴリズムにとって、そのデータの解析方法は既知である場合があります。また、レコードがアルゴリズム用に区切られるようにデータをラップしなければならない場合もあります。アルゴリズムが RecordIO 形式のデータと互換性がある場合は、RecordWrapperTypeRecordIO を指定すると、この問題は解決します。アルゴリズムが RecordIO 形式と互換性がない場合は、RecordWrapperTypeNone を指定し、データがアルゴリズムに対して正しく解析されることを保証します。

["image-ref", "is-a-cat"] の例を使用して、RecordIO ラッピングを使用している場合は、次のデータストリームがキューに送信されます。

recordio_formatted(s3://mybucket/foo/image1.jpg)recordio_formatted("1")recordio_formatted(s3://mybucket/bar/image2.jpg)recordio_formatted("0")

RecordIO 形式でラップされていないイメージは、対応する is-a-cat 属性値と共に 1 つのレコードとしてストリーミングされます。これは問題を引き起こす場合があります。アルゴリズムがイメージと属性を正しく区切らない可能性があるためです。イメージ分類のための拡張マニフェストファイル使用の詳細については、「拡張マニフェストイメージ形式でトレーニングする」を参照してください。

一般的に拡張マニフェストファイルとパイプモードでは、EBS ボリュームのサイズ制限が適用されません。それ以外の場合、これには、EBS ボリュームのサイズ制限内でなければならない設定が含まれます (S3DataDistributionType など)。パイプモードとその使用方法の詳細については、「独自のトレーニングアルゴリズムを使用する - 入力データ設定」を参照してください。

拡張マニフェストファイルを使用する (コンソール)

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

  • 拡張マニフェストファイルを保存している S3 バケットの URL。

  • 拡張マニフェストファイルにリストされているデータを S3 バケットに保存する。

  • ジョブの出力を保存する S3 バケットの 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) をそのまま使用するか、training-augmented-manifest-file のようにわかりやすい名前を入力します。

    2. にはInputModePipe を選択します。

    3. S3 データ配信タイプでは、を選択しますFullyReplicated。段階的にトレーニングする場合は、完全なレプリケーションを実行すると、各 ML コンピューティングインスタンスが、展開されたデータセットの完全なコピーを使用します。ニューラルトピックモデル (NTM) アルゴリズム などのニューラルベースのアルゴリズムの場合は、ShardedByS3Key を選択します。

    4. 拡張マニフェストファイルで指定されたデータが圧縮されていない場合は、[圧縮の種類] を [なし] に設定します。データが gzip を使用して圧縮されている場合は、[Gzip] に設定します。

    5. (オプション) [コンテンツタイプ] に、適切な MIME タイプを指定します。コンテンツタイプ は、多目的インターネットメール拡張 (MIME) タイプのデータです。

    6. [レコードラッパー] で、拡張マニフェストファイルで指定されたデータセットが RecordIO 形式で保存されている場合は、[RecordIO] を選択します。データセットが RecordIO 形式のファイルとして保存されていない場合は、[なし] を選択します。

    7. S3 データタイプでは、を選択しますAugmentedManifestFile

    8. [S3 の場所] に、拡張マニフェストファイルを保存したバケットのパスを指定します。

    9. AugmentedManifestFile 属性名には、使用する属性の名前を指定します。属性名は、拡張マニフェストファイル内に存在する必要があり、大文字と小文字が区別されます。

    10. (オプション) 属性名をさらに追加するには、[行を追加] を選択して、各属性に別の属性名を指定します。

    11. (オプション) 属性名の順序を調整するには、名前の横にある上下ボタンを選択します。拡張マニフェストファイルを使用するときには、指定する属性名の順序が重要です。

    12. [完了] をクリックします。

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

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

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

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

  10. トレーニングジョブを作成」を選択します。 SageMaker トレーニングジョブを作成して実行します。

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

拡張マニフェストファイルを使用する (API)

以下は、 SageMaker 高レベル Python ライブラリを使用して拡張マニフェストファイルを使用してモデルをトレーニングする方法を示しています。

import sagemaker # Create a model object set to using "Pipe" mode. model = sagemaker.estimator.Estimator( training_image, role, instance_count=1, instance_type='ml.p3.2xlarge', volume_size = 50, max_run = 360000, input_mode = 'Pipe', output_path=s3_output_location, sagemaker_session=session ) # Create a train data channel with S3_data_type as 'AugmentedManifestFile' and attribute names. train_data = sagemaker.inputs.TrainingInput( your_augmented_manifest_file, distribution='FullyReplicated', content_type='application/x-recordio', s3_data_type='AugmentedManifestFile', attribute_names=['source-ref', 'annotations'], input_mode='Pipe', record_wrapping='RecordIO' ) data_channels = {'train': train_data} # Train a model. model.fit(inputs=data_channels, logs=True)

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