本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
張量平行處理
張量平行處理是模型平行處理類型,其中特定模型權重、漸層與最佳化工具狀態會跨裝置分割。與保持個別權重完好無損的管道平行處理相比,但會將一組權重、梯度或最佳化工具分割在裝置之間,張量平行處理會碎片化個別權重。這通常涉及特定作業、模組或模型層的分散式運算。
如果單一參數耗用大部分GPU記憶體 (例如具有大型詞彙大小的大型內嵌資料表,或具有大量類別的大型 Softmax 層),則需要 Tensor 平行處理。在這種情況,將此大型張量或作業視為原子單位不具效率,且會阻礙記憶體負載的平衡。
SMP v2 與 Transformer Engine
實際上,張量平行處理在下列情況下特別有用。
-
當訓練內容較長時,這會導致FSDP單獨使用高啟動記憶體。
-
使用超大型叢集進行訓練時,全域批次大小超過所需的限制。
Hugging Face Transformer SMP 模型與張量平行處理相容
SMP v2 目前為下列 Hugging Face 轉換器模型提供張量平行處理支援。
-
GPT-NeoX
-
Llama 2
如需在這些模型上套用張量平行處理的參考組態,請參閱 組態提示。
設定張量平行處理
對於 tensor_parallel_degree
,您可以選擇張量平行處理程度的值。值必須平均除以叢集GPUs中的 數目。例如,若要在搭配 8 使用執行個體時碎片化模型GPUs,請選擇 2、4 或 8。我們建議您從小數字開始,並逐漸增加,直到模型符合GPU記憶體。
下列程式碼片段說明如何將SMP初始化模組新增至torch.sagemaker.init()
訓練指令碼,並針對訓練任務啟動器設定JSON格式的SMP組態字典,同時遵循 中介紹的兩步驟程序使用 SageMaker 模型平行處理程式庫 v2。您不需要對 PyTorch 模型或PyTorch FSDPtensor_parallel_degree
和 random_seed
參數的詳細資訊,請參閱 SMPv2 核心功能配置參數。
SMP 組態
{ "tensor_parallel_degree": 8, "random_seed": 0 }
在您的訓練指令碼中
使用 初始化torch.sagemaker.init()
以啟用 SMP v2,並使用 torch.sagemaker.transform 包裝模型API。
import torch.sagemaker as tsm tsm.init() from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_config(..) model = tsm.transform(model)
儲存和載入 Hugging Face Transformer 檢查點
SMP 程式庫轉換模型後,會變更模型的狀態字典 (state_dict
)。這表示模型與原始 Hugging Face Transformer 檢查點功能不相容。為了處理此問題,程式SMP庫提供在 Hugging Face Transformer 表示法中APIs儲存轉換模型的檢查點,以及torch.sagemaker.transform
API載入 Hugging Face Transformer 模型檢查點以進行微調。
如需在使用 SMP v2 的張量平行處理功能時儲存檢查點的詳細資訊,請參閱 使用 進行檢查點 SMP。
如需使用 SMP v2 張量平行處理功能微調模型的詳細資訊,請參閱 微調。