張量平行處理 - Amazon SageMaker

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

張量平行處理

張量平行處理是模型平行處理類型,其中特定模型權重、漸層與最佳化工具狀態會跨裝置分割。與保持個別權重完好無損的管道平行處理相比,但會將一組權重、梯度或最佳化工具分割在裝置之間,張量平行處理會碎片化個別權重。這通常涉及特定作業、模組或模型層的分散式運算。

如果單一參數耗用大部分GPU記憶體 (例如具有大型詞彙大小的大型內嵌資料表,或具有大量類別的大型 Softmax 層),則需要 Tensor 平行處理。在這種情況,將此大型張量或作業視為原子單位不具效率,且會阻礙記憶體負載的平衡。

SMP v2 與 Transformer Engine 整合,以實作張量平行處理,並在 PyTorch FSDP 之上執行APIs。您可以同時啟用 PyTorch FSDPSMP和張量平行處理,並判斷最佳模型平行處理,以獲得最佳效能。

實際上,張量平行處理在下列情況下特別有用。

  • 當訓練內容較長時,這會導致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 FSDP組態進行任何變更。如需 tensor_parallel_degreerandom_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.transformAPI載入 Hugging Face Transformer 模型檢查點以進行微調。

如需在使用 SMP v2 的張量平行處理功能時儲存檢查點的詳細資訊,請參閱 使用 進行檢查點 SMP

如需使用 SMP v2 張量平行處理功能微調模型的詳細資訊,請參閱 微調