← 返回 2026-02-25

解绑的Ulysses:通过按头分块实现内存高效的上下文并行 Untied Ulysses: Memory-Efficient Context Parallelism via Headwise Chunking

Ravi Ghadia, Maksim Abraham, Sergei Vorobyov, Max Ryabinin 📅 2026-02-24 👍 7 2026-07-13 08:35
上下文并行 内存优化 分布式训练 注意力机制 长上下文训练

UPipe在注意力头级别分块处理,显著降低激活内存,支持更长上下文训练

前置知识

上下文并行(Context Parallelism)

上下文并行是一种分布式训练技术,将长序列沿序列维度分片到多个设备上。每个设备只处理序列的一部分,但在注意力计算时需要与其他设备交换信息以获得完整的上下文。这种方法允许在多个加速器之间分摊计算和内存开销,使得训练超长序列成为可能。主要实现方式包括Ring Attention(环形通信)和DeepSpeed Ulysses(全对全通信)。

UPipe是在上下文并行基础上的改进,理解基本的上下文并行机制是理解UPipe创新点的前提

DeepSpeed Ulysses

DeepSpeed Ulysses是一种上下文并行技术,通过全对全(all-to-all)通信操作将序列分片从序列维度重分布到头维度。初始时每个设备持有长度为S/C的序列分片,经过全对全通信后,每个设备获得所有序列位置但只有部分注意力头的数据。这使得每个设备可以独立计算其分配到的头的完整注意力,然后再通过反向的全对全通信恢复原始分片方式。

UPipe是DeepSpeed Ulysses的改进版本,理解Ulysses的工作原理和内存瓶颈是理解UPipe核心创新的关键

分组查询注意力(GQA)

分组查询注意力是多头注意力的一种变体,其中多个查询头共享同一组键值头。具体来说,如果有H个查询头和G个键值头,则每H/G个查询头共享一个键值头。这种设计在保持模型表达能力的同时,显著减少了键值缓存的内存占用,是现代大语言模型(如Llama3、Qwen3)的标配架构。

UPipe需要特别设计GQA兼容的调度算法,以确保在按头分块处理时仍能保持GQA的内存优势

激活内存(Activation Memory)

激活内存是指在神经网络前向传播过程中,为了后续的反向传播而需要保存的中间张量所占用的内存。在Transformer模型中,激活内存主要来自注意力层的QKV张量、全对全通信缓冲区、前馈网络的中间激活等。对于长序列训练,激活内存随序列长度线性增长,往往成为限制可训练序列长度的主要瓶颈。

UPipe的核心目标就是减少注意力层的激活内存,理解激活内存的构成对于评估UPipe的改进效果至关重要

研究动机

在长序列Transformer训练中,激活内存是限制可训练序列长度的主要瓶颈。根据论文的分析,对于一个典型的Transformer模型,注意力阶段的内存使用为16·S·d_model字节,而交叉熵损失阶段更是高达240·S·d_model字节。现有上下文并行方法如DeepSpeed Ulysses虽然能通过分布式计算扩展上下文长度,但每个设备上的激活内存仍随序列长度线性增长。具体来说,Ulysses在注意力层需要存储完整的QKV张量和全对全通信缓冲区,内存占用为12·(S/C)·H·d_head字节,其中H是注意力头数。当序列长度超过2M tokens时,激活内存开始成为瓶颈,限制了训练能力。例如,训练14B Diffusion Transformer在1M tokens序列上需要8TB的激活内存,单个加速器根本无法容纳。

本文的目标是本文的目标是提出一种新的上下文并行方法,在保持与现有方法相当训练速度的同时,显著降低注意力层的激活内存使用,从而支持更长的上下文长度。具体而言,作者希望在单个8×H100节点上将Llama3-8B的最大上下文长度从FPDT的4M tokens提升到5M tokens(提升25%),同时将Qwen3-32B注意力中间张量内存减少87.5%。

与已有工作不同的是,现有方法的共同问题是将所有注意力头作为一个整体处理,导致中间张量的内存占用与头数H成正比。UPipe抓住了一个关键洞察:对于长序列,处理一部分注意力头就足以饱和GPU计算能力。因此,可以通过在注意力头级别进行分块处理(headwise chunking),将内存占用从O(H)降低到O(U),其中U是每个阶段处理的头数。这种方法与现有优化(如分块损失、分块MLP)正交,可以组合使用。

核心方法

UPipe的核心思想可以用一个简单的类比来理解:想象你有一个大仓库需要搬运货物,传统方法是把所有货物一次性装上卡车,但卡车容量有限。UPipe的做法是把货物分成小批次,每次只装一部分,搬完后再装下一批,这样每趟运输所需的卡车容量就小多了。具体来说,UPipe将注意力层的执行分成多个阶段,每个阶段只处理U个注意力头(而不是所有H个头)。在每个阶段中,输入先被投影到U个头的QKV,然后进行全对全通信,接着计算注意力,最后进行反向的全对全通信。由于每个阶段只处理U个头,中间张量的内存占用从O(H)降低到O(U)。不同阶段之间复用内存缓冲区,从而在整个注意力层执行过程中保持较低的峰值内存。

UPipe最本质的创新在于打破了传统方法将所有注意力头作为一个整体处理的范式。在DeepSpeed Ulysses中,全对全通信会重分布所有H个头的QKV张量,导致内存占用与H成正比。UPipe的关键洞察是:对于长序列,每个设备只需要处理一部分头就能充分利用GPU计算能力。因此,UPipe将注意力执行解绑成多个阶段,每个阶段只处理U个头。当U=C(设备数)时,每个设备在每个阶段只需处理一个头,峰值内存变为12·S·d_head字节,与头数H无关。以Qwen3-32B为例(H=64,C=8),传统Ulysses需要96·(S/C)·d_head字节,而UPipe只需要12·(S/C)·d_head字节,内存减少87.5%。

方法步骤详情

UPipe的执行流程如下:首先,将注意力执行分成H/U个阶段。在每个阶段i(i从0到H/U-1):(1) 投影阶段:将输入X投影为第iU到(i+1)U-1个头的Q、K、V张量,内存占用为6·(S/C)·U·d_head字节。(2) 输入全对全通信:将QKV从序列分片重分布为头分片,通信后每个设备获得U/C个头的完整序列数据,通信缓冲区占用6·(S/C)·U·d_head字节。(3) 注意力计算:使用Flash Attention计算这U个头的注意力,输出占用2·(S/C)·U·d_model字节。(4) 输出全对全通信:将注意力输出从头分片恢复为序列分片,通信缓冲区占用2·(S/C)·U·d_model字节。不同阶段之间复用QKV和通信缓冲区的内存空间,从而保持峰值内存为O(U)而非O(H)。

技术新颖性

UPipe的技术新颖性体现在多个方面。首先,它是第一个在注意力头级别进行分块的上下文并行方法,与现有方法(如FPDT在序列维度分块)正交,可以组合使用。其次,UPipe设计了专门的GQA兼容调度算法,通过乱序处理头来避免冗余通信。具体来说,对于GQA模型,每个阶段处理C个查询头,但只需要通信C/G个唯一的键值头。通过在第一个阶段通信所有唯一的键值头,后续阶段只需通信对应的查询头,从而减少通信量。最后,UPipe是一个简单、即插即用的解决方案,可以直接替换现有训练管道中的注意力模块,无需修改其他组件。

DeepSpeed-Ulysses和UPipe设计的示意图
Figure 3: DeepSpeed-Ulysses和UPipe设计的示意图
UPipe的GQA调度算法示意图
Figure 4: UPipe的GQA调度算法示意图
UPipe头分块大小U的消融实验
Figure 6: UPipe头分块大小U的消融实验

实验结果

论文在多个模型和配置上进行了全面的实验评估。在Llama3-8B单节点训练中,UPipe支持的最大上下文长度达到5M tokens,比FPDT的4M tokens提升25%,比Ulysses的3M tokens提升67%。在吞吐量方面,UPipe在短序列(<2M tokens)上略低于Ulysses(由于额外的内核启动开销),但在长序列(≥2M tokens)上与Ulysses相当,且始终优于FPDT。例如在3M tokens时,UPipe达到166.32 tokens/sec/GPU,而Ulysses为162.41,FPDT为153.48。在Qwen3-32B多节点训练中,UPipe支持的最大序列长度为4M tokens,是Ulysses(2M tokens)的2倍,吞吐量比FPDT高8.3%。在16×H100的Llama3-8B训练中,UPipe支持的最大上下文长度达到8M tokens,比USP-Hybrid的6M tokens提升33%。内存分析显示,UPipe在所有序列长度上都比USP-Hybrid更高效,且吞吐量相当。消融实验表明,分块大小U允许内存-吞吐量权衡:较小的U提供更好的内存效率但略微降低吞吐量,较大的U则相反。

Transformer各阶段峰值内存使用分解
Table 1: Transformer各阶段峰值内存使用分解
GQA下前向注意力块的峰值激活内存
Table 2: GQA下前向注意力块的峰值激活内存
Llama3-8B和Qwen3-32B的吞吐量比较
Table 3: Llama3-8B和Qwen3-32B的吞吐量比较
Llama3-8B和Qwen3-32B的内存比较
Table 4: Llama3-8B和Qwen3-32B的内存比较
DS-Ulysses和UPipe的运行时比较
Table 5: DS-Ulysses和UPipe的运行时比较
GQA下反向注意力块的峰值激活内存
Table 6: GQA下反向注意力块的峰值激活内存
不同上下文并行方法在Llama3-8B长序列训练上的比较
Figure 1: 不同上下文并行方法在Llama3-8B长序列训练上的比较
Llama3-8B在3M tokens训练时的内存使用分解
Figure 2: Llama3-8B在3M tokens训练时的内存使用分解
Llama3-8B在16×H100上UPipe与USP-Hybrid的内存和吞吐量比较
Figure 5: Llama3-8B在16×H100上UPipe与USP-Hybrid的内存和吞吐量比较
查看结构化数据
任务指标本文基线提升
Llama3-8B单节点训练 最大上下文长度 5M tokens FPDT: 4M tokens 25%
Llama3-8B多节点训练 最大上下文长度 8M tokens USP-Hybrid: 6M tokens 33%
Qwen3-32B多节点训练 最大上下文长度 4M tokens Ulysses: 2M tokens 100%
Qwen3-32B注意力内存 中间张量内存减少 12·S/C·d_head Ulysses: 96·S/C·d_head 87.5%
Llama3-8B 3M tokens吞吐量 tokens/sec/GPU 166.32 Ulysses: 162.41 2.4%

局限与改进

论文存在几个明显的局限性。首先,UPipe在短序列(<1M tokens)上的吞吐量略低于Ulysses,因为额外的内核启动开销在短序列上无法被摊销。根据Table 5的数据,在128K tokens时,UPipe的总运行时间为7.20秒,而Ulysses为7.40秒,差异约2.7%。其次,UPipe要求U(每阶段头数)必须能被C(设备数)整除,这在某些配置下可能限制灵活性。第三,论文只在8B和32B规模的模型上进行了实验,对于更大规模模型(如70B、405B)的表现尚不清楚。第四,FPDT由于支持任意分块大小,在内存效率上仍然优于UPipe,只是由于CPU开销导致吞吐量下降。最后,论文没有探索UPipe与FPDT组合使用的可能性,这可能进一步提升性能。

独立分析的弱点

从独立分析的角度,UPipe存在几个可以改进的弱点。首先,在短序列场景下,UPipe的性能损失来自于多次内核启动的开销。一个可能的改进方向是实现动态分块策略,根据序列长度自动调整U的大小:短序列使用较大的U以减少内核启动次数,长序列使用较小的U以最大化内存节省。其次,当前的GQA调度算法虽然减少了通信量,但仍然是串行处理各阶段。可以探索流水线化的执行方式,在计算当前阶段注意力的同时预取下一阶段的QKV数据,从而隐藏通信延迟。第三,UPipe只优化了注意力层的内存,而交叉熵损失层仍然是内存大户(240·S·d_model字节)。虽然论文使用了分块损失内核,但可以进一步探索将UPipe的思想应用到损失计算中。第四,论文没有考虑混合精度训练的场景,如果某些头可以使用更低精度(如FP8),可能进一步减少内存和通信开销。

未来方向

论文作者提出UPipe可以作为未来长上下文系统的基础构建块。基于论文的成果,有几个有前景的研究方向。首先,可以探索UPipe与FPDT的组合使用,因为两者在分块维度上正交(UPipe在头维度,FPDT在序列维度),理论上可以获得两者的内存优势。其次,可以将UPipe的思想扩展到多模态模型,特别是视频生成模型,这类模型通常需要处理极长的序列(>1M tokens)。第三,可以研究自适应的头重要性调度,根据注意力模式动态决定哪些头优先处理,可能进一步提升效率。第四,可以探索UPipe在推理阶段的应用,特别是在长上下文推理中减少KV缓存的内存占用。最后,可以研究UPipe与其他并行策略(如张量并行、流水线并行)的协同优化,以支持更大规模模型的长上下文训练。

复现评估

论文的复现性非常好。作者已经开源了所有实验代码,托管在GitHub上(github.com/togethercomputer/Untied-Ulysses)。代码基于TorchTitan框架,这是一个成熟的分布式训练框架,具有良好的文档和社区支持。实验使用标准的模型架构(Llama3-8B、Qwen3-32B)和公开可用的数据集。硬件要求方面,单节点实验需要8×H100 GPU(80GB HBM),多节点实验需要16×H100 GPU,这是当前大模型训练的标准配置。复现的主要挑战可能在于配置分布式训练环境和理解TorchTitan的API,但论文提供了详细的实现说明和超参数设置。总体而言,对于具备分布式训练经验的研究团队,复现这篇论文应该是可行的。