上下文并行性
上下文并行性是一种模型并行性,它沿序列维度对模型激活进行分区。其他序列并行性LayerNorm
和 RMSNorm
进行分区,而上下文并行性则不同,它沿着序列维度对网络输入和所有中间激活进行分区。
SMP v2 与 Transformer Engine
Hugging Face 转换器模型兼容 SMP 上下文并行性
SMP v2 目前可为以下 Hugging Face 转换器模型提供上下文并行性支持。
-
GPT-NeoX
-
Llama 2 和 Llama 3
配置上下文并行性
为 context_parallel_degree
参数设置一个整数值,平均分配集群中 GPU 的数量。例如,如果您有一个 8 GPU 实例,请在 context_parallel_degree
中使用 2、4 或 8。我们建议从较小的 context_parallel_degree
值开始,逐渐增加,直到模型适合 GPU 内存所需的输入序列长度。
以下代码片段显示了如何在训练脚本中添加 SMP 初始化模块 torch.sagemaker.init()
,并按照 使用 SageMaker 模型并行性库 v2 中介绍的两步流程,为训练作业启动器设置 JSON 格式的 SMP 配置字典。您无需对 PyTorch 模型或 PyTorch FSDPcontext_parallel_degree
参数的更多信息,请参阅 SMP v2 核心功能配置参数。
在您的训练脚本中
作为步骤 1 的一部分,使用 torch.sagemaker.init()
初始化脚本以激活 SMP v2,然后使用 torch.sagemaker.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 配置
作为步骤 2 的一部分,将以下参数添加到 SageMaker PyTorch 估算器的 SMP 配置字典中。
{ ..., # other SMP config parameters "context_parallel_degree": 2 }