

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

# 張量平行化
<a name="model-parallel-core-features-v2-tensor-parallelism"></a>

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

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

SMP v2 與[轉換器引擎](https://docs.nvidia.com/deeplearning/transformer-engine/index.html)整合，以實作張量平行化，並在 PyTorch FSDP APIs 上執行。您可以同時啟用 PyTorch FSDP 和 SMP 張量平行化，並判斷最佳模型平行化，以獲得最佳效能。

實際上，在下列案例中，張量平行化特別有用。
+ 當使用長上下文的內容進行訓練時，這會導致單獨使用 FSDP 的高啟用記憶體。
+ 使用超大型叢集進行訓練時，全域批次大小超過所需的限制。

## Hugging Face Transformer 模型與 SMP 張量平行化相容
<a name="model-parallel-core-features-v2-tensor-parallelism-supported-models"></a>

SMP v2 目前為下列 Hugging Face Transformer 模型提供張量平行化支援。
+ GPT-NeoX
+ Llama 2
+ Llama 3
+ [Mistral 7B](https://huggingface.co/mistralai/Mistral-7B-v0.3)
+ [Mixtral 8x7B](https://huggingface.co/mistralai/Mixtral-8x7B-v0.1)
+ [Mixtral 8x22B](https://huggingface.co/mistralai/Mixtral-8x22B-v0.1)

如需在這些模型上套用張量平行化的參考組態，請參閱 [組態提示](model-parallel-best-practices-v2.md#model-parallel-best-practices-v2-config-tips)。

## 設定張量平行化
<a name="model-parallel-core-features-v2-tensor-parallelism-configuration"></a>

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

下列程式碼片段示範如何在訓練指令碼中新增 SMP 初始化模組 `torch.sagemaker.init()`，以及設定訓練任務啟動器的 JSON 格式 SMP 組態字典，同時遵循[使用 SageMaker 模型平行化程式庫 v2](model-parallel-use-api-v2.md) 中介紹的兩個步驟程序。您不需要對 PyTorch 模型或 [PyTorch FSDP](https://pytorch.org/docs/stable/fsdp.html#module-torch.distributed.fsdp) 組態進行任何變更。如需 `tensor_parallel_degree` 和 `random_seed` 參數的詳細資訊，請參閱 [SMP v2 核心功能組態參數](distributed-model-parallel-v2-reference.md#distributed-model-parallel-v2-reference-init-config)。

**SMP 組態**

```
{
    "tensor_parallel_degree": 8,
    "random_seed": 0 
}
```

**在您的訓練指令碼中**

使用 `torch.sagemaker.init()` 初始化以啟用 SMP v2，並使用 [`torch.sagemaker.transform`](distributed-model-parallel-v2-reference.md#model-parallel-v2-torch-sagemaker-reference-transform) API 包裝您的模型。

```
import torch.sagemaker as tsm
tsm.init()

from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_config(..)
model = tsm.transform(model)
```

## 儲存和載入 Hugging Face Transformer 檢查點
<a name="model-parallel-core-features-v2-tensor-parallelism-checkpoints"></a>

SMP 程式庫轉換模型後，會變更模型的狀態字典 (`state_dict`)。這表示模型與原始 Hugging Face Transformer 檢查點功能不相容。為了處理此問題，SMP 程式庫提供 APIs，以將轉換模型的檢查點儲存為 Hugging Face Transformer 表示法，以及用於載入 Hugging Face Transformer 模型檢查點以進行微調的 `torch.sagemaker.transform` API。

如需在使用 SMP v2 的張量平行化功能時儲存檢查點的詳細資訊，請參閱 [使用 SMP 進行檢查點](model-parallel-core-features-v2-checkpoints.md)。

如需使用 SMP v2 張量平行化功能微調模型的詳細資訊，請參閱 [微調](model-parallel-core-features-v2-fine-tuning.md)。