

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

# Amazon SageMaker AI 分散式資料平行程式庫的組態提示。
<a name="data-parallel-config"></a>

使用 SageMaker AI 分散式資料平行 (SMDDP) 程式庫之前，請先檢閱下列提示。此清單包含適用於跨架構的提示。

**Topics**
+ [資料預先處理](#data-parallel-config-dataprep)
+ [單一節點與多個節點](#data-parallel-config-multi-node)
+ [使用偵錯工具偵錯擴展效率](#data-parallel-config-debug)
+ [批次大小](#data-parallel-config-batch-size)
+ [自訂 MPI 選項](#data-parallel-config-mpi-custom)
+ [使用 Amazon FSx 並設定最佳儲存和輸送容量](#data-parallel-config-fxs)

## 資料預先處理
<a name="data-parallel-config-dataprep"></a>

如果您在訓練期間使用利用 CPU 的外部程式庫預先處理資料，則可能會遇到 CPU 瓶頸，因為 SageMaker AI 分散式資料平行使用 CPU 進行 `AllReduce` 操作。您可以將預先處理步驟移至使用 GPU 的程式庫，或在訓練前完成所有預先處理，以改善訓練時間。

## 單一節點與多個節點
<a name="data-parallel-config-multi-node"></a>

我們建議您搭配多個節點使用此程式庫。此程式庫可搭配單一主機、多裝置設定 (例如，具有多個 GPU 的單一機器學習 (ML) 運算執行個體) 搭配使用；不過，當您使用兩個或多個節點時，程式庫的 `AllReduce` 操作可大幅提升效能。此外，在單一主機上，NVLink 已經有助於提升節點內部 `AllReduce` 效率。

## 使用偵錯工具偵錯擴展效率
<a name="data-parallel-config-debug"></a>

您可以使用 Amazon SageMaker Debugger，在訓練期間監控並視覺化 CPU 和 GPU 使用率以及其他感興趣的指標。您可以使用偵錯工具[內建規則](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-built-in-rules.html)，以監控運算效能問題，例如 `CPUBottleneck`、`LoadBalancing` 和 `LowGPUUtilization`。當您定義 Amazon SageMaker Python SDK 估算器，您可以使用[偵錯工具組態](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-configuration-for-debugging.html)來指定這些規則。如果您使用 AWS CLI 和 適用於 Python (Boto3) 的 AWS SDK 在 SageMaker AI 上進行訓練，您可以啟用偵錯工具，如[使用 Amazon SageMaker API 設定 SageMaker Debugger Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/debugger-createtrainingjob-api.html)所示。

若要查看 SageMaker 訓練任務中使用偵錯工具的範例，您可以參考 [SageMaker 筆記本範例 GitHub 儲存庫](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-debugger)中的其中一個筆記本範例。要瞭解有關除錯器的詳細資訊，請參閱 [Amazon SageMaker Debugger](https://docs.aws.amazon.com/sagemaker/latest/dg/train-debugger.html)。

## 批次大小
<a name="data-parallel-config-batch-size"></a>

在分散式訓練中，隨著新增更多節點，批次大小應按比例增加。若要在訓練任務中新增更多節點並增加全域批次大小時，同時提高收斂速度，請提升學習速率。

實現此目標的一個方法是使用逐步學習速率暖機，其中隨著訓練任務的進展，學習速率會從小到大的值逐步提升。此逐步提升可避免突然增加學習速率，提供在訓練開始時運作狀態良好的收斂。例如，您可以使用*線性擴展規則*，其中每當最低批次大小乘以 k 時，學習速率也會乘以 k。要瞭解更多關於這種技術的資訊，請參閱研究論文[準確的大型微型批量 SGD：在 1 小時內訓練 ImageNet](https://arxiv.org/pdf/1706.02677.pdf), 第 2 和第 3 節。

## 自訂 MPI 選項
<a name="data-parallel-config-mpi-custom"></a>

SageMaker AI 分散式資料平行程式庫採用訊息傳遞介面 (MPI)，這是管理高效能叢集中節點之間通訊的常用標準，並使用 NVIDIA 的 NCCL 程式庫進行 GPU 層級通訊。當您將資料平行程式庫與 TensorFlow 或 Pytorch `Estimator` 搭配使用時，個別容器會設定 MPI 環境，並執行 `mpirun` 指令以啟動叢集節點上的任務。

您可以使用 `Estimator` 中的 `custom_mpi_options` 參數來設定自訂 MPI 作業。在此欄位中傳遞的任何 `mpirun` 旗標都會新增至 `mpirun` 命令，並由 SageMaker AI 執行以進行訓練。例如，您可以使用下列項目來定義 `Estimator` 的 `distribution` 參數，以便在程式開始時使用 [https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html#nccl-debug](https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html#nccl-debug) 變數列印 NCCL 版本：

```
distribution = {'smdistributed':{'dataparallel':{'enabled': True, "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION"}}}
```

## 使用 Amazon FSx 並設定最佳儲存和輸送容量
<a name="data-parallel-config-fxs"></a>

在具有分散式資料平行處理的多個節點上訓練模型時，強烈建議您使用 [FSx for Lustre](https://docs.aws.amazon.com/fsx/latest/LustreGuide/what-is.html)。Amazon FSx 是可擴展且高效能的儲存服務，支援具有更快輸送量的共用檔案儲存。使用 Amazon FSx 進行大規模儲存，您可以在運算節點之間實現更快的資料載入速度。

通常，透過分散式資料平行處理，您會預期總訓練輸送量幾乎隨著 GPU 數量線性擴展。但是，如果您使用非最佳化的 Amazon FSx 儲存，則訓練效能可能會因為 Amazon FSx 輸送量較低而降低。

例如，如果您使用具有最低 1.2 TiB 儲存容量[的 Amazon FSx 檔案系統的 **SCRACCH\$12** 部署類型](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html#fsx-aggregate-perf)，則 I/O 輸送容量為每秒 240 MB。Amazon FSx 儲存的運作方式，可讓您指派實體儲存裝置，指派的裝置越多，您獲得的輸送量就越大。SRATCH\$12 類型的最小儲存增加量為 1.2 TiB，對應的輸送量增益為 240 MB/秒。

假設您有一個模型，可以在超過 100 GB 資料集的 4 節點叢集上進行訓練。使用針對叢集最佳化的特定批次大小，假設模型可以在大約 30 秒內完成一個週期。在這種情況下，所需的最低 I/O 速度約為每秒 3 Gb (100 GB/30 秒)。這顯然是比 240 MB/秒 更高的較高輸送量要求。使用有限的 Amazon FSx 容量，將分散式訓練任務擴展到更大的叢集，可能會加重 I/O 瓶頸的問題；模型訓練輸送量可能會隨著快取的建置而改善，但 Amazon FSx 輸送量仍然存在瓶頸。

為了減輕此類 I/O 瓶頸問題，您應該增加 Amazon FSx 儲存大小，以獲得更高的輸送容量。通常，為了找到最佳的 I/O 輸送量，您可以嘗試使用不同的 Amazon FSx 輸送容量，指派等於或稍低於預估的輸送量，直到您發現其足以解決 I/O 瓶頸問題為止。在上述範例中，具有每秒 2.4 GB 輸送量和 67 GB RAM 快取的 Amazon FSx 儲存就已足夠。如果該檔案系統具有最佳輸送量，則模型訓練輸送量應立即達到最大值，或在快取已建置的第一個週期之後達到最大值。

要瞭解有關如何增加 Amazon FSX 儲存和部署類型的更多資訊，請參閱 *Amazon FSx for Lustre 文件*：
+  [如何增加儲存容量](https://docs.aws.amazon.com/fsx/latest/LustreGuide/managing-storage-capacity.html#increase-storage-capacity) 
+  [彙總檔案系統效能](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html#fsx-aggregate-perf) 