

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

# 使用 Amazon SageMaker AI 進行批次轉換以進行推論
<a name="batch-transform"></a>

當您需要執行下列動作時，請使用批次轉換：
+ 預先處理資料集，以移除干擾資料集訓練或推論的雜訊或偏差。
+ 從大型資料集取得推論。
+ 當您不需要持久性端點時，執行推論。
+ 將輸入記錄與推論建立關聯，以協助解讀結果。

若要先篩選輸入資料再執行推論，或建立輸入記錄和有關這些記錄推論的關聯性，請參閱[建立預測結果與輸入記錄的關聯性](batch-transform-data-processing.md)。例如，您可以篩選輸入資料，以提供用於建立和解譯輸出資料報告的內容。

**Topics**
+ [使用批次轉換從大型資料集取得推論](#batch-transform-large-datasets)
+ [加快批次轉換任務的速度](#batch-transform-reduce-time)
+ [使用批次轉換來測試生產變體](#batch-transform-test-variants)
+ [批次轉換範例筆記本](#batch-transform-notebooks)
+ [建立預測結果與輸入記錄的關聯性](batch-transform-data-processing.md)
+ [批次轉換中的儲存](batch-transform-storage.md)
+ [疑難排解](batch-transform-errors.md)

## 使用批次轉換從大型資料集取得推論
<a name="batch-transform-large-datasets"></a>

批次轉換會在指定的參數限制內，自動管理大型資料集的處理作業。例如，將資料集檔案 `input1.csv` 存放在 S3 儲存貯體中。輸入檔案的內容可能如下所示。

```
Record1-Attribute1, Record1-Attribute2, Record1-Attribute3, ..., Record1-AttributeM
Record2-Attribute1, Record2-Attribute2, Record2-Attribute3, ..., Record2-AttributeM
Record3-Attribute1, Record3-Attribute2, Record3-Attribute3, ..., Record3-AttributeM
...
RecordN-Attribute1, RecordN-Attribute2, RecordN-Attribute3, ..., RecordN-AttributeM
```

批次轉換工作開始時，SageMaker AI 會初始化運算執行個體，然後將推論或預先處理的工作負載分配給執行個體。批次轉換依據金鑰分區輸入中的 Amazon S3 物件，並將 Amazon S3 物件對應到執行個體。有多個檔案時，一個執行個體可能會處理 `input1.csv`，而另一個執行個體可能會處理名為 `input2.csv` 的檔案。如果您有一個輸入檔案，但初始化多個運算執行個體，則只有一個執行個體會處理輸入檔案。其餘執行個體處於閒置狀態。

您還可以將輸入檔案分割為微型批次。例如，您可能只包含兩個記錄，從 `input1.csv` 建立微批次。

```
Record3-Attribute1, Record3-Attribute2, Record3-Attribute3, ..., Record3-AttributeM
Record4-Attribute1, Record4-Attribute2, Record4-Attribute3, ..., Record4-AttributeM
```

**注意**  
SageMaker AI 會分別處理每個輸入檔案。為符合 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB               ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB               ) 限制，它不會合併不同輸入檔案的微型批次。

若要將輸入檔案分割成數個微型批次，則建立批次轉換工作時，請將 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType             ) 參數值設為 `Line`。SageMaker AI 會在單一請求中使用整個輸入檔案：
+ `SplitType` 已設定為 `None`。
+ 輸入檔案無法分割為迷你批次。

。請注意，批次轉換不支援包含內嵌新行字元的 CSV 格式輸入。您可以使用 `[BatchStrategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-BatchStrategy)` 和 `[MaxPayloadInMB](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-MaxPayloadInMB)` 參數控制微型批次的大小。`MaxPayloadInMB` 不得大於 100 MB。如果您指定選用的 `[MaxConcurrentTransforms](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-MaxConcurrentTransforms)` 參數，則 `(MaxConcurrentTransforms * MaxPayloadInMB)` 的值也不得超過 100 MB。

如果批次轉換任務成功處理輸入檔中的所有記錄，它會建立輸出檔。輸出檔案具有相同的名稱和 `.out` 副檔名。對於 `input1.csv` 和 `input2.csv` 之類的多個輸入檔，系統會將輸出檔命名為 `input1.csv.out` 和 `input2.csv.out`。批次轉換工作會將輸出檔案儲存在 Amazon S3 的指定位置，例如 `s3://amzn-s3-demo-bucket/output/`。

系統會以輸入檔中對應記錄的相同順序來列出輸出檔的預測結果。根據前文所示的輸入檔內容，`input1.csv.out` 輸出檔的內容可能如下所示。

```
Inference1-Attribute1, Inference1-Attribute2, Inference1-Attribute3, ..., Inference1-AttributeM
Inference2-Attribute1, Inference2-Attribute2, Inference2-Attribute3, ..., Inference2-AttributeM
Inference3-Attribute1, Inference3-Attribute2, Inference3-Attribute3, ..., Inference3-AttributeM
...
InferenceN-Attribute1, InferenceN-Attribute2, InferenceN-Attribute3, ..., InferenceN-AttributeM
```

如果將 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType             ) 設定為 `Line`，您可以將 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-AssembleWith             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-AssembleWith             ) 參數設定為 `Line`，以行分隔符號串連輸出記錄。串連不會改變輸出檔案的數量。輸出檔案的數量等於輸入檔案的數量，而且使用 `AssembleWith` 不合併檔案。如果您未指定 `AssembleWith` 參數，則依預設，輸出記錄會以二進位格式串連。

輸入資料非常大，且使用 HTTP 區塊編碼傳輸時，若要將資料串流至演算法，請將 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB) 設為 `0`。Amazon SageMaker AI 的內建演算法不支援此功能。

如需使用 API 建立批次轉換任務的資訊，請參閱 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) API。如需批次轉換輸入和輸出物件之間關係的更多資訊，請參閱 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputDataConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputDataConfig.html)。如需如何使用批次轉換的範例，請參閱[(選用) 使用批次轉換進行預測](ex1-model-deployment.md#ex1-batch-transform)。

## 加快批次轉換任務的速度
<a name="batch-transform-reduce-time"></a>

如果您使用的是 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) API，則可以透過使用參數的最佳值來減少完成批次轉換作業所需的時間。這包括參數，例如 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB)、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxConcurrentTransforms](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxConcurrentTransforms) 或 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-BatchStrategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-BatchStrategy)。`MaxConcurrentTransforms` 的理想值等於批次轉換工作中的運算工作者的數量。

如果您使用的是 SageMaker AI 主控台，可以在**批次轉換工作組態**頁面的**其他組態**區段中指定這些最佳參數值。SageMaker AI 會自動尋找內建演算法的最佳參數設定。針對自訂演算法，請透過 [execution-parameters](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-batch-code.html#your-algorithms-batch-code-how-containe-serves-requests) 端點來提供這些值。

## 使用批次轉換來測試生產變體
<a name="batch-transform-test-variants"></a>

若要測試模型或超參數設定，請針對每個新模型變體建立不同的轉換任務，並使用驗證資料集。針對每個轉換任務，請為輸出檔案指定唯一的模型名稱和 Amazon S3 中的位置。若要分析結果，請使用 [推論管道日誌和指標](inference-pipeline-logs-metrics.md)。

## 批次轉換範例筆記本
<a name="batch-transform-notebooks"></a>

如需使用批次轉換的範例筆記本，請參閱[使用 PCA 和 DBSCAN 電影叢集進行批次轉換](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker_batch_transform/introduction_to_batch_transform/batch_transform_pca_dbscan_movie_clusters.html)。此筆記本使用具有主體元件分析 (PCA) 模型的批次轉換，以減少使用者項目檢閱矩陣中的資料。接著，應用具有雜訊 (DBSCAN) 演算法的密度型空間叢集應用程式來對電影進行分群。

 如需建立和存取您可以用來在 SageMaker AI 執行範例的 Jupyter 筆記本執行個體說明，請參閱[Amazon SageMaker 筆記本執行個體](nbi.md)。建立並開啟筆記本執行個體後，請選擇 **SageMaker 範例**標籤，查看所有 SageMaker AI 範例的清單。使用 NTM 演算法的主題模組化範例筆記本，位於**進階功能**一節。若要開啟筆記本，請選擇其**使用**標籤，然後選擇**建立複本**。

# 建立預測結果與輸入記錄的關聯性
<a name="batch-transform-data-processing"></a>

建立大型資料集的預測時，您可以排除預測不需要的屬性。完成預測後，您可以建立一些已排除屬性與這些預測，或與報告中其他輸入資料的關聯性。使用批次轉換來執行這些資料處理步驟，您通常不需要額外的預先處理或後續處理。您只能使用 JSON 和 CSV 格式的輸入檔案。

**Topics**
+ [建立推論與輸入記錄關聯的工作流程](#batch-transform-data-processing-workflow)
+ [在批次轉換任務中使用資料處理](#batch-transform-data-processing-steps)
+ [支援的 JSONPath 運算子](#data-processing-operators)
+ [批次轉換範例](#batch-transform-data-processing-examples)

## 建立推論與輸入記錄關聯的工作流程
<a name="batch-transform-data-processing-workflow"></a>

下圖顯示建立推論與輸入記錄關聯性的工作流程。

![\[建立推論與輸入記錄關聯的工作流程。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/batch-transform-data-processing.png)


若要建立推論與輸入資料的關聯性，有三個主要步驟：

1. 先篩選掉推論不需要的輸入資料，再將輸入資料傳送至批次轉換任務。使用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-InputFilter                             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-InputFilter                             ) 參數判斷做為模型輸入使用的屬性。

1. 建立輸入資料與推論結果的關聯性。使用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-JoinSource                         ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-JoinSource                         ) 參數，結合輸入資料與推論。

1. 篩選掉已加入的資料，保留所需輸入，在報告中提供解譯預測的內容。使用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-OutputFilter                             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-OutputFilter                             ) 將已聯結資料集的指定部分儲存在輸出檔案。

## 在批次轉換任務中使用資料處理
<a name="batch-transform-data-processing-steps"></a>

使用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) 建立批次轉換工作處理資料時：

1. 在 `DataProcessing` 資料結構中使用 `InputFilter` 參數，指定要傳遞到模型的輸入部分。

1. 使用轉換的資料和 `JoinSource` 參數加入原始輸入資料。

1. 使用 `OutputFilter` 參數指定在輸出檔中要包含加入輸入和批次換任務轉換資料的哪些部分。

1.  選擇輸入使用 JSON 或 CSV 格式的檔案：
   + 針對 JSON 或 JSON 行格式的輸入檔案，SageMaker AI 會將 `SageMakerOutput` 屬性新增至輸入檔案，或使用 `SageMakerInput` 和 `SageMakerOutput` 屬性建立新的 JSON 輸出檔案。如需詳細資訊，請參閱[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataProcessing.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataProcessing.html)。
   + 針對 CSV 格式的輸入檔，加入的輸入資料後面會跟著轉換資料，而輸出為 CSV 檔案。

如果您使用演算法和 `DataProcessing` 結構，它必須*同時*支援您選擇的輸入檔和輸出檔格式。例如，`CreateTransformJob` API 的 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html) 欄位，[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-ContentType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-ContentType) 和 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-Accept](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-Accept) 參數皆必須設為下列其中一個值：`text/csv`、`application/json` 或 `application/jsonlines`。在 CSV 檔案中指定資料欄的語法和在 JSON 檔案中指定屬性的語法不相同。使用錯誤的語法會造成錯誤。如需詳細資訊，請參閱[批次轉換範例](#batch-transform-data-processing-examples)。如需內建演算法之輸入和輸出檔格式的詳細資訊，請參閱[Amazon SageMaker 中的內建演算法和預先訓練模型](algos.md)。

輸入和輸出的記錄分隔符號也必須與您選擇的檔案輸入一致。[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType) 參數指出如何分割輸入資料集中的記錄。[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-AssembleWith                     ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-AssembleWith                     ) 參數指出如何重新組合輸出記錄。如果您將輸入和輸出格式設為 `text/csv`，您還必須將 `SplitType` 和 `AssembleWith` 參數設為 `line`。如果將輸入和輸出格式設為 `application/jsonlines`，您就可以同時將 `SplitType` 和 `AssembleWith` 設為 `line`。

CSV 檔案無法使用內嵌新行字元。若為 JSON 檔案，屬性名稱 `SageMakerOutput` 預留給輸出。JSON 輸入檔不能有此名稱的屬性。如有，則可能覆寫輸入檔中的資料。

## 支援的 JSONPath 運算子
<a name="data-processing-operators"></a>

若要篩選及加入輸入資料和推論，請使用 JSONPath 子表達式。SageMaker AI 僅支援已定義 JSONPath 運算子的子集。下表列出支援的 JSONPath 運算子。對於 CSV 資料，系統會以 JSON 陣列的形式來擷取每個資料列，因此只能套用索引型的 JSONPaths，例如 `$[0]`、`$[1:]`。CSV 資料也應該遵循 [RFC 格式](https://tools.ietf.org/html/rfc4180)。


| JSONPath 運算子 | Description | 範例 | 
| --- | --- | --- | 
| \$1 |  查詢的根元素。所有路徑表達式的開頭都必須有此運算子。  | \$1 | 
| .<name> |  以點標記的子元素。  |  `$.id`  | 
| \$1 |  萬用字元。用以代替屬性名稱或數值。  |  `$.id.*`  | 
| ['<name>' (,'<name>')] |  以括號標記的元素或多個子元素。  |  `$['id','SageMakerOutput']`  | 
| [<number> (,<number>)] |  索引或索引陣列。也支援負索引值。`-1` 索引是指陣列的最後一個元素。  |  `$[1]` , `$[1,3,5]`  | 
| [<start>:<end>] |  陣列分割運算子。array slice() 方法會擷取陣列的一部分，並傳回新的陣列。如果省略 *<start>*，SageMaker AI 會使用陣列的第一個元素。如果省略 *<end>*，SageMaker AI 會使用陣列的最後一個元素。  |  `$[2:5]`, `$[:5]`, `$[2:]`  | 

當使用括號表示法來指定特定欄位的多個子元素時，不支援括號內子項的額外巢狀。例如，支援 `$.field1.['child1','child2']`，但不支援 `$.field1.['child1','child2.grandchild']`。

如需 JSONPath 運算子的詳細資訊，請參閱 GitHub 上的 [JsonPath](https://github.com/json-path/JsonPath)。

## 批次轉換範例
<a name="batch-transform-data-processing-examples"></a>

以下範例會示範一些結合輸入資料和預測結果的常見方式。

**Topics**
+ [範例：僅輸出推論](#batch-transform-data-processing-example-default)
+ [範例：輸出推論聯結輸入資料](#batch-transform-data-processing-example-all)
+ [範例：輸出推論與輸入資料聯結，並從輸入排除 ID 欄 (CSV)](#batch-transform-data-processing-example-select-csv)
+ [範例：輸出聯結 ID 欄的推論，並排除輸入的 ID 欄 (CSV)](#batch-transform-data-processing-example-select-json)

### 範例：僅輸出推論
<a name="batch-transform-data-processing-example-default"></a>

根據預設，[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-DataProcessing](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-DataProcessing) 參數不會將推論結果與輸入聯結。它只會輸出推論結果。

如果您想明確指定不將結果與輸入聯結，請使用 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)，並在轉換器呼叫中指定下列設定。

```
sm_transformer = sagemaker.transformer.Transformer(…)
sm_transformer.transform(…, input_filter="$", join_source= "None", output_filter="$")
```

若要使用適用於 Python 的 AWS SDK 輸出推論，請將下列程式碼新增至 CreateTransformJob 請求。以下程式碼模擬預設的行為。

```
{
    "DataProcessing": {
        "InputFilter": "$",
        "JoinSource": "None",
        "OutputFilter": "$"
    }
}
```

### 範例：輸出推論聯結輸入資料
<a name="batch-transform-data-processing-example-all"></a>

如果您使用 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 將輸入資料與輸出檔案中的推論結合，初始化轉換物件時請指定 `assemble_with` 和 `accept` 參數。使用轉換呼叫時，`join_source` 參數請指定為 `Input`，並指定 `split_type` 和 `content_type` 參數。`split_type` 參數的值必須與 `assemble_with` 相同，且 `content_type` 參數的值必須與 `accept` 相同。如需參數及其接受值的更多資訊，請參閱 *Amazon SageMaker AI Python SDK* 中的[轉換器](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html#sagemaker.transformer.Transformer)頁面。

```
sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv")
sm_transformer.transform(…, join_source="Input", split_type="Line", content_type="text/csv")
```

如果您使用的是適用於 Python 的 AWS SDK (Boto 3)，請將下列程式碼新增至您的[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)請求，以使用推論加入所有輸入資料。`Accept` 和 `ContentType` 的值必須相符，且 `AssembleWith` 和 `SplitType` 的值也必須相符。

```
{
    "DataProcessing": {
        "JoinSource": "Input"
    },
    "TransformOutput": {
        "Accept": "text/csv",
        "AssembleWith": "Line"
    },
    "TransformInput": {
        "ContentType": "text/csv",
        "SplitType": "Line"
    }
}
```

針對 JSON 或 JSON 行輸入檔，結果位在輸入 JSON 檔案的 `SageMakerOutput` 金鑰中。例如，如果輸入是包含鍵/值對 `{"key":1}` 的 JSON 檔案，則資料轉換結果可能會是 `{"label":1}`。

SageMaker AI 會將兩者儲存於 `SageMakerInput` 金鑰的輸入檔案中。

```
{
    "key":1,
    "SageMakerOutput":{"label":1}
}
```

**注意**  
JSON 的已加入結果必須是鍵/值對物件。如果輸入不是金鑰值對物件，SageMaker AI 就會建立新的 JSON 檔案。在新的 JSON 檔案中，輸入資料會存放在 `SageMakerInput` 索引鍵中，而結果則存放為 `SageMakerOutput` 值。

針對 CSV 檔案，例如，如果記錄是 `[1,2,3]`，且標籤結果是 `[1]`，則輸出檔會包含 `[1,2,3,1]`。

### 範例：輸出推論與輸入資料聯結，並從輸入排除 ID 欄 (CSV)
<a name="batch-transform-data-processing-example-select-csv"></a>

如果您使用 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 將輸入資料與推論輸出聯結，並且從轉換器輸入排除 ID 欄，請指定前述範例中的相同參數，以及轉換器呼叫中 `input_filter` 的 JsonPath 子運算式。例如，如果輸入資料包含五個欄，而第一欄是 ID 欄，請使用下列轉換器請求，選取 ID 欄以外的所有資料欄作為功能。轉換器仍會輸出與推論聯結的所有輸入欄。如需參數及其接受值的更多資訊，請參閱 *Amazon SageMaker AI Python SDK* 中的[轉換器](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html#sagemaker.transformer.Transformer)頁面。

```
sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv")
sm_transformer.transform(…, split_type="Line", content_type="text/csv", input_filter="$[1:]", join_source="Input")
```

如果您使用的是適用於 Python 的 AWS SDK (Boto 3)，請將下列程式碼新增至您的`[ CreateTransformJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)`請求。

```
{
    "DataProcessing": {
        "InputFilter": "$[1:]",
        "JoinSource": "Input"
    },
    "TransformOutput": {
        "Accept": "text/csv",
        "AssembleWith": "Line"
    },
    "TransformInput": {
        "ContentType": "text/csv",
        "SplitType": "Line"
    }
}
```

若要在 SageMaker AI 中指定欄，請使用陣列元素的索引。第一欄是索引 0，第二欄是索引 1，第六欄是索引 5。

若要排除輸入的首欄，請將 `[InputFilter](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-InputFilter )` 設為 `"$[1:]"`。冒號 (`:`) 指示 SageMaker AI 包括兩個值 (含) 之間的所有元素。例如，`$[1:4]` 指定第二欄到第五欄。

如果您省略冒號後面的數字，例如 `[5:]`，則子集會包含從第六欄到最後一欄的所有欄。如果您省略冒號前面的數字，例如 `[:5]`，則子集會包含從第一欄 (索引 0) 到第六欄的所有欄。

### 範例：輸出聯結 ID 欄的推論，並排除輸入的 ID 欄 (CSV)
<a name="batch-transform-data-processing-example-select-json"></a>

如果您使用的是 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)，可以指定輸出僅將特定輸入欄 (例如 ID 欄) 與推論聯結，方法是在轉換器呼叫中指定 `output_filter`。`output_filter` 使用 JSONPath 子運算式指定，輸入資料與推論結果聯結之後，要傳回哪些資料欄做為輸出。以下請求顯示，如何在排除 ID 欄的同時進行預測，然後將 ID 欄與推論聯結。請注意，在以下範例，輸出的尾欄 (`-1`) 包含推論。如果您使用的是 JSON 檔案，SageMaker AI 會將推論結果儲存於屬性 `SageMakerOutput`。如需參數及其接受值的更多資訊，請參閱 *Amazon SageMaker AI Python SDK* 中的[轉換器](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html#sagemaker.transformer.Transformer)頁面。

```
sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv")
sm_transformer.transform(…, split_type="Line", content_type="text/csv", input_filter="$[1:]", join_source="Input", output_filter="$[0,-1]")
```

如果您使用的是適用於 Python 的 AWS SDK (Boto 3)，請將下列程式碼新增至您的[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)請求，只加入 ID 資料欄與推論。

```
{
    "DataProcessing": {
        "InputFilter": "$[1:]",
        "JoinSource": "Input",
        "OutputFilter": "$[0,-1]"
    },
    "TransformOutput": {
        "Accept": "text/csv",
        "AssembleWith": "Line"
    },
    "TransformInput": {
        "ContentType": "text/csv",
        "SplitType": "Line"
    }
}
```

**警告**  
如果您使用的是 JSON 格式的輸入檔，檔案不能包含屬性名稱 `SageMakerOutput`。此屬性名稱預留給輸出檔案中的推論。如果 JSON 格式的輸入檔包含具有此名稱的屬性，則可能會使用推論覆寫輸入檔中的值。

# 批次轉換中的儲存
<a name="batch-transform-storage"></a>

執行批次轉換工作時，Amazon SageMaker AI 會將 Amazon Elastic Block Store 儲存磁碟區附加到處理工作的 Amazon EC2 執行個體。磁碟區會儲存模型，且儲存磁碟區的大小固定為 30 GB。您可以選擇加密儲存磁碟區中的靜態模型。

**注意**  
如果您有大型模型，則可能會遇到 `InternalServerError`.

有關 Amazon EBS 儲存和功能的更多資訊，請參閱以下頁面：
+ 《Amazon EC2 使用者指南》中的 [Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)
+ 《Amazon EC2 使用者指南》中的 [Amazon EBS 磁碟區](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes.html)

**注意**  
G4dn 執行個體隨附自己的本機 SSD 儲存空間。要瞭解有關 G4DN 執行個體的詳細資訊，請參閱[Amazon EC2 G4 執行個體](https://aws.amazon.com/ec2/instance-types/g4/)頁面。

# 疑難排解
<a name="batch-transform-errors"></a>

如果您在 Amazon SageMaker AI 批次轉換發生錯誤，請參閱下列疑難排解提示。

## 最大逾時錯誤
<a name="batch-transform-errors-max-timeout"></a>

如果您在執行批次轉換工作時收到最大逾時錯誤，請嘗試下列方式：
+ 從單一記錄 `[BatchStrategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-BatchStrategy)` 開始，您在 `[MaxPayloadInMB](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-MaxPayloadInMB)` 參數中指定的預設值 (6 MB) 或更小的批次大小，以及一個小範例資料集。調整最大逾時參數 `[InvocationsTimeoutInSeconds](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelClientConfig.html#sagemaker-Type-ModelClientConfig-InvocationsTimeoutInSeconds)` (最多 1 小時)，直到您收到成功的調用回應為止。
+ 收到成功的調用回應之後，請增加 `MaxPayloadInMB` (上限 100 MB) 和 `InvocationsTimeoutInSeconds` 參數，找出可支援所需模型逾時的批次大小上限。您可以在此步驟使用單一記錄或多重記錄 `BatchStrategy`。
**注意**  
超過 `MaxPayloadInMB` 限制會導致錯誤。大型資料集無法分割、`SplitType` 參數設為無，或資料集的個別記錄超出限制時，都可能會發生這個問題。
+ (選用) 調整 `[MaxConcurrentTransforms](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-MaxConcurrentTransforms)` 參數；此參數會指定批次轉換工作中，可以傳送至每個執行個體的平行請求數量上限。然而，`MaxConcurrentTransforms * MaxPayloadInMB` 的值不得超過 100 MB。

## 輸出不完整
<a name="batch-transform-errors-incomplete"></a>

SageMaker AI 使用 Amazon S3 [分段上傳 API](https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html)，將批次轉換工作結果上傳至 Amazon S3。如果發生錯誤，則會將上傳結果從 Amazon S3 移除。在某些情況下，例如網路中斷時，未完成的分段上傳可能會留在 Amazon S3。如果您有多個輸入檔案，但 SageMaker AI 批次轉換無法處理某些檔案，也可能會發生上傳未完成的情況。無法處理的輸入檔案在 Amazon S3 中不會有對應的輸出檔案。

為了避免產生儲存費用，我們建議您將 [S3 儲存貯體政策](https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config)新增到 S3 儲存貯體的生命週期規則。此政策會刪除可能存放在 S3 儲存貯體中的不完整分段上傳。如需詳細資訊，請參閱[物件生命週期管理](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html)。

## 工作顯示為 `failed`
<a name="batch-transform-errors-failed"></a>

如果因為資料集發生問題，造成批次轉換工作無法處理輸入檔案，SageMaker AI 會將該工作標記為 `failed`。如果輸入檔包含錯誤的記錄，轉換任務不會為該輸入檔建立輸出檔，因為這樣做會阻止它在轉換資料中維持與輸入檔相同的順序。當您的資料集有多個輸入檔，即使轉換任務無法處理其中一個檔案，仍會持續處理。處理檔案仍會產生可用的結果。

如果您使用的是自己的演算法，當演算法在輸入檔中找到錯誤記錄時，您可以使用預留位置文字，例如 `ERROR`。例如，如果資料集中的最後一個記錄是錯誤的，演算法會將該記錄的預留位置文字放在輸出檔中。