向具有擴增資訊清單檔案的訓練任務提供資料集中繼資料 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

向具有擴增資訊清單檔案的訓練任務提供資料集中繼資料

使用擴增的資訊清單檔案,在訓練任務中包含具有您資料集的中繼資料。使用擴增的資訊清單檔案時,您的資料集必須存放在 Amazon Simple Storage Service (Amazon S3),而且您必須設定訓練任務使用存放於此的資料集。您要針對一或多個 Channel 指定此資料集的位置和格式。擴增資訊清單只能支援管道輸入模式。Channel若要進一步瞭解管道輸入模式,InputMode請參閱〈〉一節。

指定通道的參數時,您指定的檔案路徑稱為 S3Uri。Amazon 根據S3DataTypeS3DataSource指定的來 SageMaker 解釋此 URI。AugmentedManifestFile 選項定義的資訊清單格式,包括具有輸入資料的中繼資料。當您有標籤資料時,也可以使用擴增的資訊清單檔案預先處理。針對使用標籤日期的訓練任務,您通常需要預先處理資料集,結合輸入資料和中繼資料後再訓練。如果您的訓練資料集很大,預先處理費時又費錢。

擴增的資訊清單檔案格式

擴增的資訊清單檔案格式必須為 JSON 行格式。在 JSON 行格式中,檔案的每一行都是完整的 JSON 物件後接換行分隔符號。

在訓練期間,會 SageMaker 剖析每個 JSON 行,並將其部分或全部屬性傳送至訓練演算法。您要使用 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 參數中的列示順序,會決定屬性在訓練任務中傳遞到演算法的順序。

  • 列出的AttributeNames可以是 JSON 行中所有屬性的子集。 SageMaker 會忽略檔案中未列出的屬性。

  • 您可以在 AttributeNames 中指定 JSON 格式允許的任何資料類型,包括文字、數值、資料陣列或物件。

  • 若要包含 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.jpg檔案以s3://mybucket/sample01/及圖像分類is-a-cat屬性"1"的字串表示。

提示

若要建立增強資訊清單檔案,請使用 Amazon SageMaker Ground Truth 並建立標籤任務。如需有關從標籤工作輸出的詳細資訊,請參閱輸出資料

串流擴增的資訊清單檔案資料

擴增的資訊清單格式可讓您在管道模式中使用檔案進行訓練,而無需建立 RecordIO 檔案。您需要為 CreateTrainingJob 請求的 InputDataConfig 參數值指定訓練和驗證通道。僅支援使用管道輸入模式之通道的擴增資訊清單檔案。每個通道的資料都是從它的擴增資訊清單檔案擷取,並透過通道的具名管道 (依序) 串流至演算法。管道模式使用先入先出 (FIFO),所以記錄會依其佇列順序處理。如需管道輸入模式的資訊,請參閱 Input Mode

屬性名稱與 "-ref" 尾碼指向預先格式化的二進位資料。在某些情況下,演算法知道如何剖析資料。但有時候您可能需要包裝資料,針對演算法分隔記錄。如果演算法與 RecordIO 格式的資料相容,針對 RecordWrapperType 指定 RecordIO 可解決這個問題。如果演算法與 RecordIO 格式不相容,請針對 RecordWrapperType 指定 None,確保您的資料針對演算法正確剖析。

["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 屬性值串流為一筆記錄。這會導致問題,因為演算法可能不會正確分隔影像和屬性。有關使用增強清單文件進行影像分類的詳細資訊,請參閱使用增強清單圖像格式進行訓練

在一般情況下使用擴增資訊清單檔案和管道模式,EBS 磁碟區的大小限制並不適用。此情況包括必須在 S3DataDistributionType 這類 EBS 磁碟區大小限制內的設定。如需管道模式及其使用方法的詳細資訊,請參閱使用自有的訓練演算法 – 輸入資料組態

使用擴增的資訊清單檔案 (主控台)

若要完成此程序,您需要:

  • 存放擴增資訊清單檔案之 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. (選用) 針對 Additional volume per instance (GB) (每個執行個體的額外磁碟區 (GB)),選擇您要佈建的機器學習 (ML) 儲存磁碟區大小。在大多數情況下,您可以使用預設值 1。如要使用大型資料集,請使用較大的大小。

  7. 提供訓練資料集的輸入資料資訊。

    1. 針對通道名稱,接受預設值 (train) 或輸入更有意義的名稱,例如 training-augmented-manifest-file

    2. 對於 InputMode,選擇「」。

    3. 對於 S3 資料分發類型,請選擇FullyReplicated。以增量方式訓練時,完全複寫會讓每個機器學習 (ML) 運算執行個體使用已擴展資料集的完整複本。針對神經型演算法,例如 神經主題模型 (NTM) 演算法,選擇 ShardedByS3Key

    4. 如是擴增資訊清單檔案中指定的資料未經壓縮,請將 Compression type (壓縮類型) 設為 None (無)。如果使用 gzip 壓縮資料,請將它設為 Gzip

    5. (選用) 針對 Content type (內容類型),指定適當的 MIME 類型。內容類型是資料的多用途網際網路郵件延伸 (MIME) 類型。

    6. 針對 Record wrapper (記錄包裝函式),如果擴增資訊清單檔案中指定的資料集使用 RecordIO 格式儲存,請選擇 RecordIO。如果您的資料集未儲存為 RecordIO 格式的檔案,請選擇

    7. 對於 S3 資料類型,請選擇AugmentedManifestFile

    8. 針對 S3 location (S3 位置),提供您存放擴增資訊清單檔案的儲存貯體路徑。

    9. 對於AugmentedManifestFile 屬性名稱,請指定您要使用的屬性名稱。屬性名稱必須出現在擴增資訊清單檔案內,並區分大小寫。

    10. (選用) 若要新增更多屬性名稱,請選擇新增資料列,並指定每個屬性的其他屬性名稱。

    11. (選用) 如要調整屬性名稱的順序,請選擇名稱旁的向上或向下按鈕。使用擴增資訊清單檔案時,指定的屬性名稱順序很重要。

    12. 選擇完成

  8. 針對輸出資料組態,提供下列資訊:

    1. 針對 S3 位置,輸入您想要存放輸出資料的 S3 儲存貯體路徑。

    2. (選擇性) 您可以使用 AWS Key Management Service (AWS KMS) 加密金鑰來加密靜態輸出資料。針對加密金鑰,提供金鑰 ID 或其 Amazon Resource Name (ARN)。如需更多資訊,請參閱 KMS 受管加密金鑰

  9. (選用) 針對標籤,在訓練工作中新增一或多個標籤。標籤是您可以定義並指派給 AWS 資源的中繼資料。在這種情況下,您可以使用標籤協助管理您的訓練任務。標籤是由您定義的鍵和值構成。例如,您可能想要建立這樣的標籤:以 Project 做為鍵,而值為與訓練任務相關的專案,例如 Home value forecasts

  10. 選擇 [建立訓練工作]。 SageMaker 建立並執行訓練工作。

訓練任務完成後,將模型成品 SageMaker 儲存在您為 S3 輸出路徑提供的儲存貯體中的「輸出資料組態」欄位中。若要部署模型以取得預測,請參閱步驟 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)

訓練任務完成後,將模型成品 SageMaker 儲存在您為 S3 輸出路徑提供的儲存貯體中的「輸出資料組態」欄位中。若要部署模型以取得預測,請參閱步驟 5:將模型部署至 Amazon EC2