張量平行化 - Amazon SageMaker AI

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

張量平行化

張量平行化是模型平行化類型,其中特定模型權重、漸層與最佳化工具狀態會跨裝置分割。有別於管道平行化 (其可保持個別權重不變,但會分割權重),張量平行化則會分割個別權重。這通常涉及特定作業、模組或模型層的分散式運算。

如果單一參數使用多數 GPU 記憶體 (例如字彙量較大的大型嵌入資料表或具大量類別的大型 softmax 層),則需要張量平行化。在這種情況,將此大型張量或作業視為原子單位不具效率,且會阻礙記憶體負載的平衡。

SMP v2 與轉換器引擎整合,以實作張量平行化,並在 PyTorch FSDP APIs 上執行。您可以同時啟用 PyTorch FSDP 和 SMP 張量平行化,並判斷最佳模型平行化,以獲得最佳效能。

實際上,在下列案例中,張量平行化特別有用。

  • 當使用長上下文的內容進行訓練時,這會導致單獨使用 FSDP 的高啟用記憶體。

  • 使用超大型叢集進行訓練時,全域批次大小超過所需的限制。

Hugging Face Transformer 模型與 SMP 張量平行化相容

SMP v2 目前為下列 Hugging Face Transformer 模型提供張量平行化支援。

如需在這些模型上套用張量平行化的參考組態,請參閱 組態提示

設定張量平行化

對於 tensor_parallel_degree,您可以選取張量平行化程度的值。值必須平均除以叢集中的 GPU 數量。例如,若要在使用具有 8 個 GPU 的執行個體時分割模型,請選擇 2、4 或 8。我們建議您從較小的數字開始,並逐漸增加,直到模型符合 GPU 記憶體。

下列程式碼片段示範如何在訓練指令碼中新增 SMP 初始化模組 torch.sagemaker.init(),以及設定訓練任務啟動器的 JSON 格式 SMP 組態字典,同時遵循使用 SageMaker 模型平行化程式庫 v2 中介紹的兩個步驟程序。您不需要對 PyTorch 模型或 PyTorch FSDP 組態進行任何變更。如需 tensor_parallel_degreerandom_seed 參數的詳細資訊,請參閱 SMP v2 核心功能組態參數

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 程式庫提供 APIs,以將轉換模型的檢查點儲存為 Hugging Face Transformer 表示法,以及用於載入 Hugging Face Transformer 模型檢查點以進行微調的 torch.sagemaker.transform API。

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

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