SageMaker 分散式資料平行程式庫的設定秘訣 - Amazon SageMaker

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

SageMaker 分散式資料平行程式庫的設定秘訣

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

資料預先處理

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

單節點與多個節點

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

使用偵錯工具調試調整效

您可以使用 Amazon SageMaker 偵錯工具在訓練期間監控和視覺化 CPU 和 GPU 使用率以及其他感興趣的指標。您可以使用偵錯工具內建規則,以監控運算效能問題,例如 CPUBottleneckLoadBalancingLowGPUUtilization。當您定義 Amazon SageMaker Python 開發套件估算器時,您可以使用偵錯工具組態來指定這些規則。如果您使用 AWS CLI 和 AWS SDK for Python (Boto3) 進行訓練 SageMaker,則可以啟用偵錯工具,如使用 Amazon SageMaker API 設定 SageMaker 偵錯工具所示。

若要查看在 SageMaker 訓練工作中使用偵錯工作的範例,您可以參考筆記本範例 GitHub 存放庫中的其中一個SageMaker 筆記本範例。若要進一步了解偵錯工具,請參閱 Amazon SageMaker 偵錯工具

批次大小

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

實現此目標的一個方法是使用逐步學習速率暖機,其中隨著訓練任務的進展,學習速率會從小到大的值逐步提升。此逐步提升可避免突然增加學習速率,提供在訓練開始時運作狀態良好的收斂。例如,您可以使用線性擴展規則,其中每當最低批次大小乘以 k 時,學習速率也會乘以 k。要了解有關此技術的更多信息,請參閱研究 paper,準確,大型小批量 SGD:1 小時 ImageNet 的培訓,第 2 部分和第 3 節。

自訂 MPI 選項

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

您可以使用 Estimator 中的 custom_mpi_options 參數來設定自訂 MPI 作業。在此欄位中傳遞的任何mpirun旗標都會新增至命mpirun令,並由執行以 SageMaker 進行訓練。例如,您可以使用下列項目來定義 Estimatordistribution 參數,以便在程式開始時使用 NCCL_DEBUG 變數列印 NCCL 版本:

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

使用 Amazon FSx 並設定最佳儲存和輸送容量

在具有分散式資料平行處理的多個節點上培訓模型時,強烈建議您使用 FSx for Lustre。Amazon FSx 是可擴展且高效能的儲存服務,支援具有更快輸送量的共用檔案儲存。使用 Amazon FSx 進行大規模儲存,您可以在運算節點之間實現更快的資料載入速度。

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

例如,如果您使用具有最低 1.2 TiB 儲存容量的 Amazon FSx 檔案系統的 SCRACCH_2 部署類型,則 I/O 輸送容量為每秒 240 MB。Amazon FSx 儲存的運作方式,可讓您指派實體儲存裝置,指派的裝置越多,您獲得的輸送量就越大。SRATCH_2 類型的最小儲存增加量為 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 存儲和部署類型的更多信息,請參閱用於光澤文檔的亞馬遜 FSX