SageMaker 分散式模型平行程度最佳作法 - Amazon SageMaker

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

SageMaker 分散式模型平行程度最佳作法

當您使用 SageMaker 模型 parallel 程式庫執行分散式訓練工作時,請遵循下列準則。

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

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

提示

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

使用大型 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 模型 parallel 資料庫的特徵之前,請先檢閱 SageMaker 分散式模型平行程式庫組態提示和缺陷

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

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

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

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

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

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

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

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

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

許可

若要使用模型平行處理原則或SageMaker 分散式訓練範例筆記本來執行訓練工作,請確定您的 IAM 角色具有正確的許可,例如: SageMaker