本报告面向 KDA Context Parallel PR 的功能验收。各章节直接给出测试对象、配置、方法、 结果和结论,仅覆盖本 PR 提供的功能。
a867e401a287b6027d535c353c355ec85d72cd12
ulysses
p2p
eager
triton
本报告需要证明:
KimiDeltaAttention
本 PR 的功能矩阵如下:
以下内容不属于本 PR 的验收范围:
35dceaee5408e69a555fec34cb215c93c375dabe
Eager 测试不要求安装 FLA 或 Triton。Triton 测试固定使用上述 FLA revision,避免不同版本的 staged KDA 接口和 kernel 行为影响结果。
张量误差统一记录:
max_abs = max(abs(actual - reference)) relative-L2 = ||actual - reference||_2 / max(||reference||_2, eps) finite = actual/reference 均无 NaN 和 Inf
单卡和 CP 测试使用相同初始权重、相同输入及相同随机上游梯度。CP 参数梯度在 CP group 内求和后再与单卡完整序列 reference 比较。
2e-2
5e-2
3e-2
1e-4
2e-3
单独比较 loss 或 grad norm 不能证明 CP 数学等价,因此完整层测试还直接比较 output、hidden gradient 和逐参数 gradient;多步 loss/grad norm 只用于检查训练轨迹稳定性。
性能和显存测试统一采用:
warmup = 3 repeat = 10 计时前后执行 device synchronize 分布式 elapsed 取所有 rank 的 MAX 编译与 warmup 时间不计入结果
显存记录所有参与 rank 的最大 max_memory_allocated 和 max_memory_reserved。Forward peak 和完整 Fwd+Bwd peak 分开记录,不使用 reserved 代替 allocated 判断真实活跃张量规模。
max_memory_allocated
max_memory_reserved
eager 是 Hyper-Parallel 内置的 PyTorch 数学实现,承担以下职责:
triton 是生产融合路径:
chunk_kda
backend="triton"
RuntimeError
TypeError
A_log/dt_bias
Dk != 128
Dv != 128
chunk_size != 64
NotImplementedError
ValueError
git diff --check
compileall
CPU UT 重点覆盖:
initial_state
dHT
wheel 中包含 Hyper-Parallel 的 KDA layer、CP wrapper、FLA adapter、state-summary 实现和 KDA README;不复制 FLA 的 KDA kernel。未安装 FLA 时,导入 Hyper-Parallel 和运行 Eager KDA 均不受影响。
Eager KDA 采用两层交叉验证:
torch_recurrent_kda
naive_recurrent_kda
torch_chunk_kda
naive_chunk_kda
配置为 B=2,T=16,Hq=2,Hv=4,Dk=4,Dv=3,chunk=8,FP32,包含随机非零 h0、 随机非零 dHT,并比较 q/k/v/gate/beta/A_log/dt_bias/h0 的全部梯度。
B=2,T=16,Hq=2,Hv=4,Dk=4,Dv=3,chunk=8,FP32
h0
5.960e-8
1.192e-7
3.772e-7
另以 CP4 方式将 T=64 切为四段,顺序应用四个 local affine summary。拼接 token output、 逐段 final state、组合 summary 后的 final state 及全部梯度均与完整序列 Eager reference 一致:
T=64
atol=3e-5, rtol=3e-5
atol=4e-4, rtol=4e-4
这些结果同时验证了 state summary 的正向组合和反向梯度链,没有遗漏 initial-state gradient 或 local summary 输入梯度。
配置为 B=1,T=128,H=4,Dk=Dv=128,chunk=64。Triton 使用 BF16 token 输入与 FP32 A_log/dt_bias,reference 为 FP32 Eager recurrence;两边使用相同随机 output gradient。
B=1,T=128,H=4,Dk=Dv=128,chunk=64
5.29e-3
4.69e-3
4.90e-3
5.08e-3
5.33e-3
5.26e-3
1.27e-2
5.61e-3
全部指标低于单卡门槛,且 output 与全部梯度 finite,结果 PASS。
公开单卡 Triton API 使用零 initial state 并返回 token output;P2P 所需的非零 rank initial state、final state 以及反向 state gradient 由第 5 章的 stateful CP 路径验证。
被测完整层包含:
input hidden states -> Q/K/V/Beta/Gate projection -> Q/K/V causal ShortConv -> KDA core -> output gate -> gated RMSNorm -> output projection -> attention output
单卡 Reference 使用官方 Hugging Face KimiDeltaAttention,与 CP 使用相同初始权重、输入 和随机上游梯度。Reference 运行完整序列;CP 将序列切为 local shard,参数梯度在 CP group 内求和后逐参数比较。
配置为 B=1,global T=1024,hidden=512,H=4,Dk=Dv=128,conv=4,chunk=64,BF16,CP4。
B=1,global T=1024,hidden=512,H=4,Dk=Dv=128,conv=4,chunk=64,BF16,CP4
8.905e-3
1.034e-2
1.039e-2
8.904e-3
1.055e-2
1.282e-2
两条 Eager CP 路径均低于 3e-2 门槛;所有参数均有 finite gradient。该结果验证 CP wrapper 和通信逻辑不依赖 Triton 才能正确工作。
8.069e-3
8.878e-3
9.294e-3
8.071e-3
8.736e-3
9.058e-3
8.08e-3
8.87e-3
9.26e-3
8.07e-3
8.84e-3
9.97e-3
CP4 与 CP8 的 P2P/Ulysses 均低于 3e-2 门槛,没有随 CP size 增大出现误差放大。
P2P 还单独覆盖随机非零 initial state 和随机非零 final-state gradient,并检查:
所有检查 PASS,未发现漏传 state gradient、summary 顺序反转或某个 rank 梯度缺失。
配置为 CP4,B=1,global T=256,hidden=256,H=4,Dk=Dv=128,BF16,AdamW 使用 lr=1e-3,weight_decay=0.01。Reference 与 CP 从相同权重和 optimizer state 开始;每一步 使用一组新的确定性随机输入和 target,共执行 20 个 optimizer step。
CP4,B=1,global T=256,hidden=256,H=4,Dk=Dv=128,BF16
lr=1e-3,weight_decay=0.01
7.43e-6
4.79e-4
8.56e-3
8.67e-6
5.88e-4
8.54e-3
1.11e-5
6.00e-4
8.50e-3
8.74e-6
4.89e-4
8.36e-3
四种 mode/backend 组合均满足轨迹门槛。20 步内未出现 NaN/Inf、漏梯度、loss 突跳或 loss/grad-norm 误差随 step 持续扩大。Eager 与 Triton 的最终参数误差处于同一量级,未观察 到 P2P state-summary 反向带来的独有漂移。
本章测试 KDA core 与对应 CP 通信,不包含 projection、ShortConv、output gate、RMSNorm 和 output projection。该口径用于直接比较 P2P state chain 与 Ulysses all-to-all,不代表完整 Kimi K3 模型的端到端加速比。
统一 shape:
B = 1 heads = 96 Dk = Dv = 128 chunk_size = 64 local sequence = 8K dtype = BF16
81.05 ms
228.38 ms
7748 MiB
9044 MiB
90.26 ms
253.77 ms
7906 MiB
9250 MiB
82.72 ms
231.81 ms
89.04 ms
245.28 ms
9254 MiB
对应收益:
10.2%
10.0%
2.0%
2.2%
7.1%
5.5%
2.3%
CP4 的 forward 阶段峰值如下:
3119 MiB
3634 MiB
3854 MiB
4422 MiB
P2P 的 forward peak allocated/reserved 分别降低约 19.1%/17.8%。完整前反向峰值的差距 缩小,是因为两条路径都会进入占用更高的公共 KDA backward workspace;不能用 total peak 掩盖 forward 存活张量的差异。
19.1%/17.8%
保持 local sequence=8K 从 CP4 扩展到 CP8 后,P2P Forward 增加 2.1%,Fwd+Bwd 增加 1.5%,峰值 allocated 保持不变。结果说明该 shape 下 P2P 的 local 计算与显存主要由 local sequence 决定。新增 rank 带来的状态链开销,以及本机 CP8 Ulysses 时间相对 CP4 略低, 共同使 CP8 的 P2P 相对加速比低于 CP4。
2.1%
1.5%
使用 non-reentrant activation checkpoint 验证 CP4 P2P 完整层。配置为 B=1,global T=256,H=4,BF16,开启和关闭 checkpoint 时使用相同权重、输入和上游梯度。
B=1,global T=256,H=4,BF16
9.220e-3
Checkpoint 重放过程中未出现:
开启与关闭 checkpoint 的误差处于相同量级,说明自定义 P2P autograd function 能在重计算 路径中重新建立独立通信上下文。
B=1,T=128,H=4,Dk=Dv=128,BF16
1.0e-2
H=96,D=128,local sequence=8K
19.1%
KDA 融合算子与 Context Parallel PR 测试报告
文档结构总览
本报告面向 KDA Context Parallel PR 的功能验收。各章节直接给出测试对象、配置、方法、
结果和结论,仅覆盖本 PR 提供的功能。
1. 测试目标与范围
a867e401a287b6027d535c353c355ec85d72cd12ulysses、p2peager、triton本报告需要证明:
final state 和全部输入梯度上保持一致。
KimiDeltaAttention层的前向和反向。本 PR 的功能矩阵如下:
以下内容不属于本 PR 的验收范围:
2. 环境与统一测试方法
2.1 软件与硬件环境
35dceaee5408e69a555fec34cb215c93c375dabeEager 测试不要求安装 FLA 或 Triton。Triton 测试固定使用上述 FLA revision,避免不同版本的
staged KDA 接口和 kernel 行为影响结果。
2.2 精度方法与判据
张量误差统一记录:
单卡和 CP 测试使用相同初始权重、相同输入及相同随机上游梯度。CP 参数梯度在 CP group
内求和后再与单卡完整序列 reference 比较。
2e-2;任一输入/参数梯度 relative-L2 <=5e-23e-21e-4;最大 grad-norm rel <=2e-3;最终参数 rel-L2 <=3e-2单独比较 loss 或 grad norm 不能证明 CP 数学等价,因此完整层测试还直接比较 output、hidden
gradient 和逐参数 gradient;多步 loss/grad norm 只用于检查训练轨迹稳定性。
2.3 性能与显存口径
性能和显存测试统一采用:
显存记录所有参与 rank 的最大
max_memory_allocated和max_memory_reserved。Forward peak和完整 Fwd+Bwd peak 分开记录,不使用 reserved 代替 allocated 判断真实活跃张量规模。
3. Backend、兼容性与交付检查
3.1 Backend 边界
eager是 Hyper-Parallel 内置的 PyTorch 数学实现,承担以下职责:triton是生产融合路径:chunk_kdaAPI;backend="triton"时延迟导入;3.2 Triton capability 与 fail-fast
RuntimeError,明确提示缺少可选依赖RuntimeError,明确提示最低版本RuntimeErrorRuntimeError,指出缺失模块或符号TypeErrorA_log/dt_bias不是 FP32TypeErrorDk != 128、Dv != 128或chunk_size != 64NotImplementedErrorValueErrorRuntimeError或ValueErrorRuntimeError,避免嵌套两层 CP wrapper3.3 CPU UT、静态检查与 wheel
git diff --checkcompileallCPU UT 重点覆盖:
KimiDeltaAttention前向、反向和全部参数梯度。initial_state与随机非零dHT。wheel 中包含 Hyper-Parallel 的 KDA layer、CP wrapper、FLA adapter、state-summary 实现和
KDA README;不复制 FLA 的 KDA kernel。未安装 FLA 时,导入 Hyper-Parallel 和运行 Eager
KDA 均不受影响。
4. 单卡 KDA 验证
4.1 Eager 数学参考
Eager KDA 采用两层交叉验证:
torch_recurrent_kda与 FLAnaive_recurrent_kda比较逐 token recurrence。torch_chunk_kda与 FLAnaive_chunk_kda比较 chunkwise UT/WY 分解。配置为
B=2,T=16,Hq=2,Hv=4,Dk=4,Dv=3,chunk=8,FP32,包含随机非零h0、随机非零
dHT,并比较 q/k/v/gate/beta/A_log/dt_bias/h0 的全部梯度。5.960e-85.960e-81.192e-71.192e-75.960e-83.772e-7另以 CP4 方式将
T=64切为四段,顺序应用四个 local affine summary。拼接 token output、逐段 final state、组合 summary 后的 final state 及全部梯度均与完整序列 Eager reference 一致:
atol=3e-5, rtol=3e-5atol=4e-4, rtol=4e-4这些结果同时验证了 state summary 的正向组合和反向梯度链,没有遗漏 initial-state gradient
或 local summary 输入梯度。
4.2 Triton 融合算子精度
配置为
B=1,T=128,H=4,Dk=Dv=128,chunk=64。Triton 使用 BF16 token 输入与 FP32A_log/dt_bias,reference 为 FP32 Eager recurrence;两边使用相同随机 output gradient。5.29e-34.69e-34.90e-35.08e-35.33e-35.26e-31.27e-25.61e-3全部指标低于单卡门槛,且 output 与全部梯度 finite,结果 PASS。
公开单卡 Triton API 使用零 initial state 并返回 token output;P2P 所需的非零 rank initial
state、final state 以及反向 state gradient 由第 5 章的 stateful CP 路径验证。
5. CP 完整 KDA 层验证
5.1 测试范围
被测完整层包含:
单卡 Reference 使用官方 Hugging Face
KimiDeltaAttention,与 CP 使用相同初始权重、输入和随机上游梯度。Reference 运行完整序列;CP 将序列切为 local shard,参数梯度在 CP group
内求和后逐参数比较。
5.2 Eager backend
配置为
B=1,global T=1024,hidden=512,H=4,Dk=Dv=128,conv=4,chunk=64,BF16,CP4。8.905e-31.034e-21.039e-28.904e-31.055e-21.282e-2两条 Eager CP 路径均低于
3e-2门槛;所有参数均有 finite gradient。该结果验证 CP wrapper和通信逻辑不依赖 Triton 才能正确工作。
5.3 Triton backend
8.069e-38.878e-39.294e-38.071e-38.736e-39.058e-38.08e-38.87e-39.26e-38.07e-38.84e-39.97e-3CP4 与 CP8 的 P2P/Ulysses 均低于
3e-2门槛,没有随 CP size 增大出现误差放大。P2P 还单独覆盖随机非零 initial state 和随机非零 final-state gradient,并检查:
所有检查 PASS,未发现漏传 state gradient、summary 顺序反转或某个 rank 梯度缺失。
6. 多步 AdamW 训练轨迹
配置为
CP4,B=1,global T=256,hidden=256,H=4,Dk=Dv=128,BF16,AdamW 使用lr=1e-3,weight_decay=0.01。Reference 与 CP 从相同权重和 optimizer state 开始;每一步使用一组新的确定性随机输入和 target,共执行 20 个 optimizer step。
7.43e-64.79e-48.56e-38.67e-65.88e-48.54e-31.11e-56.00e-48.50e-38.74e-64.89e-48.36e-3四种 mode/backend 组合均满足轨迹门槛。20 步内未出现 NaN/Inf、漏梯度、loss 突跳或
loss/grad-norm 误差随 step 持续扩大。Eager 与 Triton 的最终参数误差处于同一量级,未观察
到 P2P state-summary 反向带来的独有漂移。
7. 性能与显存
7.1 测试范围与配置
本章测试 KDA core 与对应 CP 通信,不包含 projection、ShortConv、output gate、RMSNorm 和
output projection。该口径用于直接比较 P2P state chain 与 Ulysses all-to-all,不代表完整
Kimi K3 模型的端到端加速比。
统一 shape:
7.2 CP4/CP8 结果
81.05 ms228.38 ms7748 MiB9044 MiB90.26 ms253.77 ms7906 MiB9250 MiB82.72 ms231.81 ms7748 MiB9044 MiB89.04 ms245.28 ms7906 MiB9254 MiB对应收益:
10.2%10.0%2.0%2.2%7.1%5.5%2.0%2.3%CP4 的 forward 阶段峰值如下:
3119 MiB3634 MiB3854 MiB4422 MiBP2P 的 forward peak allocated/reserved 分别降低约
19.1%/17.8%。完整前反向峰值的差距缩小,是因为两条路径都会进入占用更高的公共 KDA backward workspace;不能用 total peak
掩盖 forward 存活张量的差异。
保持 local sequence=8K 从 CP4 扩展到 CP8 后,P2P Forward 增加
2.1%,Fwd+Bwd 增加1.5%,峰值 allocated 保持不变。结果说明该 shape 下 P2P 的 local 计算与显存主要由 localsequence 决定。新增 rank 带来的状态链开销,以及本机 CP8 Ulysses 时间相对 CP4 略低,
共同使 CP8 的 P2P 相对加速比低于 CP4。
8. Activation Checkpoint
使用 non-reentrant activation checkpoint 验证 CP4 P2P 完整层。配置为
B=1,global T=256,H=4,BF16,开启和关闭 checkpoint 时使用相同权重、输入和上游梯度。8.069e-38.878e-39.294e-38.069e-38.878e-39.220e-3Checkpoint 重放过程中未出现:
开启与关闭 checkpoint 的误差处于相同量级,说明自定义 P2P autograd function 能在重计算
路径中重新建立独立通信上下文。
9. PR 可引用结论
state 和全部梯度最大绝对误差不超过
3.772e-7。output、final state 和全部梯度,验证了 state-summary 正反向数学。
B=1,T=128,H=4,Dk=Dv=128,BF16下通过全部前反向精度检查;最差 relative-L2 为
1.27e-2。KimiDeltaAttention层的 output、hidden gradient 和最大参数 gradient relative-L2 均低于
1.0e-2。relative error 为
1.11e-5,最大 grad-norm relative error 为6.00e-4,无持续漂移。H=96,D=128,local sequence=8KKDA core 中,P2P 相对 Ulysses 的 Fwd+Bwd加速为 CP4
10.0%、CP85.5%。2.0%;CP4 forward peak allocated 低约19.1%。执行显式 capability 检查,不支持条件不会静默回退。
已通过。