本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
最佳化工具狀態碎片是有用的節省記憶體技術,可跨資料平行裝置群組碎片化最佳化工具狀態 (描述最佳化工具狀態的權重集)。每當您使用具狀態的最佳化工具 (例如 Adam) 或 FP16 最佳化工具 (儲存參數的 FP16 與 FP32 副本) 時,都可使用最佳化工具狀態碎片。
注意
最佳化工具狀態碎片適用 SageMaker 模型平行處理程式庫 v1.6.0 及更高版本的 PyTorch。
如何使用最佳化工具狀態碎片
您可以透過在 modelparallel
組態 設定 "shard_optimizer_state": True
來開啟最佳化工具狀態碎片。
當開啟此功能時,程式庫會基於資料平行處理程度分割模型參數集。對應於第 i
個分區的漸層僅會於第 i
個資料平行等級縮減。在第一次呼叫 smp.step
裝飾項目函式結束時,由 smp.DistributedOptimizer
包裝的最佳化工具會重新定義其參數,以便僅限對應目前資料平行等級分區的參數。重新定義的參數稱為虛擬參數,並與原始參數共用基礎儲存。在第一次呼叫 optimizer.step
期間,會基於這些重新定義的參數建立最佳化工具狀態,這些參數會因為原始分割而進行碎片處理。在更新最佳化工具之後,AllGather 作業 (做為 optimizer.step
呼叫的一部分) 會跨資料平行等級執行,以達到一致參數狀態。
提示
當資料平行處理的程度大於 1 且模型具十億個以上的參數時,最佳化工具狀態碎片很有幫助。
資料平行處理的程度由 (processes_per_host *
instance_count / pipeline_parallel_degree)
計算,而 smp.dp_size()
函式會在背景處理大小。
設定 SageMaker PyTorch 估算器
mpi_options = {
"enabled" : True,
"processes_per_host" : 8, # 8 processes
"custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none "
}
smp_options = {
"enabled":True,
"parameters": {
"microbatches": 4,
"pipeline_parallel_degree": 2, # alias for "partitions"
"placement_strategy": "cluster",
"tensor_parallel_degree": 2, # tp over 2 devices
"ddp": True,
"shard_optimizer_state": True
}
}
調整 PyTorch 訓練指令碼
請參閱結合管道平行處理的張量平行處理區段的調整 PyTorch 訓練指令碼。此指令碼不需要其他修改。