

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

# Amazon SageMaker AI 分散式資料平行化程式庫常見問答集
<a name="data-parallel-faq"></a>

使用下列項目來尋找有關 SMDDP 程式庫常見問題的答案。

**問：使用程式庫時，如何管理 `allreduce` 支援 CPU 執行個體？ 我是否必須建立異質 CPU-GPU 叢集，或 SageMaker AI 服務是否會為使用 SMDDP 程式庫的任務建立額外的 C5？**

SMDDP 程式庫僅支援 GPU 執行個體，更具體地說，是具有 NVIDIA A100 GPU 和 EFA 的 P4d 和 P4de 執行個體。不會啟動其他 C5 或 CPU 執行個體；如果您的 SageMaker AI 訓練任務是 8個節點 P4d 叢集，則僅會使用 8 個 `ml.p4d.24xlarge` 執行個體。不會佈建其他執行個體。

**問：我有一個需要 5 天的訓練任務，在具有一組超參數 H1 (學習速率、批次大小、最佳化工具等) 的單一 `ml.p3.24xlarge` 執行個體上執行。使用 SageMaker AI 的資料平行處理程式庫和五倍大的叢集，是否足以達到大約五倍的加速？ 還是我在啟動 SMDDP 程式庫後重新檢視其訓練超參數？**

程式庫會變更總體批次大小。新的總體批次大小會隨著使用的訓練執行個體數量線性擴展。因此，必須變更超參數 (例如學習速率) 才能確保整合。

**問：SMDDP 程式庫是否支援 Spot？**

是。您可以使用受管 Spot 訓練。您可以在 SageMaker 訓練任務中指定檢查點檔案的路徑。如同[在 TensorFlow 訓練指令碼中使用 SMDDP 程式庫 (已棄用)](data-parallel-modify-sdp-tf2.md)和[在 PyTorch 訓練指令碼中使用 SMDDP 程式庫](data-parallel-modify-sdp-pt.md)的最後一個步驟中所述，您可以在其訓練指令碼中儲存並還原檢查點。

**問：SMDDP 程式庫是否在單一主機、多裝置設定中相關？**

該程式庫可用於單一主機多裝置訓練，但程式庫僅在多主機訓練中提供效能改進。

**問：應該將訓練資料集儲存在哪裡？**

訓練資料集可儲存在 Amazon S3 儲存貯體或 Amazon FSx 磁碟機。請參閱[訓練工作的各種支援輸入檔案系統文件](https://sagemaker.readthedocs.io/en/stable/api/utility/inputs.html#sagemaker.inputs.FileSystemInput)。

**問：使用 SMDDP 程式庫時，是否必須在 FSx for Lustre 中提供訓練資料？ 是否可以使用 Amazon EFS 和 Amazon S3 嗎？**

我們通常建議您使用 Amazon FSx，因為其延遲較低且輸送量較高。如果您願意，您可以使用 Amazon EFS 或 Amazon S3。

**問：程式庫是否可與 CPU 節點搭配使用？** 

否。若要尋找 SMDDP 程式庫支援的執行個體類型，請參閱 [支援的執行個體類型](distributed-data-parallel-support.md#distributed-data-parallel-supported-instance-types)。

**問：SMDDP 程式庫目前在啟動時支援哪些架構和架構版本？** 

SMDDP 程式庫目前支援 PyTorch 1.6.0 版或更新版本，以及 TensorFlow 2.3.0 版或更新版本。不支援 TensorFlow 1.x。有關 AWS 深度學習容器中封裝的 SMDDP 程式庫版本，請參閱[深度學習容器版本備註](https://docs.aws.amazon.com/deep-learning-containers/latest/devguide/dlc-release-notes.html)。

**問：程式庫是否支援 AMP？**

是，SMDDP 程式庫支援開箱即用的自動混合精確度 (AMP)。除了對訓練指令碼進行架構級修改之外，不需要額外的動作即可使用 AMP。如果梯度是 FP16，SageMaker AI 資料平行化程式庫會以 FP16 執行其 `AllReduce` 操作。有關將 AMP API 實施到訓練腳本的詳細資訊，請參閱以下資源：
+ [架構 - ](https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html#pytorch)*NVIDIA 深度學習效能文件中的 PyTorch*
+ [架構 - ](https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html#tensorflow)*NVIDIA 深度學習效能文件中的 TensorFlow*
+ *NVIDIA 開發人員文件*中[適用於深度學習的自動混合精確度](https://developer.nvidia.com/automatic-mixed-precision)
+ [在 *PyTorch 部落格*介紹原生 PyTorch 自動混合精度，以加快 NVIDIA GPU 的訓練速度](https://pytorch.org/blog/accelerating-training-on-nvidia-gpus-with-pytorch-automatic-mixed-precision/)
+ *TensorFlow 文件*中的 [TensorFlow 混合精確度 API](https://www.tensorflow.org/guide/mixed_precision)

**問：如何識別分散式訓練任務是否因 I/O 瓶頸而減慢速度？**

對於較大的叢集，訓練任務需要更多的 I/O 輸送量，因此訓練輸送量可能需要更長的時間 (更多週期) 才能提升到最大的效能。這表示 I/O 存在瓶頸，並且隨著節點擴展 (較高輸送量需求和更複雜的網路拓撲)，更難以建立快取。有關在雲手錶上監控亞馬遜 FSX 吞吐量的更多資訊，請參閱[監控 FSx for Lustre](https://docs.aws.amazon.com/fsx/latest/LustreGuide/monitoring_overview.html)在*FSx for Lustre 用戶指南*。

**問：執行具有資料平行處理的分散式訓練任務時，如何解決 I/O 瓶頸？**

如果您使用的是 Amazon S3，我們強烈建議您使用 Amazon FSx 做為資料管道。如果您已經在使用 Amazon FSx，但仍有 I/O 瓶頸問題，您可能已經設定 Amazon FSx 檔案系統為低 I/O 輸送量和小儲存容量。有關如何估計和選擇正確的 I/O 吞吐量容量大小的詳細資訊，請參閱[使用 Amazon FSx 並設定最佳儲存和輸送容量](data-parallel-config.md#data-parallel-config-fxs)。

**問：(適用於程式庫 1.4.0 版或更新版本) 如何解決初始化程序群組時的 `Invalid backend` 錯誤。**

如果在呼叫 `init_process_group` 時遇到錯誤訊息 `ValueError: Invalid backend: 'smddp'`，這是由於 SMDDP 程式庫 1.4.0 版及更新版本中的突破性變更。您必須匯入程式庫的 PyTorch 用戶端 (`smdistributed.dataparallel.torch.torch_smddp`)，該用戶端會註冊 `smddp` 為 PyTorch 後端。如需詳細資訊，請參閱 [在 PyTorch 訓練指令碼中使用 SMDDP 程式庫](data-parallel-modify-sdp-pt.md)。

**問：(適用於 SMDDP 程式庫 1.4.0 版或更新版本)，我想呼叫 [https://pytorch.org/docs/stable/distributed.html](https://pytorch.org/docs/stable/distributed.html) 介面的集合基本元素。`smddp` 後端支援哪些基本元素？**

在 v1.4.0 中，SMDDP 程式庫支援 `torch.distributed` 介面的 `all_reduce`、`broadcast`、`reduce`、`all_gather` 和 `barrier`。

**問：(適用於 SMDDP 程式庫 1.4.0 版或更新版本) 這個新的 API 是否可與其他自訂 DDP 類別或程式庫 (如 Apex DDP) 搭配使用？**

SMDDP 程式庫會與使用 `torch.distribtued` 模組的其他第三方分散式資料平行程式庫和架構實作一起測試。只要 SMDDP 程式庫支援自訂 DDP 類別所使用的集合操作，就可以將 SMDDP 程式庫搭配自訂 DDP 類別一起使用。有關支援集合的清單，請參閱上述問題。如果您有這些使用案例並需要進一步的支援，請透過[AWS 支援中心](https://console.aws.amazon.com/support/)或 [Amazon SageMaker AI 的 AWS 開發人員論壇](https://forums.aws.amazon.com/forum.jspa?forumID=285)與 SageMaker AI 團隊聯絡。

**問：SMDDP 程式庫是否支援自攜容器 (BYOC) 選項？ 如果有，我該如何透過編寫自訂 Dockerfile 來安裝程式褲，並執行分散式訓練任務？**

如果您想要將 SMDDP 程式庫及其最小相依性整合到您自己的 Docker 容器，BYOC 是正確方法。您可以使用程式庫的二進位檔案建置自己的容器。建議的程序是使用程式庫及其相依性編寫自訂 Dockerfile、建置 Docker 容器、在 Amazon ECR 中託管，然後使用 ECR 映像 URI 啟動使用 SageMaker AI 一般估算器類別的訓練任務。如需有關如何使用 SMDDP 程式庫，在 SageMaker AI 中為分散式訓練準備自訂 Dockerfile 的更多指示，請參閱[使用 SageMaker AI 分散式資料平行程式庫建立您自己的 Docker 容器](data-parallel-bring-your-own-container.md)。