

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 上下文并行性
<a name="model-parallel-core-features-v2-context-parallelism"></a>

*上下文并行性*是一种模型并行性，它沿序列维度对模型激活进行分区。其他[序列并行性](https://arxiv.org/abs/2205.05198)技术只对 `LayerNorm` 和 `RMSNorm` 进行分区，而上下文并行性则不同，它沿着序列维度对网络输入和所有中间激活进行分区。

SMP v2 与 Transform [er Engin](https://docs.nvidia.com/deeplearning/transformer-engine/index.html) e 集成以实现上下文并行性，并且可以与 FSDP 和 SMP 结合 PyTorch使用。[张量并行性](model-parallel-core-features-v2-tensor-parallelism.md)您可以同时启用所有三个并行性系统进行模型训练。上下文并行性有利于训练具有大激活规模和长序列长度的模型。它允许每台设备只计算序列维度上的部分分数和输出，从而加快了注意力分数和注意力输出的计算。虽然张量并行通过沿隐藏维度进行分区也能加快计算速度，但上下文并行性的优势更大，因为计算需求随序列维度的增加而呈四倍增长。

## Hugging Face 转换器模型兼容 SMP 上下文并行性
<a name="model-parallel-core-features-v2-context-parallelism-supported-models"></a>

SMP v2 目前可为以下 Hugging Face 转换器模型提供上下文并行性支持。
+ 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`参数设置一个整数值，该值将集群 GPUs 中的数量平均分开。例如，如果您有一个 8 GPU 实例，请在 `context_parallel_degree` 中使用 2、4 或 8。我们建议从较小的 `context_parallel_degree` 值开始，逐渐增加，直到模型适合 GPU 内存所需的输入序列长度。

以下代码片段显示了如何在训练脚本中添加 SMP 初始化模块 `torch.sagemaker.init()`，并按照 [使用 SageMaker 模型并行度库 v2](model-parallel-use-api-v2.md) 中介绍的两步流程，为训练作业启动器设置 JSON 格式的 SMP 配置字典。您无需对 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`实现期间，该实现使用 peer-to-peer send-receive 调用来累积键值，并异步运行，允许与计算重叠。 `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
}
```