一句话定义:序列并行(Sequence Parallelism)把一条超长序列沿长度方向切成几段,每张 GPU 只存一段;Ring Attention 让这些卡围成一圈轮流传阅 K/V 块,边传边算注意力,把可处理的上下文拉到单卡装不下的规模。
打个比方:单卡跑 100 万 token 的序列,像让一个人读完整套百科全书再回答跨卷的问题,书桌根本摊不开。更麻烦的是,注意力机制要求每个 token(词元)都和所有 token 算相关度,所以就算把书分给 8 个人,每人也得看到别人的内容,否则答不出"第 1 卷和第 7 卷有什么关系"。
Ring Attention 的做法是让 8 张卡围成一个环。每张卡先算本地那一段的注意力,再把缓存好的 K/V(键/值)块传给下一位邻居,同时从另一位邻居手里接过别人的 K/V,继续算、继续传。转完一圈,每张卡都见过全部 K/V,结果和单卡算出来的一致。它依赖 AI 词典:FlashAttention">FlashAttention 的在线归一化(online softmax):不把所有分数存下来再统一归一化,而是边算边滚动更新最大值与累加和,中间结果就不会撑爆显存。通信还能和计算重叠——传的时候顺手算上一块,环才转得动。
和相邻概念怎么区分?数据并行(DP)切的是 batch,张量并行(TP)切的是权重矩阵和隐藏维度,流水并行(PP)切的是网络层数,序列并行切的是序列长度这一维,几种方式可以叠加使用。也有人叫它上下文并行(Context Parallelism),思路基本一致,只是更强调长上下文场景。
| 并行方式 | 切什么 | 主要通信 |
|---|---|---|
| 数据并行 DP | batch | 梯度 all-reduce |
| 张量并行 TP | 权重与隐藏维 | 每层 all-reduce |
| 流水并行 PP | 网络层 | 层间激活传递 |
| 序列并行 SP | 序列长度 | K/V 块交换 |
实践中有两个坑值得知道。一是负载均衡:因果注意力下,靠前的 token 只能看历史、算得少,靠后的算得多,所以常用交错切分(把序列首尾配对分给同一张卡)来摊平工作量。二是通信量随卡数增长,环上的步数等于卡数,卡越多延迟越明显,工程上会用更复杂的通信拓扑或重叠策略来缓解。
对从业者:百万级上下文的训练和推理,基本都要靠这套机制才跑得起来;判断一个框架支不支持长上下文,先看它有没有相应实现。对普通人:它意味着可以把一整本书、一整个代码仓库一次性交给模型,而不是切成碎片再拼答案,跨段落的推理质量会明显更好。具体支持哪些并行策略、参数怎么配,以各家框架的官方文档为准。
