本页章节
DISTRIBUTED ATTENTION / CONTEXT PARALLEL
上下文并行:一条序列跨卡,仍算同一个目标
每张卡拥有一段位置,Attention 还需要其他位置的 K/V。沿全局位置、在线归一化和梯度拥有者,检查分片前后是否得到相同输出与更新信号。
切的是位置,归一化仍覆盖全部可见 key
rank 0 默认拥有位置 0、1,rank 1 拥有 2、3、4。每个 query 留在自己的 rank,依次读取本地和远端 K/V。因果规则使用全局 j≤i,位置 2 必须能看到 0、1;局部编号只能用于存储索引。
Megatron Core 的 CP 将输入和激活沿序列维划分;其文档对比的 SP 主要划分 LayerNorm、Dropout 等激活。名称相近的实现需要核对实际张量布局与通信,不宜只凭 SP/CP 缩写判断。
保留本地 query
局部线性层可独立处理每个位置;共享权重梯度仍需要正确合并。
遍历各拥有者的块
读入 K/V,依据全局位置过滤,累计每行最大值、分母和加权和。
重建局部概率
用整行 LSE 与输出计算当前块的 dQ、dK、dV。
归还 K/V 梯度
不同 query rank 对同一个 K/V 的贡献返回其拥有者后求和。
远端块到达时,怎样接续已有状态?
块来自哪张卡不改变这个关系。按块独立 softmax 后等权平均,会给不同块相同总权重;真正的块权重由各块的指数质量决定。反向使用 G/5 作为上游,因此所有 query 都具有相同目标权重。
逐事件查看跨位置计算
顶部与最终表格计算全部事件后的结果;中间事件表展示当前读取或归还的块。
同一 Q/K/V 的分片与完整参考
binary64 · 全局 query 平均| 对象 | 可见 key / 目标 | 运行最大值 / dK | 指数和 | 前缀输出 / dV |
|---|
最终输出、梯度与完整参考
| 位置 | 输出 | 参考输出 | dQ | dK | dV |
|---|
复算所用的全部输入
通信、常驻状态和临时块分别占多少?
账本声明一种教学协议:前向每个远端 K/V 发送一次;反向再次读取远端 K/V;每个 query rank 向 K/V 拥有者返回累加贡献。页面把反向贡献按拥有者汇总展示,Python 按块传回;实际通信采用所有 rank 一致的拥有者顺序,页面前向先显示本地块。两种遍历顺序都使用整行归一化。数值类型 float64,每元素 8 B。所有块都发送,包括因果 mask 下无有效位置的块;生产实现可进一步跳过无用通信。
| rank | 拥有位置 | 前向 KV / 重放 KV / 梯度发送元素 | 发送 / 接收 B | 常驻 QKV / 远端块 / 在线状态元素 |
|---|
常驻 Q/K/V、临时远端 K/V 与 m/ℓ/a 分开计量;O、LSE、梯度、计算 workspace 和通信缓冲区还要另算。页面完整 P、参考结果、事件快照服务于教学,不用于声称浏览器节省内存。网络拓扑、消息分段和能否重叠计算需设备实测。
用完整 autograd 与两个真实进程核验
npm run lab:decisions 在固定 PyTorch CPU 环境中计算完整 Attention 的自动微分参考,并启动两个 Gloo 进程,交换不等长 K/V、重放与返回梯度。检查因果边界、空行、不同块大小和梯度丢失;报告保留每个 rank 的结果。实验以 Q/K/V 为独立变量,未包含共享投影层或 DDP 参数平均。
适用范围与一手资料
五位置二维 Q/K/V、固定 G、全局平均、无 dropout。比较分片输出与输入梯度;两个 Gloo 进程运行明确的 KV 重放与梯度归还协议,不调用 Megatron 或 NCCL,不估算 GPU 性能。
公式与机制的原始依据 · 4 项
- NVIDIA Megatron Core · Context Parallel Package序列分片、KV 交换与梯度归约;正文于 2026-10-28 核对,教学 Gloo 协议独立实现
- FlashAttention (2022)精确 attention、HBM/SRAM 数据搬运与内存复杂度
- PyTorch 2.9 · Autograd mechanics本项目框架对照固定 PyTorch 2.9.0;冻结、计算图与 no-grad 的语义,2026-10-27 核对
- PyTorch 2.9 · DistributedDataParallelCPU Gloo 双进程实验的共享参数平均与通信约定