AB
AiBoss
Wiki

什么是序列并行(Sequence Parallelism)?一种突破长序列训练显存限制的并行方法

序列并行是一种面向 Transformer 长序列训练的显存高效并行方法,由论文《Sequence Parallelism: Long Sequence Training from System Perspective》提出。它把输入序列切分成多个块分配到不同 GPU,配合环形自注意力(Ring Self-Attention)完成注意力计算,使单卡不再需要容纳整条序列,并可与数据并行、流水并行、张量并行组合成 4D 并行。

序列并行(Sequence Parallelism)是一种面向 Transformer 模型长序列训练的显存高效并行方法。它把一条输入序列切分成多个块,每个块交给对应的 GPU 处理,并通过环形通信与自注意力计算结合的方式完成注意力输出,从而让单张 GPU 不必再容纳整条序列。它要解决的问题是:自注意力的显存需求随序列长度呈二次增长,单卡显存很快成为训练更长序列的瓶颈。

为什么重要

Transformer 在各类任务上表现良好,但自注意力对序列长度的显存需求是二次的。在序列并行提出之前,应对长序列的主流思路多集中在算法层面,例如降低时间与空间复杂度、使用稀疏注意力等。这些工作虽然缓解了计算量,但从系统部署角度看,仍有一个隐含前提:整条序列的激活与中间结果需要放在单个设备上。序列越长,单卡显存越先触顶,训练规模就被硬件卡住。

与此同时,大模型训练已经普遍采用数据并行、流水并行、张量并行等并行方式。张量并行把单层参数切分到多卡,能降低模型状态显存,但序列维度上的激活仍主要由单卡承担。论文指出,序列并行的价值在于补上这一维度:它不替代已有并行方式,而是与之兼容,使「4D 并行」成为可能,即数据并行、流水并行、张量并行与序列并行可以叠加使用。

工作机制

按照论文的描述,序列并行的核心做法可以拆成以下几个要点:

  • 序列切块与设备分配:把输入序列切分成多个块(chunk),每个块送入对应的设备(GPU)。这样单卡只持有序列的一段,而不是整条序列,序列维度的显存压力被分摊到多张卡上。
  • 环形自注意力(Ring Self-Attention,RSA):为了计算注意力输出,论文把环形(ring-style)通信与自注意力计算整合在一起,提出 Ring Self-Attention。各设备在环形拓扑上依次传递键值等信息,逐步累积出完整的注意力结果,而不需要任何一张卡先拼出完整序列。
  • 与现有并行方式兼容:论文强调该方法与数据并行、流水并行、张量并行等大多数现有并行方式兼容,因此可以与它们组合使用,形成 4D 并行。
  • 配合稀疏注意力处理超长序列:论文指出,在稀疏注意力条件下,序列并行可以训练「无限长」序列;实验中借助稀疏注意力处理了超过 114K token 的序列。

需要说明的是,上述机制来自该论文自身的表述,属于论文提出的方法设计,而非行业统一规范。

典型例子

论文给出了两组可核对的实验性描述:

  • 在扩展到 64 张 NVIDIA P100 GPU 的设置下,与张量并行相比,序列并行在最大批大小上达到约 13.7 倍,在最大序列长度上达到约 3.0 倍。
  • 在稀疏注意力配合下,序列并行能够处理超过 114K token 的序列,论文称这比当时把整条序列放在单设备上的稀疏注意力工作长约 27 倍以上。

在工程实现层面,NVIDIA 的 Megatron Bridge 文档描述了数据并行、分布式数据并行、分布式优化器、张量并行等多种并行部署方式,并说明这些策略通过模型提供者类配置、复用 Megatron Core 的实现以获得性能与显存效率。该文档在模型并行部分介绍了张量并行等方法的配置方式;序列并行作为与这些方法可组合的并行维度,其具体配置需以对应版本文档为准。

边界与常见误解

第一,序列并行不是「免费」的加速手段。它把序列切分到多卡,必然引入设备间的通信开销;论文采用环形通信正是为了在切分的前提下完成注意力计算,但通信本身仍是代价。第二,它解决的是显存与序列长度的系统层面限制,而不是替代稀疏注意力等算法层面的复杂度优化;论文中「无限长序列」的表述有明确前提——配合稀疏注意力。第三,它常被误解为张量并行的替代品,但论文的定位是兼容并补充:张量并行切分的是层内参数张量,序列并行切分的是序列维度,两者可以同时使用。第四,论文中的倍数与 token 长度均为特定实验设置下的结果,不能直接外推到其他模型规模、硬件或注意力实现。第五,不同框架对「序列并行」一词的具体实现可能不同,使用时应以对应框架文档的定义为准。

参考资料