

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

# 內容平行化
<a name="model-parallel-core-features-v2-context-parallelism"></a>

*內容平行化*是一種模型平行化，可沿著序列維度分割模型啟用。與僅分割 `LayerNorm` 和 `RMSNorm` 的其他[序列平行化](https://arxiv.org/abs/2205.05198)技術不同，內容平行化會沿著序列維度分割網路輸入和所有中繼啟用。

SMP v2 與[轉換器引擎](https://docs.nvidia.com/deeplearning/transformer-engine/index.html)整合，以實現內容平行化，並且可以與 PyTorch FSDP 和 SMP 搭配使用[張量平行化](model-parallel-core-features-v2-tensor-parallelism.md)。您可以同時啟用這三個平行化以進行模型訓練。內容平行化適用於具有大型啟用大小和長序列長度的訓練模型。它透過允許每個裝置僅沿著序列維度計算一部分分數和輸出，加速計算注意力分數和注意力輸出。雖然張量平行化也透過沿著隱藏維度的分割加速運算，但內容平行化的優點更重要，因為運算需求隨序列維度以四分位數增加。

## Hugging Face Transformer 模型與 SMP 內容平行化相容
<a name="model-parallel-core-features-v2-context-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)

## 設定內容平行化
<a name="model-parallel-core-features-v2-context-parallelism-configure"></a>

將整數值設定為 `context_parallel_degree` 參數，以平均分配叢集中的 GPU 數量。例如，如果您有 8-GPU 執行個體，對於 `context_parallel_degree` 請使用 2、4 或 8。我們建議從小的 `context_parallel_degree` 值開始逐步增加，直到模型符合 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) 組態進行任何變更。如需 `context_parallel_degree` 參數的詳細資訊，請參閱 [SMP v2 核心功能組態參數](distributed-model-parallel-v2-reference.md#distributed-model-parallel-v2-reference-init-config)。

### 在您的訓練指令碼中
<a name="model-parallel-core-features-v2-context-parallelism-configure-in-script"></a>

在[步驟 1](model-parallel-use-api-v2.md#model-parallel-adapt-pytorch-script-v2) 中，使用 `torch.sagemaker.init()`初始化指令碼以啟用 SMP v2，並使用 [`torch.sagemaker.transform`](distributed-model-parallel-v2-reference.md#model-parallel-v2-torch-sagemaker-reference-transform) API 包裝模型。

從 SMP v2.6.0 開始，您可以使用引數 `cp_comm_type` 來判斷要使用的內容平行化實作。SMP 程式庫目前支援兩種實作：`p2p` 和 `all_gather`。`p2p` 實作會在注意力實作期間使用點對點收發呼叫來累積金鑰值，並以非同步方式執行，允許與運算重疊。`all_gather` 實作則改用 `AllGather` 集體操作，並以同步方式執行。

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

from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_config(..)
model = tsm.transform(model, cp_comm_type="p2p")
```

### SMP 組態
<a name="model-parallel-core-features-v2-context-parallelism-configure-in-estimator"></a>

在[步驟 2](model-parallel-use-api-v2.md#model-parallel-launch-a-training-job-v2) 中，將下列參數新增至 SageMaker PyTorch 估算器的 SMP 組態字典。

```
{   
    ..., # other SMP config parameters
    "context_parallel_degree": 2
}
```