

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

# 訓練任務中的擴增的資訊清單檔案
<a name="augmented-manifest"></a>

使用擴增的資訊清單檔案，在訓練任務中包含具有您資料集的中繼資料。使用擴增的資訊清單檔案時，您的資料集必須存放在 Amazon Simple Storage Service (Amazon S3)，而且您必須設定訓練任務使用存放於此的資料集。您要針對一或多個 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html) 指定此資料集的位置和格式。擴增資訊清單只能支援管道輸入模式。請參閱部分，**InputMode**在[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html)以瞭解有關管道輸入模式的詳細資訊。

指定通道的參數時，您指定的檔案路徑稱為 `S3Uri`。Amazon SageMaker AI 會根據 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html) 中指定的 `S3DataType` 來解譯此 URI。`AugmentedManifestFile` 選項定義的資訊清單格式，包括具有輸入資料的中繼資料。當您有標籤資料時，也可以使用擴增的資訊清單檔案預先處理。針對使用標籤日期的訓練任務，您通常需要預先處理資料集，結合輸入資料和中繼資料後再訓練。如果您的訓練資料集很大，預先處理費時又費錢。

## 擴增的資訊清單檔案格式
<a name="augmented-manifest-format"></a>

擴增的資訊清單檔案格式必須為 [JSON 行](http://jsonlines.org/)格式。在 JSON 行格式中，檔案的每一行都是完整的 JSON 物件後接換行分隔符號。

在訓練期間，SageMaker AI 會剖析每一 JSON 行，將其部分或全部屬性傳送至訓練演算法。您要使用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) API 的 `AttributeNames` 參數指定傳遞的屬性內容和順序。`AttributeNames` 參數是屬性名稱的排序清單，SageMaker AI 會在 JSON 物件中尋找這些名稱做為訓練輸入使用。

例如，如果您針對 `AttributeNames` 列出 `["line", "book"]`，則輸入資料必須依指定的順序包含 `line` 和 `book` 的屬性名稱。在此範例中，以下為有效的擴增資訊清單檔案內容：

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

未列出的屬性名稱即使出現在已列出屬性的前、中、後，SageMaker AI 都予以忽略。

使用擴增的資訊清單檔案時，請遵循下列指導方針：
+ 屬性在 `AttributeNames` 參數中的列示順序，會決定屬性在訓練任務中傳遞到演算法的順序。
+ 列出的 `AttributeNames` 可以是 JSON 行中全部屬性的一部分。SageMaker AI 會忽略檔案中未列出的屬性。
+ 您可以在 `AttributeNames` 中指定 JSON 格式允許的任何資料類型，包括文字、數值、資料陣列或物件。
+ 若要包含 S3 URI 做為屬性名稱，請為其新增尾碼 `-ref`。

如果屬性名稱包含尾碼 `-ref`，則屬性值必須為訓練任務可存取之資料檔案的 S3 URI。例如，如果 `AttributeNames` 包含 `["image-ref", "is-a-cat"]`，下列範例會顯示有效的擴增資訊清單檔案：

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

對於此資訊清單檔案的第一行 JSON 行，SageMaker AI 會從 `s3://amzn-s3-demo-bucket/sample01/` 以及 `is-a-cat` 屬性 `"1"` 的字串呈現擷取 `image1.jpg` 檔案，以進行影像分類。

**提示**  
若要建立擴增的資訊清單檔案，請使用 SageMaker Ground Truth 來建立標籤工作。如需有關從標籤工作輸出的詳細資訊，請參閱[標籤工作輸出資料](sms-data-output.md)。

# 適用於管道模式訓練的擴增資訊清單檔案格式
<a name="augmented-manifest-stream"></a>

擴增的資訊清單格式可讓您在管道模式中使用檔案進行訓練，而無需建立 RecordIO 檔案。您需要為 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 請求的 `InputDataConfig` 參數值指定訓練和驗證通道。僅支援使用管道輸入模式之通道的擴增資訊清單檔案。每個通道的資料都是從它的擴增資訊清單檔案擷取，並透過通道的具名管道 (依序) 串流至演算法。管道模式使用先入先出 (FIFO)，所以記錄會依其佇列順序處理。如需管道輸入模式的資訊，請參閱 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-InputMode](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-InputMode)。

屬性名稱與 `"-ref"` 尾碼指向預先格式化的二進位資料。在某些情況下，演算法知道如何剖析資料。但有時候您可能需要包裝資料，針對演算法分隔記錄。如果演算法與 [RecordIO 格式的資料](https://mxnet.apache.org/api/architecture/note_data_loading#data-format)相容，針對 `RecordWrapperType` 指定 `RecordIO` 可解決這個問題。如果演算法與 `RecordIO` 格式不相容，請針對 `RecordWrapperType` 指定 `None`，確保您的資料針對演算法正確剖析。

以 `["image-ref", "is-a-cat"]` 為例，如果您使用 RecordIO 包裝，則以下的資料串流會傳送到佇列：

`recordio_formatted(s3://amzn-s3-demo-bucket/foo/image1.jpg)recordio_formatted("1")recordio_formatted(s3://amzn-s3-demo-bucket/bar/image2.jpg)recordio_formatted("0")`

未使用 RecordIO 格式包裝的影像，會和對應的 `is-a-cat` 屬性值串流為一筆記錄。這會導致問題，因為演算法可能不會正確分隔影像和屬性。有關使用增強清單文件進行影像分類的詳細資訊，請參閱[使用增強清單圖像格式進行訓練](https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html#IC-augmented-manifest-training)。

在一般情況下使用擴增資訊清單檔案和管道模式，EBS 磁碟區的大小限制並不適用。此情況包括必須在 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html#SageMaker-Type-S3DataSource-S3DataDistributionType                 ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html#SageMaker-Type-S3DataSource-S3DataDistributionType                 ) 這類 EBS 磁碟區大小限制內的設定。如需管道模式及其使用方法的詳細資訊，請參閱[使用自有的訓練演算法 – 輸入資料組態](your-algorithms-training-algo.html#your-algorithms-training-algo-running-container-inputdataconfig)。

## 使用擴增的資訊清單檔案
<a name="augmented-manifest-create"></a>

下列各節說明如何在 Amazon SageMaker 訓練任務中使用擴增資訊清單檔案，包括搭配 SageMaker AI 主控台，或使用 SageMaker Python SDK 以程式設計方式使用。

### 使用擴增的資訊清單檔案 (主控台)
<a name="augmented-manifest-console"></a>

若要完成此程序，您需要：
+ 存放擴增資訊清單檔案之 S3 儲存貯體的 URL。
+ 將列在擴增資訊清單檔案中的資料存放在 S3 儲存貯體。
+ 用來存放工作輸出的 S3 儲存貯體的 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. (選用) 針對 **Additional volume per instance (GB) (每個執行個體的額外磁碟區 (GB))**，選擇您要佈建的機器學習 (ML) 儲存磁碟區大小。在大多數情況下，您可以使用預設值 `1`。如要使用大型資料集，請使用較大的大小。

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

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

   1. 針對 **InputMode**，選擇**管道**。

   1. 針對 **S3 data distribution type (S3 資料分佈類型)**，選擇 **FullyReplicated**。以增量方式訓練時，完全複寫會讓每個機器學習 (ML) 運算執行個體使用已擴展資料集的完整複本。針對神經型演算法，例如 [神經主題模型 (NTM) 演算法](ntm.md)，選擇 `ShardedByS3Key`。

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

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

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

   1. 針對 **S3 data type (S3 資料類型)**，選擇 **AugmentedManifestFile**。

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

   1. 針對 **AugmentedManifestFile 屬性名稱**，指定您想要使用的屬性名稱。屬性名稱必須出現在擴增資訊清單檔案內，並區分大小寫。

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

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

   1. 選擇**完成**。

1. 針對**輸出資料組態**，提供下列資訊：

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

   1. （選用） 您可以使用您的 AWS Key Management Service (AWS KMS) 加密金鑰來加密靜態輸出資料。針對**加密金鑰**，提供金鑰 ID 或其 Amazon Resource Name (ARN)。如需更多資訊，請參閱 [KMS 受管加密金鑰](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html)。

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

1. 選擇**建立訓練工作**。SageMaker AI 會建立並執行訓練任務。

訓練任務完成後，SageMaker AI 會將模型成品存放在儲存貯體中，而用於 **S3 輸出路徑**的儲存貯體路徑則在**輸出資料組態**一欄提供。若要部署模型以取得預測，請參閱[將模型部署至 Amazon EC2](ex1-model-deployment.md)。

### 使用增強版資訊清單檔案 (API)
<a name="augmented-manifest-api"></a>

以下說明如何使用 SageMaker AI 高階 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 AI 會將模型成品存放在儲存貯體中，而用於 **S3 輸出路徑**的儲存貯體路徑則在**輸出資料組態**一欄提供。若要部署模型以取得預測，請參閱[將模型部署至 Amazon EC2](ex1-model-deployment.md)。