mindspore-ai / mindspore-ai/hyper-parallel

Linear Attention CP 融合算子 PR #1114测试报告

Open
#195 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
53
Forks
63
Avg merge
23h 45m
Merged PRs (30d)
63

Description

Linear Attention CP 融合算子 PR 测试报告

文档结构总览

本报告按照从算子到整网的验证层级组织,每一章均就地给出测试配置、方法、结果和结论,
不再将测试计划与测试结果拆开放置。

章节 验证对象 主要目的
第 1 章 PR 功能范围 明确需要证明的能力及不在本 PR 范围内的路径
第 2 章 环境与统一方法 固定软硬件、精度指标、计时与显存口径
第 3 章 Backend 与交付检查 验证 Triton capability、fail-fast、UT 和 wheel 完整性
第 4 章 单卡 GDN core 对比 Triton 融合算子与 eager 小算子的精度、性能和显存
第 5 章 CP 完整 Linear Attention 层 验证 Ulysses、P2P 和 AllGather 的 CP 正确性及扩展性能
第 6 章 四层 Qwen3.5 整网 验证 FSDP+CP、多步 optimizer 轨迹及端到端收益
第 7 章 Level0 profile 与稳定性 量化计算通信构成,并检查 P2P 长时间运行稳定性
第 8 章 PR 结论 汇总可直接用于 PR 描述的验证结论

1. 测试目标与范围

测试对象为 linear_cp_fused 分支提交 9445b8b8ac19bc5c3f9125383adba4a6170319db

需要证明:

  1. Triton GDN 的 token output、final state 和全部输入梯度与 eager reference 一致。
  2. Ulysses Triton 和 P2P Triton 的完整 Linear Attention 层与无 CP reference 一致。
  3. P2P 多跳 forward state chain 和反向 state-gradient chain 正确且稳定。
  4. 四层 Qwen3.5 在非零学习率下执行 100/200 步优化时,loss 和 grad norm 不持续漂移。
  5. P2P 相对 Ulysses 的性能和显存收益能够在正式提交代码上复现。
  6. 不支持的 Triton 环境、shape 和 mode 明确报错,不发生静默回退。

本 PR 覆盖的路径如下:

Linear CP mode GDN backend 本报告中的定位
Ulysses Triton 融合算子基线及完整功能验证
P2P Triton 本 PR 核心方案及完整功能验证
AllGather eager 已有 CP 功能回归
AllGather Triton 当前不支持,只验证 fail-fast

AllGather Triton、融合 Conv1D、自动 backend 回退均不在本 PR 功能范围内。

2. 环境与统一测试方法

2.1 软件与硬件环境
项目 配置
NPU 8 × Ascend 910B3,64 GiB HBM/device
CANN 9.1.0-beta.3
Python 3.11
PyTorch 2.10.0+cpu
torch-npu 2.10.0
triton-ascend distribution 3.2.1+git2badfc89
Triton Python module 3.2.0,Ascend backend available
主要 dtype BF16;GDN gate 累计及 recurrent state 使用 FP32

运行 Triton 时需要确保当前 Python 环境的新版 libstdc++ 优先于系统动态库。否则
libtriton.so 可能加载不满足 GLIBCXX_3.4.29 的旧系统库,使 capability 检查失败。
本报告中的正式结果均在 is_triton_gdn_available(target_shape) == True 后获得。

整网轨迹使用真实 mmap token 数据流,每一步读取不同 token 序列。reference 与候选模式使用
相同的初始化权重、输入、labels、padding mask、有效 token 数和 optimizer 初态。

2.2 精度指标

张量精度同时记录:

max_abs    = max(abs(actual - reference))
relative-L2 = ||actual - reference||_2 / max(||reference||_2, eps)
finite      = actual/reference 均无 NaN 和 Inf

整网轨迹记录:

loss_abs = abs(cp_loss - reference_loss)
loss_rel = loss_abs / abs(reference_loss)
grad_norm_abs = abs(cp_grad_norm - reference_grad_norm)
grad_norm_rel = grad_norm_abs / abs(reference_grad_norm)

最大绝对误差与最大相对误差可能出现在不同 step,因此两者独立统计,不能简单相乘换算。

2.3 性能与显存口径

所有正式性能测试统一采用:

warmup = 5
repeat = 20
计时前 barrier + device synchronize
计时后 device synchronize
分布式 elapsed 使用 all_reduce(MAX)
报告 median / min / p90
正式计时关闭 profiler

显存测试在 warmup 后重置 peak stats,记录所有 rank 的最大值。单卡 GDN 表使用
incremental peak allocated,即扣除输入和固定常驻张量后的算子增量峰值;CP/整网表使用
完整进程的 peak allocatedpeak reserved。两种口径不会混在同一张对比表中。

3. Backend、兼容性与交付检查

3.1 Capability 与 fail-fast

目标生产 shape 的 Triton capability 检查通过。以下不支持条件均要求直接报错:

条件 预期行为
backend=auto 拒绝,避免静默选择不同 backend
all_gather + triton 拒绝,当前未提供该组合
head_dim != 128 拒绝
chunk_size != 64 拒绝
P2P local sequence 不能被 64 整除 拒绝
Triton 未安装或版本不满足 给出明确错误,不回退 eager
3.2 UT、静态检查与 wheel
Linear Attention CP CPU UT: 10 passed
git diff --check: passed
正式提交工作树: clean

wheel 完成隔离安装验证,并确认包含:

hyper_parallel/platform/torch/custom_ops/gdn/LICENSE
hyper_parallel/platform/torch/custom_ops/gdn/chunk_gated_delta_rule.py
hyper_parallel/platform/torch/custom_ops/gdn/state_summary.py
hyper_parallel/platform/torch/custom_ops/gdn/triton/*.py

CPU/MindSpore import 不会主动加载 Torch Triton kernel;未安装 Triton 时 eager backend 仍可使用。
长序列 NPU 测试不放入有 180 秒超时限制的公共 UT。

4. 单卡 GDN 融合算子验证

本章只比较 GDN core,不包含 projection、Conv1D、RMSNormGated、out projection 或 CP 通信。

4.1 Shape 与 head 口径

Qwen3.5 层的投影配置是:

QK heads = 16
V heads  = 32
dk = dv  = 128

进入 GDN core 前,16 个 Q/K heads 会按照分组关系复制到 32 个 V heads,因此 GDN kernel
实际接收的是:

B=1, H=32, dk=dv=128, BF16

所以本章表格中的 H=32 与模型的 QK/V=16/32 并不矛盾:前者是 GDN core 的实际输入
head 数,后者是 projection 输出的模型配置。

测试序列为 8K、16K 和 32K。每个长度覆盖:

  1. initial_state=None,对 token output 施加随机 dO
  2. 随机 FP32 initial_state,同时对 output/final state 施加随机 dO/dHT
  3. 三个随机种子;
  4. 比较 output/final_state/dq/dk/dv/dg/dbeta/dH0

dO/dHT 按张量规模归一化,避免序列增长只因 loss 求和尺度而放大梯度。

4.2 精度结果
Sequence Initial state Worst output rel-L2 Final-state rel-L2 dH0 rel-L2 Worst input-grad rel-L2 Worst tensor Result
8K 4.3701e-3 3.3544e-3 1.5870e-3 5.6824e-3 dk PASS
8K 4.3692e-3 N/A N/A 5.6839e-3 dk PASS
16K 4.3707e-3 3.3464e-3 1.5942e-3 5.8559e-3 dg PASS
16K 4.3704e-3 N/A N/A 5.6885e-3 dk PASS
32K 4.3710e-3 3.3549e-3 1.5840e-3 5.6805e-3 dk PASS
32K 4.3712e-3 N/A N/A 5.6893e-3 dk PASS

全部张量 finite。序列从 8K 增长到 32K 后,output、final state、dH0 和输入梯度误差
没有系统性增长,最差 relative-L2 为 5.86e-3,低于 1e-2 验收阈值。

4.3 正式性能与显存结果

测试对象为 stateful GDN,同时输出 token output 与 final state。首次 Triton 编译和 autotune
不计入稳态结果。

Seq Backend Forward median/min/p90 Backward median/min/p90 Fwd+Bwd median/min/p90 Incremental peak allocated
8K eager 74.926 / 74.097 / 75.677 ms 357.230 / 356.838 / 357.477 ms 455.672 / 452.192 / 460.131 ms 4346.0 MiB
8K Triton 9.384 / 9.305 / 9.466 ms 26.343 / 25.800 / 26.759 ms 36.022 / 35.381 / 36.413 ms 1135.0 MiB
16K eager 139.751 / 138.399 / 142.614 ms 1393.546 / 1392.996 / 1393.683 ms 1585.064 / 1578.077 / 1587.287 ms 8667.8 MiB
16K Triton 17.685 / 17.598 / 17.724 ms 52.790 / 51.404 / 53.109 ms 70.862 / 70.116 / 71.712 ms 2258.0 MiB
32K eager 352.325 / 326.949 / 362.839 ms 5171.605 / 5168.136 / 6708.731 ms 5525.082 / 5507.708 / 7069.434 ms 17303.6 MiB
32K Triton 34.913 / 34.511 / 35.333 ms 102.955 / 100.557 / 103.585 ms 137.857 / 135.614 / 138.853 ms 4502.0 MiB
64K eager 732.588 / 715.411 / 761.692 ms 19475.424 / 19466.559 / 20074.664 ms 20214.181 / 20184.151 / 20815.913 ms 34559.7 MiB
64K Triton 68.398 / 67.449 / 68.680 ms 204.345 / 199.881 / 205.068 ms 272.523 / 267.829 / 273.651 ms 8998.0 MiB
Seq Forward speedup Backward speedup Fwd+Bwd speedup Incremental peak reduction
8K 7.98× 13.56× 12.65× 3.83×
16K 7.90× 26.40× 22.37× 3.84×
32K 10.09× 50.23× 40.08× 3.84×
64K 10.71× 95.31× 74.17× 3.84×

eager backward 保存并遍历逐 chunk 的大 autograd 图,其开销随 local chunk 数增长明显;
因此 16K/32K/64K 的 backward speedup 持续高于 8K。64K 本轮只补充性能和显存,未加入
第 4.2 节精度矩阵。上述加速比只说明 GDN core 融合收益,不能直接当作完整 Linear
Attention 层或整网收益。

4.4 为什么单卡算子不做 200-step optimizer 轨迹

单独的 GDN core 没有 projection/MLP 等可训练参数,也不执行 optimizer update。对同一个纯
函数重复 200 次只能重复相同前反向,不能证明训练轨迹稳定性。因此算子级精度采用长序列、
stateful/stateless、多个随机种子和完整 dO/dHT 梯度覆盖;真正的 100/200-step 非零学习率
验证放在第 6 章整网中完成。

5. CP 完整 Linear Attention 层验证

5.1 测试范围与配置

完整层覆盖:

QKV/Z/A/B projections
Conv1D CP halo
Q/K L2Norm
GDN core
RMSNormGated
out projection

基础配置为:

batch=1
hidden=2048
QK/V heads=16/32
head_k_dim=head_v_dim=128
dtype=BF16

无 CP eager 层作为数学 reference。CP 模式比较 Ulysses Triton、P2P Triton 和
AllGather eager。第 4 章已独立验证 Triton GDN 与 eager 的误差,因此本章重点验证 CP
布局转换、Conv halo、状态传递、输出顺序和参数梯度。

5.2 CP4 完整层精度

无 padding 结果:

Global/local seq Mode Output rel-L2 Input-grad rel-L2 Parameter-grad rel-L2 Grad-norm rel Result
8K/2K Ulysses Triton 4.4878e-3 5.8683e-3 5.0716e-3 3.76e-5 PASS
8K/2K P2P Triton 4.4878e-3 5.8687e-3 5.0719e-3 3.76e-5 PASS
8K/2K AllGather eager 0 1.5769e-4 2.3462e-3 见说明 PASS
32K/8K Ulysses Triton 4.4771e-3 5.8584e-3 5.0756e-3 3.7054e-5 PASS
32K/8K P2P Triton 4.4771e-3 5.8587e-3 5.0757e-3 3.7163e-5 PASS
32K/8K AllGather eager 1.3481e-4 3.5978e-4 2.3472e-3 1.0898e-6 PASS

AllGather eager 在 8K 下的 global grad norm 同样 finite 且通过阈值;该次早期日志未输出精确
relative 数字,因此不构造缺失值。

尾部 padding 使用 B=2, global sequence=8192, valid_length=7777

Mode Output rel-L2 Input-grad rel-L2 Parameter-grad rel-L2 Grad-norm rel Padding output
Ulysses Triton 4.4850e-3 5.8654e-3 5.0812e-3 3.9913e-5 exact zero
P2P Triton 4.4850e-3 5.8663e-3 5.0816e-3 3.9913e-5 exact zero
AllGather eager 0 1.6009e-4 2.3466e-3 2.2360e-7 exact zero

这一配置专门覆盖真实训练中的变长样本和 batch padding,而不是为了增加一个任意 shape:

  1. 当前模型的 padding helper 只在二维 mask 且 batch>1 时进入实际 masking 分支,B=2
    因此既覆盖真实 [B,S] 路径,也可发现错误广播或只处理第一条样本的问题;
  2. 7777 既不能被 CP4 的 local sequence 2048 整除,也不能被 GDN chunk size 64
    整除,valid/padding 边界落在 rank3 的一个 GDN chunk 内部;
  3. 它检查各 rank 的 local mask 切片、projection/Conv 前的 hidden-state masking、通信后的
    token 顺序、padding output 为零,以及整体输入/参数梯度与无 CP reference 一致;
  4. 全有效长度 case 无法暴露 mask 分支、CP 尾部切片和 partial chunk 问题。

P2P 与 Ulysses 的误差几乎逐项一致,说明三跳 forward state chain 和反向
state-gradient chain 没有额外放大 BF16/Triton 误差;32K 相比 8K 也没有误差增长。

5.3 CP4 性能与显存
Global/local seq Mode Forward median/min/p90 Fwd+Bwd median/min/p90 Backward estimate Peak allocated Peak reserved
32K/8K Ulysses 24.430 / 24.006 / 24.787 ms 76.884 / 75.854 / 77.704 ms 52.454 ms 1883.8 MiB 2522.0 MiB
32K/8K P2P 19.644 / 19.541 / 19.708 ms 65.807 / 65.294 / 66.027 ms 46.163 ms 1895.8 MiB 2486.0 MiB
64K/16K Ulysses 45.806 / 45.421 / 46.310 ms 160.283 / 159.313 / 161.262 ms 114.477 ms 3680.3 MiB 4924.0 MiB
64K/16K P2P 40.015 / 39.869 / 40.259 ms 132.973 / 132.079 / 133.532 ms 92.957 ms 3692.3 MiB 4916.0 MiB
128K/32K Ulysses 100.589 / 99.538 / 101.233 ms 311.687 / 309.306 / 314.530 ms 211.097 ms 7274.4 MiB 9860.0 MiB
128K/32K P2P 79.682 / 79.167 / 79.893 ms 281.569 / 280.434 / 282.688 ms 201.887 ms 7286.4 MiB 9716.0 MiB

Backward estimate = Fwd+Bwd median - Forward median,只用于宏观拆分,不等价于独立计时。

Global seq P2P Forward 加速 P2P Fwd+Bwd 加速 allocated 差值(P2P-Ulysses)
32K 19.6% 14.4% +12.0 MiB
64K 12.6% 17.0% +12.0 MiB
128K 20.8% 9.7% +12.0 MiB

三个长度下 P2P 均更快。allocated 固定多约 12 MiB,随序列增长后占比迅速下降;reserved
并未更高。收益不随序列单调增长,原因是 local GDN tiling、Ulysses all-to-all 和 P2P
summary/backward 各部分占比都会随 local chunk 数变化。

5.4 CP8 扩展性能与显存
Global/local seq Mode Forward median/min/p90 Fwd+Bwd median/min/p90 Backward estimate Peak allocated Peak reserved
64K/8K Ulysses 30.680 / 27.362 / 32.030 ms 98.427 / 97.544 / 99.281 ms 67.747 ms 1947.9 MiB 2740.0 MiB
64K/8K P2P 20.417 / 20.302 / 20.507 ms 67.336 / 66.817 / 67.618 ms 46.920 ms 1895.8 MiB 2486.0 MiB
128K/16K Ulysses 64.016 / 63.588 / 64.787 ms 279.313 / 276.145 / 280.709 ms 215.297 ms 3808.5 MiB 5350.0 MiB
128K/16K P2P 46.063 / 44.509 / 46.727 ms 151.257 / 148.916 / 153.277 ms 105.193 ms 3692.3 MiB 4916.0 MiB
Global seq P2P Forward 加速 P2P Fwd+Bwd 加速 allocated 差值(P2P-Ulysses)
64K 33.5% 31.6% -52.1 MiB
128K 28.0% 45.8% -116.2 MiB

固定 local sequence 的弱扩展:

Local seq Mode CP4 → CP8 Forward CP4 → CP8 Fwd+Bwd
8K P2P +3.9% +2.3%
8K Ulysses +25.6% +28.0%
16K P2P +15.1% +13.8%
16K Ulysses +39.8% +74.3%

P2P 保持每个 rank 的完整 32 个 GDN heads,CP 增长主要增加较小的 state-summary apply
和状态传递链。Ulysses 在 CP8 将 32 个 repeated heads 切到每 rank 4 heads,降低 fused GDN
kernel 的 head 并行度,同时增加前反向 all-to-all,因此 CP8 下扩展损失明显更大。

6. 四层 Qwen3.5 整网验证

6.1 模型、数据与并行拓扑
Qwen3.5 dense, 4 layers
layer types = [linear, linear, linear, full]
hidden = 2048
intermediate = 6144
QK/V heads = 16/32
head dim = 128
dtype = BF16
optimizer = AdamW
learning rate = 1e-4
weight decay = 0.01

每一步从真实 token 数据流读取不同序列,学习率非零;reference 与候选各自执行
forward、backward 和 optimizer update。

主精度报告覆盖两种 FSDP+CP 拓扑:

拓扑 总卡数 逻辑样本数/step 参数分片与验证目的
CP4(FSDP group=4)/100 steps 4 1 每层及 root 参数在 4-rank CP/loss group 上 fully shard
CP8(FSDP group=8)/200 steps 8 1 每层及 root 参数在 8-rank CP/loss group 上 fully shard,并验证七跳 P2P 链

这里的 CP4/CP8 均已开启 FSDP 参数分片。FSDP 复用对应的 CP/loss group:CP4 时
group size 为 4,CP8 时 group size 为 8。每个 rank 处理同一条样本的一个序列分片,
并持有参数 shard;它不是额外乘一个独立 DP 维度,因此也不需要 16/64 张卡。

6.2 多步 loss 与 grad norm 精度

下表同时给出 reference 数值量级、最大绝对误差和最大相对误差:

Topology Mode Steps Reference loss range Max loss abs Max loss rel Reference grad-norm range Max grad-norm abs Max grad-norm rel
CP4(FSDP group=4) Ulysses 100 5.573–8.448 2.6097e-3 3.6715e-4 2.052–4.545 1.7036e-2 3.7480e-3
CP4(FSDP group=4) P2P 100 5.573–8.448 2.6107e-3 3.6729e-4 2.052–4.545 1.8070e-2 3.9756e-3
CP8(FSDP group=8) Ulysses 200 5.799–8.448 2.6898e-3 3.7746e-4 2.072–3.169 1.7224e-2 3.7883e-3
CP8(FSDP group=8) P2P 200 5.799–8.448 2.6526e-3 3.7223e-4 2.072–3.169 1.7531e-2 3.8563e-3

CP8 为减少日志量只定期打印 step,但上述最大误差在全部 200 步逐步更新;range 表示已记录
reference 的观测范围。

两种模式的 loss 最大相对误差均低于 4e-4。CP4/CP8 的 grad norm 约为 2–4.5,最大绝对
差约为 0.017–0.018,对应最大相对差约 0.38%–0.40%。少数 step 未满足最初预设的
1e-3 max-grad 判据,但 Ulysses 与 P2P 的幅度相同,且 100/200 步均无 NaN/Inf、无持续
扩大,因此不是 P2P 状态递推特有误差。平均 grad-norm relative diff 约为 2.3e-4

AllGather eager 额外完成 10 步功能回归:

max_loss_abs      = 6.5422e-4
max_loss_rel      = 8.1859e-5
max_grad_norm_abs = 6.3348e-4
max_grad_norm_rel = 2.8675e-4
6.3 CP4(FSDP group=4)整网性能与显存

计时覆盖模型 forward,或 cross entropy + 完整 backward + FSDP root backward hook;
无 activation checkpoint。

Global/local seq Mode Forward median/min/p90 Fwd+Bwd median/min/p90 Global tokens/s Peak allocated Peak reserved
8K/2K Ulysses 44.702 / 40.970 / 45.755 ms 140.436 / 136.671 / 144.270 ms 58332 2299.1 MiB 2820.0 MiB
8K/2K P2P 45.742 / 45.371 / 46.589 ms 135.489 / 131.782 / 141.823 ms 60463 2263.4 MiB 2692.0 MiB
16K/4K Ulysses 57.754 / 57.438 / 59.125 ms 198.460 / 197.207 / 199.461 ms 82556 4048.0 MiB 4844.0 MiB
16K/4K P2P 57.009 / 56.320 / 59.884 ms 189.960 / 189.007 / 191.406 ms 86250 3964.0 MiB 4764.0 MiB
Global seq P2P Forward P2P Fwd+Bwd Throughput Peak allocated
8K 慢 2.3% 快 3.5% 高 3.7% 低 35.7 MiB
16K 快 1.3% 快 4.3% 高 4.5% 低 84.0 MiB

完整 optimizer step 额外覆盖 zero_grad + forward + loss + backward + FSDP reduce + AdamW.step

Global seq Run Ulysses median/min/p90 P2P median/min/p90 P2P 收益
8K 1 168.855 / 156.113 / 183.415 ms 154.029 / 149.680 / 159.343 ms 8.8%
8K 2 160.484 / 157.707 / 163.556 ms 155.676 / 152.605 / 161.796 ms 3.0%
16K 1 217.475 / 214.653 / 222.585 ms 209.087 / 206.714 / 211.343 ms 3.9%

8K 第一轮 Ulysses 的 p90 波动较大,因此增加第二轮对称复测。结论应引用 3.0%–8.8%
实测区间,不能只引用第一轮。整网收益低于完整单层,是因为模型还包含 1 层 full attention、
4 层 MLP/norm、embedding、lm_head、loss 和 FSDP 公共开销。

为区分“序列长度”和“模型层数”两个变量,进一步在当前提交上固定 CP4、
global/local sequence=64K/16K、BF16、hidden=2048、Linear/Full=3:1、无 activation
checkpoint、rank-max、warmup=5/repeat=20,分别复测 4 层和 8 层模型。8 层测试进一步
将 Fwd+Bwd 放在独立进程中采样,避免先测 forward 留下的编译/HCCL workspace 干扰显存:

Layers Layer composition Mode Fwd+Bwd median/min/p90 Global tokens/s Peak allocated
4 3 Linear + 1 Full Ulysses 854.047 / 851.405 / 855.557 ms 76736 15986.9 MiB
4 3 Linear + 1 Full P2P 778.644 / 776.155 / 921.741 ms 84167 15614.9 MiB
8 6 Linear + 2 Full Ulysses 1686.321 / 1680.936 / 1690.159 ms 38863 30196.3 MiB
8 6 Linear + 2 Full P2P 1529.381 / 1523.421 / 1531.952 ms 42851 29452.2 MiB
Layers P2P Fwd+Bwd time reduction Throughput increase Peak allocated reduction
4 8.83% 9.68% 372.0 MiB / 2.33%
8 9.31% 10.26% 744.1 MiB / 2.46%

4 层 P2P 的 p90 受到同机其他任务启动时的三个慢样本影响,但 median/min 分别为
778.644/776.155 ms,optimizer-step median 为 783.762 ms,均得到约 9% 的一致收益;
因此主结论使用抗离群值的 rank-max median,不使用这次 p90 推断稳定性。

这组同代码、同长度结果表明,历史约 9.1% 并不是“8 层累积”才出现的收益:4 层与
8 层都稳定在约 9%。固定 3:1 层型比例时,模型加深会同时增加 Linear Attention 和
Full Attention,P2P 可节省部分与整网总时间近似同比增长,因此相对收益本来就应接近;
8 层只会进一步摊薄 embedding、lm_head、loss 和 FSDP root 等一次性开销。历史结果中
4 层或 8 层谁略高不到 1 个百分点,可能来自 kernel 调度、共享负载和统计波动,不能解释为
层数带来的结构性反转。

绝对时间也支持这一判断:4 层时 P2P 节省 75.403 ms,8 层时节省 156.940 ms,后者为
前者的 2.081x;与此同时 Ulysses/P2P 的整网时间分别增长为 1.974x/1.964x。若仅用
这两个点作线性分解,可写为 T_ulysses ~= 21.77 + 208.07 * layers
T_p2p ~= 27.91 + 187.68 * layers(单位 ms)。它说明 P2P 有约 6.14 ms 的额外固定开销,
但每增加一层平均少约 20.38 ms;模型加深后相对收益只会从 4 层的 8.83% 缓慢趋近约
9.8%,不会随层数翻倍。该两点模型只用于解释本组数据,不用于外推其他 sequence/CP 配置。

此前 4 层 8K/16K 只快 3.5%/4.3%,真正变化的是序列长度。短 local sequence=2K/4K
时,P2P summary、状态 apply 和通信调度的固定成本占比较高,Ulysses 大张量 all-to-all 与
小-head fused-kernel 代价尚未充分放大,同时整网公共计算占比更高。到 local sequence=16K
后,当前正式分支单个 Linear Attention 层的 P2P Fwd+Bwd 已比 Ulysses 快 17.0%;三个
Linear 层的绝对节省足以在 4 层整网中留下 8.83%,而不是被公共计算完全稀释。

历史 8 层 CP4/64K 的 1695.629 -> 1540.577 ms9.1%)也被当前复测的
1686.321 -> 1529.381 ms9.31%)复现。两轮绝对时间相差不足约 1%,说明当前正式分支
与历史长序列性能结论一致。收益不应按层数线性相加;应比较节省的绝对时间占完整整网时间的
比例,并始终保持序列长度、层型比例、checkpoint 和计时口径一致。

6.4 CP8(FSDP group=8)整网性能与显存

CP8 使用 global/local sequence=128K/16K,与上一节 CP4/64K 保持每 rank local sequence
和模型 shape 不变,只将 CP size 从 4 增至 8。Fwd+Bwd 在独立进程中采样,计时仍为
rank-max、warmup=5/repeat=20

Layers Layer composition Mode Forward median/min/p90 Fwd+Bwd median/min/p90 Global tokens/s Peak allocated
4 3 Linear + 1 Full Ulysses 338.300 / 336.268 / 339.827 ms 1151.401 / 1136.448 / 1225.878 ms 113837 15645.2 MiB
4 3 Linear + 1 Full P2P 286.702 / 284.926 / 288.565 ms 967.863 / 963.211 / 971.105 ms 135424 15273.2 MiB
8 6 Linear + 2 Full Ulysses 673.660 / 671.016 / 676.486 ms 2276.529 / 2265.003 / 2281.391 ms 57575 30068.0 MiB
8 6 Linear + 2 Full P2P 568.868 / 566.740 / 570.243 ms 1915.960 / 1906.424 / 1922.836 ms 68411 29324.0 MiB
Layers P2P Forward time reduction P2P Fwd+Bwd time reduction Throughput increase Peak allocated reduction
4 15.25% 15.94% 18.96% 372.0 MiB / 2.38%
8 15.56% 15.84% 18.82% 744.0 MiB / 2.47%

固定 local sequence 从 CP4 扩展到 CP8:

Layers Ulysses Fwd+Bwd growth P2P Fwd+Bwd growth
4 34.82% 24.30%
8 35.00% 25.28%

CP8 下 Ulysses 仍需更大规模的前反向 all-to-all,并将 32 个 repeated GDN heads 切到每
rank 4 heads,fused kernel 的 head 并行度进一步下降。因此在相同 local workload 下,
Ulysses 的整网时间稳定增长约 35%。P2P 保持每 rank 完整 heads,只增加状态链 hop 数,
所以增长较小,P2P 相对收益从 CP4 的约 9% 扩大到 CP8 的约 15.9%

8 层 CP8 的早期轮次曾出现 Ulysses 2730.649 ms、P2P p90 6401.113 ms 等异常长尾。
在确认无其他 NPU 进程后,重新输出全部 20 个 rank-max 样本:Ulysses forward 稳定在
671.016--678.263 ms,P2P forward 稳定在 566.740--578.844 ms,P2P Fwd+Bwd 稳定在
1906.424--1924.061 ms。表中只使用这组逐样本可审计的稳定复测,不使用异常轮次。

4 层与 8 层的显存差值分别为约 372/744 MiB,随 Linear Attention 层数近似成比例;
相对降幅都约 2.4%。CP4 到 CP8 保持 local sequence 不变后,两种模式的 per-rank peak
allocated 基本不变,符合 CP 将新增全局 token 分摊到新增 rank、而非增加单 rank 激活规模的
预期。

6.4.1 为什么单层收益进入整网后会下降

第 5 章的“完整单层”实际是一个完整 Qwen3_5GatedDeltaNet 模块,包含 projection、Conv、
GDN、gate/norm 和 output projection,但不包含 Transformer block 的 residual/norm/MLP,
也不包含 Full Attention、embedding、lm_head、cross entropy、FSDP 参数通信和 optimizer。
因此单层百分比不能直接作为整网百分比相加。

CP4/64K 下,单个 GDN 模块 Fwd+Bwd 从 160.283 降至 132.973 ms,节省
27.310 ms。4 层模型包含三个 Linear Attention,按单层估算节省 81.930 ms;整网实测
节省 75.403 ms,保留了约 92% 的绝对单层收益。整网百分比仍从单层 17.0% 降到
8.83%,是因为分母从一个 GDN 模块扩展成了包含 MLP、Full Attention、loss 和 FSDP 的
完整模型。这是标准的 Amdahl 稀释,不表示 P2P kernel 本身退化了一半。

CP8/128K 可以进一步拆成 forward 与 backward:

Stage Isolated one-GDN saving 4-layer expected for 3 GDN 4-layer measured saving Retained
Forward 17.953 ms 53.859 ms 51.598 ms 95.8%
Backward estimate 110.104 ms 330.312 ms 131.940 ms 40.0%

forward 中,三个 Linear Attention 的绝对收益几乎完整传递到整网;整体 forward 加速仍只有
15.25%,因为约 43% 的 Ulysses forward 时间属于不可由 Linear Attention P2P 优化的公共
部分。主要非线性损失发生在 backward:孤立模块用随机 output gradient 直接启动 backward,
没有 FSDP reduce-scatter、上游 MLP/Full Attention 和层间 collective;整网中 P2P 产生的
rank-ready skew 会在这些同步边界暴露为等待,且 P2P/HCCL 与 FSDP collective 共用通信资源。
因此孤立模块的 backward 节省不能按三倍直接累加。

上述 backward 原因是基于绝对时间分解得到的定位结论;要把约 198 ms 的未保留收益进一步
归因到 state-gradient chain、FSDP reduce-scatter 或 Full Attention barrier,需要补一组
CP8 四层整网 Level0 trace。它不影响当前结论:稳定整网收益约 15.9%,而“单层约 20% 到
整网约 9%”主要由公共计算分母稀释,CP8 额外包含 backward 层间同步效应。

6.5 Full activation checkpoint 验证

前述主精度与性能表使用 activation_checkpoint=off。为覆盖训练时常用的整层激活重计算,
本轮使用完全相同的模型、数据、FSDP 拓扑和优化器,额外设置:

train.gradient_checkpointing.activation_checkpoint = "full"

Hyper-Parallel 使用 non-reentrant checkpoint 包装每个 Decoder Layer。开启后,GDN custom
autograd function 在正常前向执行一次,并在 backward-time layer recompute 中再执行一次;
原始 custom backward 仍只执行一次。因此 P2P 每个 optimizer step 会执行两次正向 state
chain 和一次反向 state-gradient chain,CP8 对应在 backward 中重放七跳正向链。

多步精度结果如下:

Topology Mode Steps Max loss abs Max loss rel Max grad-norm abs Max grad-norm rel
CP4(FSDP group=4) Ulysses 100 2.6894e-3 3.7835e-4 1.5767e-2 3.4677e-3
CP4(FSDP group=4) P2P 100 2.6560e-3 3.7270e-4 1.6611e-2 3.6539e-3
CP8(FSDP group=8) Ulysses 200 2.8358e-3 3.9793e-4 2.3049e-2 6.1685e-3
CP8(FSDP group=8) P2P 200 2.7986e-3 3.9372e-4 1.8378e-2 4.0434e-3

四组轨迹均完成全部 optimizer steps,无死锁、P2P 顺序错配、NaN/Inf 或误差持续扩大。
表中误差是各 CP/FSDP 路径相对单卡参考的并行数值误差,不能解释成 activation checkpoint
引入的误差。不同独立运行取到的最大值也不能直接作为 checkpoint-off/full 的配对差值。

为直接验证重计算是否改变数值,另在 CP4/P2P 下设置
HCCL_DETERMINISTIC=Truetorch.use_deterministic_algorithms(True),固定模型、数据、seed
及优化器,执行以下配对检查:

  1. checkpoint-off 独立重复两次;
  2. checkpoint-full 独立重复两次;
  3. checkpoint-off 与 checkpoint-full 逐 step 比较。

10 步内三组比较的 CP loss、CP grad norm、相对单卡误差和最终 summary 均逐打印位完全一致。
这说明当前 P2P Triton 路径在该配置下可确定复现,full checkpoint 的 backward-time forward
重放没有改变 output、gradient 或 optimizer trajectory。此前 off/full 表中最大误差的轻微差异
来自非配对独立运行及其最大值统计口径,不能归因于 checkpoint,也没有证据表明 summary
Triton 算子不支持确定性。

长序列性能与显存结果如下。checkpoint-off 数据来自第 6.3/6.4 节的同 shape 稳定复测:

Topology Activation checkpoint Ulysses Fwd+Bwd P2P Fwd+Bwd P2P time reduction Ulysses peak allocated P2P peak allocated
CP4, global/local=64K/16K off 854.047 ms 778.644 ms 8.83% 15986.9 MiB 15614.9 MiB
CP4, global/local=64K/16K full 1082.048 ms 990.121 ms 8.50% 5602.3 MiB 5478.3 MiB
CP8, global/local=128K/16K off 1151.401 ms 967.863 ms 15.94% 15645.2 MiB 15273.2 MiB
CP8, global/local=128K/16K full 1481.585 ms 1248.249 ms 15.75% 5490.1 MiB 5366.1 MiB

整层重算使 CP4 的 Ulysses/P2P Fwd+Bwd 分别增加 26.70%/27.16%,CP8 分别增加
28.68%/28.97%,对应重跑一次 Decoder Layer forward 的预期代价。两种拓扑下 peak
allocated 均下降约 64.9%。P2P 相对收益只从 8.83%/15.94% 变为
8.50%/15.75%,表明 activation checkpoint 没有破坏 P2P 的性能优势或弱扩展趋势。

测试启动时还验证了 Triton 动态库环境:torchrun 子进程必须保证当前 Python 环境的
libstdc++ 位于 LD_LIBRARY_PATH 首位;否则加载系统 /usr/lib64/libstdc++.so.6 会因缺少
GLIBCXX_3.4.29 导致 capability fail-fast。修正动态库顺序后,输入 contract 和 Triton
backend 判定均通过。

7. Level0 Profile 与稳定性

CP4/64K 的 Ulysses Triton 与 P2P Triton 各采集一次 Level0 前反向 trace。Level0 关闭
AIC metrics、shape 和 stack 收集;profile elapsed 不进入第 5 章正式性能表。

Mode Rank Computing Communication Comm not overlapped Comm overlapped
P2P 0 118.75 ms 12.21 ms 12.07 ms 0.14 ms
P2P 1 129.59 ms 15.57 ms 5.74 ms 9.83 ms
P2P 2 129.62 ms 14.66 ms 4.79 ms 9.87 ms
P2P 3 121.63 ms 12.44 ms 12.32 ms 0.12 ms
Ulysses 0 144.35 ms 18.41 ms 18.41 ms 0
Ulysses 1 145.26 ms 17.31 ms 17.31 ms 0
Ulysses 2 146.06 ms 16.52 ms 16.52 ms 0
Ulysses 3 143.63 ms 16.71 ms 16.71 ms 0

P2P 中间 rank 约 9.8 ms communication 被设备计算覆盖,边界 rank 的通信主要体现为状态
等待;Ulysses 的序列/头布局转换在该 trace 中为非重叠通信。单个 P2P HcclSend device
self duration 约 0.12–0.14 ms,说明状态 tensor 传输带宽不是主要瓶颈,后续优化重点应是
state-ready chain 和 summary/gradient-summary 计算。

每个分布式 mode 连续执行至少 20 次前反向,未观察到 P2P 顺序错配、async buffer 生命周期
错误、死锁、NaN/Inf 或显存持续增长。

8. PR 可引用结论

  1. 单卡 GDN 在 S=8K/16K/32K,H=32,dk=dv=128,BF16 下完成 eager/Triton
    前反向对齐;output、final state、dq/dk/dv/dg/dbeta/dH0 最差 relative-L2 为
    5.86e-3,且误差不随序列长度增长。
  2. 单卡 GDN Triton 相对 eager 的 Fwd+Bwd 加速为 8K 12.65×、16K 22.37×
    32K 40.08× 和 64K 74.17×,incremental peak allocated 均降低约 3.84×
    64K 只补测性能和显存;这些结果是 GDN core 收益,不代表整层收益。
  3. CP4 完整 Linear Attention 层覆盖 8K/32K、padding mask、output、input gradient、
    parameter gradient 和 global grad norm。Ulysses Triton、P2P Triton 和 AllGather eager
    均通过,P2P 与 Ulysses 的误差几乎逐项一致。
  4. 四层 Qwen3.5 在真实 token stream、BF16、AdamW 和非零学习率下完成 CP4/100 步和
    CP8/200 步轨迹。loss 最大相对误差低于 3.8e-4,无 NaN/Inf 或持续漂移;两种 mode
    的 max grad-norm relative diff 均约 3.8e-3–4.0e-3,不是 P2P 特有偏差。
  5. CP4/CP8 整网测试均启用 FSDP:参数分别在 4-rank/8-rank CP/loss group 上 fully shard,
    并完成对应的 SUM reduce-scatter 和 optimizer update。
  6. 完整单层中,P2P 相对 Ulysses 的 Fwd+Bwd 加速为 CP4/32K 14.4%、CP4/64K
    17.0%、CP4/128K 9.7%、CP8/64K 31.6%、CP8/128K 45.8%
  7. 四层整网 CP4 短序列 8K/16K 中,P2P 的端到端 Fwd+Bwd 加速为 3.5%/4.3%
    global/local sequence=64K/16K 时,4 层和 8 层整网分别加速 8.83%/9.31%,证明
    历史约 9.1% 主要对应长序列 workload,而不是只由模型加深产生。
  8. 保持 local sequence=16K 扩展到 CP8/global sequence=128K 后,4 层 P2P
    Fwd+Bwd 加速 15.94%,8 层逐样本稳定复测加速 15.84%;对应 forward 分别加速
    15.25%/15.56%,P2P peak allocated 均比 Ulysses 低约 2.4%
  9. CP4/64K Level0 显示单次 P2P send 约 0.12–0.14 ms,中间 rank 存在计算通信重叠;
    P2P 后续优化应优先面向 state summary,而不是继续优化很小的状态传输。
  10. CPU UT、fail-fast、wheel 隔离安装和文件入包检查均通过,Triton 不支持条件不会静默回退。
  11. Full activation checkpoint 下,CP4/100 步和 CP8/200 步均完成;P2P 在 backward-time
    recompute 中稳定重放三跳/七跳正向状态链。整网 peak allocated 下降约 64.9%,P2P
    相对 Ulysses 的 Fwd+Bwd 收益仍为 CP4 8.50%、CP8 15.75%

schema_version: 1
source: gitcode
gitcode_repo: mindspore/hyper-parallel
gitcode_issue: 320
source_url: https://gitcode.com/mindspore/hyper-parallel/issues/320

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

The issue provides a detailed test report but does not name a target documentation file or specify a requested change. Start by locating where this report should be added, then review the cited CPU UT, git diff check, wheel contents, and CP/GDN validation sections. Done means the report is placed in the intended documentation location with its stated results and scope preserved.

Written by the indexing model from the issue text.

Assessment

Tech stack
git, python
Domain
distributed-systems, documentation, testing-qa
Issue type
Documentation
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.