本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
SageMaker 分散式資料平行程式庫的設定秘訣
使用 SageMaker 分散式資料平行處理原則 (SMDDP) 程式庫之前,請先檢閱下列秘訣。此清單包含適用於跨架構的提示。
資料預先處理
如果您在訓練期間使用利用 CPU 的外部程式庫預先處理資料,則可能會遇到 CPU 瓶頸,因為 SageMaker 分散式資料 parallel 會使用 CPU 進行作業AllReduce
。您可以將預先處理步驟移至使用 GPU 的程式庫,或在訓練前完成所有預先處理,以改善訓練時間。
單節點與多個節點
我們建議您搭配多個節點使用此程式庫。此程式庫可搭配單一主機、多裝置設定 (例如,具有多個 GPU 的單一 ML 運算執行個體) 搭配使用;不過,當您使用兩個或多個節點時,程式庫的 AllReduce
操作可大幅提升效能。此外,在單一主機上,NVLink 已經有助於提升節點內部 AllReduce
效率。
使用偵錯工具調試調整效
您可以使用 Amazon SageMaker 偵錯工具在訓練期間監控和視覺化 CPU 和 GPU 使用率以及其他感興趣的指標。您可以使用偵錯工具內建規則,以監控運算效能問題,例如 CPUBottleneck
、LoadBalancing
和 LowGPUUtilization
。當您定義 Amazon SageMaker Python 開發套件估算器時,您可以使用偵錯工具組態來指定這些規則。如果您使用 AWS CLI 和 AWS SDK for Python (Boto3)
進行訓練 SageMaker,則可以啟用偵錯工具,如使用 Amazon SageMaker API 設定 SageMaker 偵錯工具所示。
若要查看在 SageMaker 訓練工作中使用偵錯工作的範例,您可以參考筆記本範例 GitHub 存放庫中的其中一個SageMaker 筆記本範例
批次大小
在分散式訓練中,隨著新增更多節點,批次大小應按比例增加。若要在訓練任務中新增更多節點並增加全域批次大小時,同時提高收斂速度,請提升學習速率。
實現此目標的一個方法是使用逐步學習速率暖機,其中隨著訓練任務的進展,學習速率會從小到大的值逐步提升。此逐步提升可避免突然增加學習速率,提供在訓練開始時運作狀態良好的收斂。例如,您可以使用線性擴展規則,其中每當最低批次大小乘以 k 時,學習速率也會乘以 k。要了解有關此技術的更多信息,請參閱研究 paper,準確,大型小批量 SGD:1 小時 ImageNet 的培訓
自訂 MPI 選項
SageMaker 分散式資料 parallel 程式庫採用訊息傳遞介面 (MPI),這是管理高效能叢集中節點之間通訊的常用標準,並使用 NVIDIA 的 NCCL 程式庫進行 GPU 層級通訊。當您將資料 parallel 程式庫與 TensorFlow 或 Pytorch 搭配使用時Estimator
,相應的容器會設定 MPI 環境,並執行mpirun
命令以啟動叢集節點上的工作。
您可以使用 Estimator
中的 custom_mpi_options
參數來設定自訂 MPI 作業。在此欄位中傳遞的任何mpirun
旗標都會新增至命mpirun
令,並由執行以 SageMaker 進行訓練。例如,您可以使用下列項目來定義 Estimator
的 distribution
參數,以便在程式開始時使用 NCCL_DEBUG
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: