已开启
[Feature][Q3社区任务]:TransformerEngineNPU Triton mHC H 矩阵生成(Projection、Scale、Sinkhorn)开发 #30
Liz创建于  8月15日
Liz成员
8月15日 创建

任务描述

基于 TransformerEngineNPU 开放仓库进行 mHC H 矩阵生成链路的 Triton 功能开发

任务交付件

本期任务为基于 TransformerEngineNPU 开放仓库进行 mHC H 矩阵生成链路的 Triton 功能开发,请合入开发代码。语义和精度参考 NVTE v2.17 mHC 实现,本期限定 n=4。主要开发点如下:

  1. 实现 mhc_fused_projection 前向与反向,输出投影结果及均方统计量;
  2. 实现 mhc_fused_scale 前向与反向,生成 H_pre、H_post、H_res;
  3. 实现 mhc_fused_sinkhorn 前向与反向,支持 recompute_hist=True/False 及默认 20 次迭代;
  4. 完成 tl.dot、归约、原子加和精度配置的 NPU Triton 适配,不依赖 CUDA 专属配置;
  5. 支持 FP32、BF16,补充输出及全部输入、参数梯度测试;
  6. 补充典型 shape、边界 shape 和非规则 shape 测试;
  7. 提交性能测试脚本及测试结果。
  8. 填写昇腾社区开发体验报告

验收标准

  1. 性能目标:在双方约定的典型及边界 shape 上,对比同机同卡 PyTorch 组合实现,平均性能无劣化,单项性能回退不超过 5%;本期不要求复刻 CUDA autotune 配置;
  2. 精度目标:三个 API 的输出及全部输入、参数梯度与 NVTE/PyTorch 参考实现对齐,FP32 atol≤5e-3、rtol≤5e-3,BF16 atol≤2.5e-2、rtol≤2.5e-2;n=4 及 Sinkhorn 两种 history 模式测试通过;
  3. 显存目标:峰值显存无明显劣化,原则上相对参考实现增幅不超过 5%,反复前反向无显存泄漏;
  4. 实践文档:提交特性说明与开发文档 1 篇,包含算法说明、接口契约、精度策略、非确定性行为、已知限制及测试数据;
  5. 任务完成标准:功能、精度、性能及显存目标达标,前向、反向和边界测试通过,PR 完成合入,实践文档提交到仓库 issue。

PR合入

本地完成测试验证后,向TransformerEngineNPU的main分支及2.17分支发起PR。

对接人

Liz

欢迎加入社区,感谢您对社区的贡献 🎉!

likedislike
LLiz成员
8月15日 添加了label:feature
LLiz成员
8月15日 修改了issue 的描述
LLiz成员
8月15日 修改了issue 的描述
LLiz成员
8月15日 修改标题为 “[Feature][Q3社区任务]:TransformerEngineNPU Triton mHC H 矩阵生成(Projection、Scale、Sinkhorn)开发”,原标题为“[Feature][Q3社区任务]:TransformerEngineNPU Triton mHC 激活聚合与展开(Aggregate、ExpandCombine)”
LLiz成员
8月15日 修改了issue 的描述
LLiz成员
8月15日 修改了issue 的描述
LooongCat
8月21日 评论:

认领这个任务

likedislike
LLooongCat
8月21日 关联了pull request:[Issue #30] NPU Triton mHC H-matrix generation (projection/scale/sinkhorn)
LooongCat
8月21日 评论:

进展更新(Issue #30)

已完成 NPU Triton mHC H 矩阵生成实现与验证,并向 main 提交 PR。

结果

  • 精度:pytest tests/pytorch/test_mhc_h_matrix.py → 20/20 PASSED
  • 性能:平均约 3.34x vs PyTorch ref;单项回退 0(≤5% 门禁)
  • 文档:docs/mhc/h_matrix_generation.md、perf_results.md、experience_report.md

体验摘要

  • Ascend Triton: l.where().sum() 链式不可用;Sinkhorn hist 缓冲反向需 recompute
  • Projection 小 shape 上 Triton GEMM 慢于 orch.matmul,默认走可微 matmul,kernel 仍保留供参考
  • 工具链:Temp_room 内隔离 conda + GCC≥9,未改系统/驱动

分支说明

上游暂无 2.17 分支(仅 main /
elease_v2.15),故先 PR → main;2.17 开出后再补。

likedislike
LooongCat
8月21日 评论:

PR #146 已更新:精度扩展为 600 参数化 case,NPU 复测 601 passed(npu:0 / Ascend910B3);性能平均 ~3.195x,>5% 回退 0;复测明细已写入 PR 描述。

likedislike
LooongCat
8月21日 评论:

PR #146 已更新:精度扩展为 600 参数化 case,NPU 复测 601 passed(npu:0 / Ascend910B3);性能平均 ~3.195x,>5% 回退 0;复测明细已写入 PR 描述。

likedislike
LooongCat
8月21日 评论:

精度 case 已改为小/中/大分层:Projection 至 (8192,4096)/K=8192,Scale M 至 32768,Sinkhorn 至 (2048,8)。NPU 复测仍 601 passed;详情已更新 PR 描述。

likedislike
LooongCat
8月22日 评论:

PR 描述已更新:

  1. shape 范围与测试网格对齐(Projection 至 8192、Scale 至 32768、Sinkhorn 至 2048×8);
  2. 补充大 shape 性能表(Projection/Scale 达标;Sinkhorn 在 s*b≳8192 有回退,已如实记录)。
likedislike
LooongCat
8月22日 评论:

已修复大 shape Sinkhorn 性能:s*b>=8192 走 PyTorch fallback。
复测:精度 601 passed;大 shape 性能平均 ~1.38x,REGS=0(含 s=1024/2048)。PR 描述已更新。

likedislike
LooongCat
8月22日 评论:

PR 描述已纠正为修复后复测结果:大 shape Sinkhorn 走 fallback 后 REGS=0(不再保留 0.35x 旧数字)。请刷新页面查看。

likedislike
LooongCat
8月22日 评论:

PR 描述已改为同一次实测数据生成(docs/mhc/repro_stamp.json)。
精度 601 passed;小/中 avg 3.438x REGS=0;大 shape avg 1.362x REGS=0。
正文含复现命令,可对照 JSON 核验。

likedislike
LooongCat
8月22日 评论:

任务书符合性核对(PR #146)

要求 状态 证据
实现 projection/scale/sinkhorn(n=4)前反向 通过 mhc.py / mhc_kernels.py
FP32/BF16 精度对齐 通过 pytest 601 passed(npu:0)
性能平均不劣化、单项回退≤5% 通过 small 3.438x REGS=0;large 1.362x REGS=0(docs/mhc/repro_stamp.json @ 2026-08-21T16:32:35.672289+00:00)
显存不显著/无泄漏 通过 MEM_SMOKE_OK
测试+实践/体验文档 通过 tests/pytorch/* + docs/mhc/*
PR → main 通过 MR !146
PR → 2.17 受限 上游暂无 2.17 分支,描述已说明
提交邮箱 通过 longcat_chen <longcat_eason@139.com>

结论:在现有上游分支条件下,任务书可验收项均已满足。

likedislike
LLooongCat
8月22日 关联了pull request:feat(triton): mHC aggregate / expand_combine (Issue #31)
Liz成员
9月1日 评论:

认领这个任务

@longcat_chen

欢迎认领任务,请参考前Q3社区任务池明确该任务的:

完成的截止日期
开发进展反馈
微信答疑群
任务交付注意事项
等信息。如果您同时认领了多项任务,但无法都能进行投入,可以在部分任务中回复退出.

麻烦您加入到对应微信群,群备注名修改为"社区任务+您的gitcode账号", 后续有相关消息和问题都可以在微信群咨询答疑。 等您加入到微信群后,我这边会在社区任务池里面登记任务责任人。

likedislike
LooongCat
9月1日 评论:

认领这个任务

@longcat_chen

欢迎认领任务,请参考前Q3社区任务池明确该任务的:

完成的截止日期
开发进展反馈
微信答疑群
任务交付注意事项
等信息。如果您同时认领了多项任务,但无法都能进行投入,可以在部分任务中回复退出.

麻烦您加入到对应微信群,群备注名修改为"社区任务+您的gitcode账号", 后续有相关消息和问题都可以在微信群咨询答疑。 等您加入到微信群后,我这边会在社区任务池里面登记任务责任人。

@Liz_
十天前就完成了,目前还没有验收、审核

likedislike
LooongCat
19 天前 评论:

【进展更新】按检视意见:实验/实践报告不再放在 PR docs/,全文归档到本 Issue。

对应实现 PR:!146 · RFC:#38


原 docs/mhc/experience_report.md(已从 PR docs/ 移除,归档于此)

昇腾社区开发体验报告 — TransformerEngineNPU Issue #30

任务

Triton mHC H 矩阵生成(Projection / Scale / Sinkhorn),n=4。

环境

  • 硬件:Ascend 910B3 ×2
  • CANN 9.0.0 + torch 2.7.1 + torch_npu + triton-ascend
  • 约束:不改系统包/驱动,工具链与缓存隔离

开发体验摘要

  1. 参考移植:对齐 NVTE v2.17 mHC API 与精度门禁;NPU 上去掉 CUDA general_gemm / cache modifier,默认关闭 autotune。
  2. 编译器:Triton-Ascend 需要 GCC≥9;隔离安装 conda-forge GCC + linklib,未动系统包。
  3. Ascend Triton 差异:
    • tl.where(...).sum() 链式不可用 → Scale bwd 拆临时变量;
    • Sinkhorn hist 缓冲反向在大 batch 数值不稳 → NPU 强制 recompute;
    • Triton GEMM 在小 shape 上慢于 torch.matmul → Projection 默认可微 matmul 路径,kernel 仍保留。
  4. 验证:pytest tests/pytorch/test_mhc_h_matrix.py;性能数字写在 MR 描述(不提交 benchmark JSON)。

建议

  • 文档化 Triton-Ascend 对 where().reduce / hist 缓冲的已知限制;
  • 提供官方 Temp_room 友好的 host GCC≥9 工具链说明,减少环境踩坑。

原 docs/mhc/h_matrix_generation.md(已从 PR docs/ 移除,归档于此)

mHC H 矩阵生成(Projection / Scale / Sinkhorn)— Issue #30

1. 算法说明

DeepSeek mHC 用一组 H 矩阵描述 Hyper-Connection 中的流混合。本期在 昇腾 NPU Triton 上实现 H 生成链路(语义对齐 NVTE v2.17,n=4):

API 作用
mhc_fused_projection(x, phi) H = x @ phi^T,并输出行均方 ms(供 RMS 缩放)
mhc_fused_scale(H, alpha, beta, ms, n) 生成 H_pre / H_post / H_res(含 sigmoid / 2·sigmoid)
mhc_fused_sinkhorn(H_res, n, recompute_hist, iters=20) 对数域 Sinkhorn,输出双随机矩阵

2. 接口契约

from transformer_engine.pytorch.triton.mhc import (
    mhc_fused_projection,
    mhc_fused_scale,
    mhc_fused_sinkhorn,
)

# projection: x (M,K), phi (N,K) with N=2n+n*n=24 → H (M,32 padded), ms (M,) fp32
H, ms = mhc_fused_projection(x, phi, use_tf32=False)

# scale: H (M,32), alpha (3,), beta (1,N), ms (M,)
h_pre, h_post, h_res = mhc_fused_scale(H, alpha, beta, ms, n=4)

# sinkhorn: H_res (s,b,n,n)
P = mhc_fused_sinkhorn(h_res.view(s, b, n, n), n=4, recompute_hist=True, iters=20)
  • 支持 dtype:float32、bfloat16(内部关键累加多用 fp32)。
  • H 最后一维 pad 到 32,有效宽度为 N=24。

3. 精度策略

  • 与同机 PyTorch 参考实现(见 tests/pytorch/test_mhc_h_matrix.py)对齐。
  • 门禁:FP32 atol/rtol ≤ 5e-3;BF16 atol/rtol ≤ 2.5e-2。
  • Projection 反向含 grad_ms 对 x 的贡献;Scale 反向含 alpha/beta/ms/H 梯度;Sinkhorn 反向走 recompute 路径。

4. 非确定性 / Autotune

  • 默认 NVTE_DISABLE_TRITON_AUTOTUNING=1:单 config,避免 Ascend 上冗长调参。
  • 需 NVTE_ALLOW_NONDETERMINISTIC_ALGO=1(与 TE-NPU 其它 Triton 算子一致)。

5. NPU 适配与已知限制

  1. 无 CUDA general_gemm:Projection 用 torch.matmul;kernel 侧避免 CUDA 专属 cache modifier。
  2. Scale bwd:Ascend 不支持 tl.where(...).sum() 链式表达式,已拆成临时变量再 tl.sum。
  3. Sinkhorn recompute_hist=False:大 batch 上 hist 缓冲反向数值不稳定;NPU 上 API 仍接受 False,但内部强制走 recompute(与参考精度一致)。小 shape 上 hist 路径曾可过,但不作为默认依赖。
  4. Host 编译 Triton launcher 需 GCC ≥ 9;本环境用 Temp_room 内 conda-forge GCC + tools/linklib,不改系统包。

6. 测试数据

source NPU 沙箱/env.sh   # 或等价 CANN + PATH
cd TransformerEngineNPU
python -m pytest tests/pytorch/test_mhc_h_matrix.py -v
# 性能 + 显存
python tests/pytorch/benchmark_mhc_h_matrix.py --warmup 5 --iters 20 \
  --json-out /tmp/mhc_perf_results.json

覆盖:典型 (M,K)=(32,256)/(128,512)、边界/非规则 M=17/15、Sinkhorn (s,b)=(8,4)/(3,2),FP32+BF16,前反向。

结果摘要见MR 描述中的性能表格(本地可选写 /tmp/mhc_perf_results.json)(由基准脚本跑出后填写)。

精度覆盖(shape 分层)

  • 共 600 参数化 case,强制 npu:0
  • Projection:tiny / mid / large 至 (8192,4096),K 至 8192
  • Scale:M 至 32768
  • Sinkhorn:(s,b) 至 (2048,8)(s*b 至 16384)
  • Sinkhorn:当 s*b >= 8192 时自动走可微 PyTorch fallback(保证大 shape ≤5% 性能门禁)。
likedislike
Cclc2025成员
4 天前 关联了里程碑:MindSpeed 26.3.0