SageMaker 分散式模型平行處理最佳實務 - Amazon SageMaker AI

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

SageMaker 分散式模型平行處理最佳實務

當您使用 SageMaker 模型平行程式庫執行分散式訓練任務時,請遵循下列指南。

為指定的模型設定正確組態

擴展模型時,我們建議您依序瀏覽以下清單。每個清單項目都討論了使用程式庫技術以及可能出現的權衡的優勢。

提示

如果模型使用程式庫功能的子集運作良好,新增更多的模型平行處理或節省記憶體功能通常不會改善效能。

使用大型 GPU 執行個體類型
  • 在模型平行處理範圍中,最好使用具有大型 GPU 記憶體的強大執行個體來處理模型平行處理操作所產生的額外負荷,例如跨多個 GPU 分割模型。我們建議使用 ml.p4dml.p3dn 執行個體來訓練大型 DL 模型。這些執行個體也配備 Elastic Fabric Adapter (EFA),提供較高的網路頻寬,並可進行透過模型平行處理的大規模訓練。

分片最佳化工具狀態
  • 分片最佳化工具狀態的影響取決於資料平行處理排名的數量。通常,較高的資料平行處理程度 (與運算節點的大小成正比) 可以改善記憶體使用量效率。

    當您想要縮減叢集時,請務必檢查最佳化工具狀態分片組態。例如,具有最佳化工具狀態分片的大型 DL 模型適合具有 16 個 GPU 的運算叢集 (例如,兩個 p4d 或 p4de 執行個體),可能不一定適合具有 8 個 GPU 的節點 (例如,單一 P4d 或 p4de 執行個體)。這是因為 8 個 GPU 的合併記憶體低於 16 個 GPU 的合併記憶體,而每個 GPU 分片 8 個 GPU 所需的記憶體也高於在 16 GPU 案例中每個 GPU 分片的記憶體。因此,增加的記憶體需求可能不適合較小的叢集。

    如需更多詳細資訊,請參閱 最佳化工具狀態碎片

啟用檢查點
  • 使用一組模組的啟用檢查點可以改善記憶體效率。您分組的模組越多,記憶體使用量就越有效率。當建立層的檢查點循序模組時,smp.set_activation_checkpointing 函式的 strategy 引數將分組層以建立檢查點。例如,將兩個或以上的層分組以進行檢查點,比一次一層檢查點的記憶體效率更好,而且這會犧牲額外運算時間以減少記憶體使用量。

    如需更多詳細資訊,請參閱 啟用檢查點

張量平行
  • 張量平行處理程度應為 2 次方 (2、4、8、...、2 n),其中最大程度必須等於每個節點的 GPU 數量。例如,如果您使用具有 8 個 GPU 的節點,張量平行程度的可能數字為 2、4 和 8。對於張量平行程度,我們不建議任意數字 (例如 3、5、6 和 7)。當您使用多個節點時,錯誤設定張量平行處理程度可能導致跨節點執行張量平行處理;這會增加跨節點啟用通訊所產生的重大負荷,而且運算成本可能會變得非常昂貴。

    如需更多詳細資訊,請參閱 張量平行處理

跨節點的管道平行處理
  • 您可以在單一節點內和跨多個節點內執行管道平行處理。當您將管道平行處理與張量平行處理結合使用時,建議您跨多個節點執行管道平行處理,並在個別節點內保持張量平行處理。

  • 管道平行處理具有以下三個旋鈕:microbatchesactive_microbatchesprescaled_batch

    • 當您將張量平行處理與管道平行處理搭配使用時,建議您啟用 prescaled_batch,藉此增加每個模型平行群組的批次大小,以便有效率地管線傳輸。啟用 prescaled_batch 後,訓練指令碼中設定的批次大小,會成為每個沒有 prescaled_batch 的排名設定批次大小乘以 tp_size

    • 增加的 microbatches 數量有助於達成有效的管線傳輸和更好的效能。請注意,有效的微批次大小是批次大小除以微批次數量。如果在保持批次大小常數不變的同時,增加微批次的數量,則每個微批次處理較少的範例。

    • active_microbatches 的數量是在管道傳輸過程中同步處理的微批次的最大數量。對於處理中的每個啟動中微批次,其啟用和漸層都會佔用 GPU 記憶體。因此,增加 active_microbatches 會佔用更多 GPU 記憶體。

  • 如果 GPU 和 GPU 記憶體使用量過低,請在管道傳輸期間增加 active_microbatches 以更好地平行化。

  • 如需如何將張量平行處理與管道平行處理搭配使用的更多相關資訊,請參閱張量平行處理結合管道平行處理

  • 若要尋找上述參數的描述,請參閱 SageMaker Python SDK 文件中的 smdistributed 參數

卸載啟用至 CPU
  • 請確認這用於與啟用檢查點和管線平行處理組合使用。若要確保卸載和預先載入在背景中進行,請為微批次參數指定大於 1 的值。

  • 當卸載啟用時, 你可能能夠增加 active_microbatches,而有時與微批次的總數相符。這取決於對哪些模組執行檢查點,以及模型的分割方式。

    如需更多詳細資訊,請參閱 啟用卸載

參考組態

SageMaker 模型平行訓練團隊根據使用 GPT-2 模型的實驗、序列長度 512 以及 50,000 個字彙大小,提供下列參考點。

模型參數數量 執行個體類型 管道平行處理 張量平行處理 最佳化工具狀態分片 啟用檢查點 預先擴充批次 批次大小
10 億 16 ml.p4d.24xlarge 1 4 True 每個轉換器層 True batch_size=40
30 億 16 ml.p4d.24xlarge 1 8 True 每個轉換器層 True batch_size=32
60 億 32 ml.p4d.24xlarge 2 8 True 每個轉換器層 True batch_size=56, microbatches=4, active_microbatches=2

您可以從上述組態中推斷,以估算模型組態的 GPU 記憶體使用量。例如,如果您增加 100 億個參數模型的序列長度,或將模型的大小增加到 200 億,則可能需要先降低批次大小。如果模型仍然不符合,請嘗試增加張量平行處理程度。

修改訓練指令碼

  • 在訓練指令碼中使用 SageMaker 模型平行處理程式庫功能之前,請先檢閱 SageMaker 分散式模型平行化程式庫組態提示和缺陷

  • 若要更快地啟動訓練任務,請使用 SageMaker AI 本機模式。這可協助您在 SageMaker 筆記本執行個體上快速執行訓練任務。根據執行 SageMaker 筆記本執行個體的機器學習 (ML) 執行個體規模,您可能需要透過變更模型組態 (例如隱藏寬度、轉換器層數和注意力標題) 來調整模型大小。在使用大型叢集訓練完整模型之前,先驗證已縮減的模型是否在筆記本執行個體上執行良好。

使用 SageMaker AI 主控台和 Amazon CloudWatch 監控和記錄訓練任務

若要監控系統層級指標 (例如 CPU 記憶體使用率、GPU 記憶體使用率和 GPU 使用率),請使用透過 SageMaker AI 主控台提供的視覺效果。

  1. 在左側導覽窗格中,選擇訓練

  2. 選擇 Training jobs (訓練任務)

  3. 在主窗格中,選擇您要查看其更多詳細資訊的訓練任務名稱。

  4. 瀏覽主窗格,並找到監視器區段以查看自動化視覺效果。

  5. 若要查看訓練任務日誌,請選擇監視器區段中的檢視日誌。您可以在 CloudWatch 中存取訓練任務的分散式訓練任務日誌。如果您已啟動多節點分散式訓練,您應該會看到多個日誌串流,其標記格式為 algo-n-1234567890algo-1 日誌串流會追蹤主節點 (第 0 個) 的訓練日誌。

如需更多詳細資訊,請參閱 用於監控和分析訓練任務的 Amazon CloudWatch 指標

許可

若要使用模型平行處理或 SageMaker 分散式訓練範例筆記本執行 SageMaker 訓練任務,請確認您有 IAM 角色的正確許可,例如: