本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
SageMaker 分散式模型平行程度最佳作法
當您使用 SageMaker 模型 parallel 程式庫執行分散式訓練工作時,請遵循下列準則。
為指定的模型設定正確組態
擴展模型時,我們建議您依序瀏覽以下清單。每個清單項目都討論了使用程式庫技術以及可能出現的權衡的優勢。
提示
如果模型使用程式庫功能的子集運作良好,新增更多的模型平行處理或節省記憶體功能通常不會改善效能。
使用大型 GPU 執行個體類型
-
在模型平行處理範圍中,最好使用具有大型 GPU 記憶體的強大執行個體來處理模型平行處理操作所產生的額外負荷,例如跨多個 GPU 分割模型。我們建議使用
ml.p4d
或ml.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)。當您使用多個節點時,錯誤設定張量平行處理程度可能導致跨節點執行張量平行處理;這會增加跨節點啟用通訊所產生的重大負荷,而且運算成本可能會變得非常昂貴。
如需詳細資訊,請參閱 張量平行處理。
跨節點的管道平行處理
-
您可以在單一節點內和跨多個節點內執行管道平行處理。當您將管道平行處理與張量平行處理結合使用時,建議您跨多個節點執行管道平行處理,並在個別節點內保持張量平行處理。
-
管道平行處理具有以下三個旋鈕:
microbatches
、active_microbatches
和prescaled_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 主控台
-
在左側導覽窗格中,選擇訓練。
-
選擇 Training jobs (訓練任務)。
-
在主窗格中,選擇您要查看其更多詳細資訊的訓練任務名稱。
-
瀏覽主窗格,並找到監視器區段以查看自動化視覺效果。
-
若要查看訓練任務日誌,請選擇監視器區段中的檢視日誌。您可以在中存取訓練工作的分散式訓練工作記錄 CloudWatch。如果您已啟動多節點分散式訓練,您應該會看到多個日誌串流,其標記格式為 algo-n-1234567890。algo-1 日誌串流會追蹤主節點 (第 0 個) 的訓練日誌。
如需詳細資訊,請參閱 監控和分析訓練任務的 Amazon CloudWatch 指標。
許可
若要使用模型平行處理原則或SageMaker 分散式訓練範例筆記本
-
若要使用 FSx for Lustre
,請新增 AmazonFSxFullAccess
。 -
若要使用 Amazon S3 做為資料管道,請新增
AmazonS3FullAccess
。 -
若要使用 Docker,請建置您自己的容器,然後將其推送到 Amazon ECR,新增
AmazonEC2ContainerRegistryFullAccess
。 -
要完全訪問使用整個 SageMaker 功能套件,請添加
AmazonSageMakerFullAccess
。