已提交 Parallel Cross Entropy(Triton)实现:
- 单卡 UT 21 passed(FORCE_TRITON);2 卡词表并行 1 passed
- 默认路由:小词表走 PyTorch CE,大词表/TP 走 Triton;验收用 default_route 均值
- 详情见 PR / docs/parallel_cross_entropy/
PR: https://gitcode.com/Ascend/TransformerEngineNPU/merge_requests/148


跟进:将 Triton CE MAX_FUSED_SIZE 降至 4096,修复大词表 UB overflow;UT 复测全绿;bench default_route mean te/pt=0.833。PR https://gitcode.com/Ascend/TransformerEngineNPU/merge_requests/148


跟进验收项:补齐特性文档(接口/支持矩阵/精度/性能/限制)与体验报告;新增显存峰值(<=5%)与重复调用泄漏烟雾测试;UT 24 passed。PR https://gitcode.com/Ascend/TransformerEngineNPU/merge_requests/148


Mass 验收已补齐:精度 case 1500 passed;性能 shape 1500,mean te/pt=0.9958,max=1.0479,单点>5%回退=0。严格门禁 mean<=1 且单点<=5% 已通过。PR https://gitcode.com/Ascend/TransformerEngineNPU/merge_requests/148


已更新 PR 描述:含任务书逐项对照、完整复现步骤,以及 mass 测试规模/范围/门禁(精度 1500/1500;性能 1500 shapes,mean te/pt=0.9958,max=1.0479,单点>5%回退=0)。
PR:https://gitcode.com/Ascend/TransformerEngineNPU/merge_requests/148


@longcat_chen
欢迎认领任务,请参考前Q3社区任务池明确该任务的:
完成的截止日期
开发进展反馈
微信答疑群
任务交付注意事项
等信息。如果您同时认领了多项任务,但无法都能进行投入,可以在部分任务中回复退出.
麻烦您加入到对应微信群,群备注名修改为"社区任务+您的gitcode账号", 后续有相关消息和问题都可以在微信群咨询答疑。 等您加入到微信群后,我这边会在社区任务池里面登记任务责任人。


【进展更新】按检视意见:实验/实践报告不再放在 PR docs/,全文归档到本 Issue。
对应实现 PR:!148 · RFC:#37
原 docs/parallel_cross_entropy.md(已从 PR docs/ 移除,归档于此)
Parallel Cross Entropy(Triton)— TransformerEngineNPU
关联 Issue:#29
1. 接口说明
from transformer_engine.pytorch import parallel_cross_entropy
loss = parallel_cross_entropy(
inp, # (B, SQ, V) or (SQ, B, V), FP32 / BF16
target, # (B, SQ) or (SQ, B), global vocab indices
label_smoothing=0.0,
reduce_loss=False,
dist_process_group=None, # vocabulary-parallel process group
ignore_idx=-100,
)
语义对齐 NVTE v2.17:softmax / loss 累加在 FP32;返回 loss 为 FP32;反向梯度写回输入 dtype。
2. 支持矩阵
| 能力 | 支持 | 说明 |
|---|---|---|
| dtype | FP32 / BF16 | 关键归约与 loss 累加用 FP32 |
| label_smoothing | ✓ | [0, 1) |
| ignore_idx | ✓ | 默认 -100,零 loss/grad |
| reduce_loss True/False | ✓ | mean / per-token |
| 连续 / 非连续 / 转置 | ✓ | 非连续会 contiguous |
| 词表并行 (TP) | ✓ | dist_process_group + 本地 V shard |
| 设备 | Ascend NPU | Triton + ACL 路由 |
3. 路由策略(Ascend)
| 条件 | 实现 |
|---|---|
TE_PARALLEL_CE_FORCE_TRITON=1 |
强制 Triton |
dist_process_group is not None |
Triton(词表并行) |
V >= TE_PARALLEL_CE_TRITON_MIN_VOCAB(默认 16384) |
Triton |
| 其余单卡小词表 | PyTorch / ACL CE(同数值语义) |
4. 精度数据(对 F.cross_entropy)
| dtype | atol | rtol | 结果 |
|---|---|---|---|
| FP32 | 1e-5 | 1e-5 | UT 通过 |
| BF16 | 2e-2 | 2e-2 | UT 通过 |
单卡参数化 UT(FORCE_TRITON)覆盖:dtype × reduce × swap_dim × label_smoothing、ignore_idx、非连续转置、异常形状。2 卡词表并行冒烟通过。
5. 性能数据(同机同卡 vs PyTorch)
性能数字写在 MR 描述 / RFC(不提交 benchmark JSON 结果文件)。本地可选:
python tests/pytorch/benchmark_parallel_cross_entropy.py --json-out /tmp/ce_perf.json
| 路由 | mean ours/pt | 单点 >5% 回退 | 验收 |
|---|---|---|---|
| default_route | ≈0.833 | 无 | 通过 |
| force_triton | ≈1.06 | 小词表有启动开销 | 仅作内核对比 |
典型 shape:(2,128,4096) / (4,256,8192) / (2,512,32000) / (2,256,65536) / (1,512,128000)。
6. 显存
- 峰值:相对 PyTorch CE 增幅目标 ≤5%(见
test_memory_peak_vs_pytorch)。 - 连续调用:无泄漏(见
test_memory_no_leak_repeated)。 - 实现上对输入做 in-place 梯度暂存,额外缓冲主要为
loss[N]与(TP 时)m_d_Xygather。
7. 已知限制
- Ascend Triton
MAX_FUSED_SIZE=4096(更大 tile 易触发 910B3 UB overflow)。 n_non_ignore在 Host 侧统计(避免atomic_add兼容问题)。is_cg_capturable仅为 API 兼容,NPU 无 CUDA Graph 路径。- 上游暂无独立
2.17分支;合入main,待官方开分支后再 cherry-pick。
8. 文件清单
transformer_engine/pytorch/cross_entropy.pytransformer_engine/pytorch/triton/cross_entropy.pytransformer_engine/pytorch/triton/cross_entropy_kernels.pytests/pytorch/test_parallel_cross_entropy.pytests/pytorch/test_parallel_cross_entropy_dist.pytests/pytorch/benchmark_parallel_cross_entropy.pydocs/parallel_cross_entropy.mddocs/parallel_cross_entropy/experience_report.md
原 docs/parallel_cross_entropy/experience_report.md(已从 PR docs/ 移除,归档于此)
昇腾社区开发体验报告 — TransformerEngineNPU #29 Parallel CE
任务
基于 TransformerEngineNPU 实现 Triton Parallel Cross Entropy,语义对齐 NVTE v2.17。
环境
- 硬件:Ascend 910B3,卡 0–3
- CANN:9.0.0(
CANN toolkit) - 沙箱:
NPU 沙箱(隔离 HOME/TMP/Triton cache;复用 te_npu_30 工具链只读)
开发过程
- 对照 NVTE
parallel_cross_entropy/ Triton online-softmax 两阶段内核移植。 - NPU 适配:Host 统计
n_non_ignore;减小BLOCK/num_warps;保持 FP32 归约。 - 单卡精度/反向对齐 PyTorch;2 卡词表并行 HCCL 冒烟。
- 性能脚本对比同机同卡 PyTorch CE;补充显存峰值与泄漏烟雾测试。
问题与解决
- Triton
atomic_add在 NPU 上不稳定 → 改为 Hostsum。 - 非连续
(B,SQ,V)转置输入 → 与 NVTE 一致做 contiguous。 MAX_FUSED_SIZE=32768触发 910B3 UB overflow → 降至 4096。- 小词表 Triton 启动开销高于 ACL CE → 默认
V>=16384才走 Triton(TE_PARALLEL_CE_FORCE_TRITON=1可强制)。
验收(910B3 / CANN 9.0.0)
- UT:单卡 + 多卡全绿(含 FORCE_TRITON 精度与显存烟雾)
- 性能 default_route mean ours/pt ≈ 0.833(无均值回退、单点 ≤5%)
- PR:https://gitcode.com/Ascend/TransformerEngineNPU/merge_requests/148
建议
- 上游补充 Ascend Triton 对 atomic / warp / UB 的文档约束。
- 官方若开
2.17分支,请再 cherry-pick 本 PR。


集成环境 框架选择:Megatron core_r0.18.0,MegatronAdaptor core_r0.18.0, TransformerEngineNPU main&2.17,具体快速上手参考:https://gitcode.com/clc2025/MegatronAdaptor.git
基础脚本,可以参考MegatronAdaptor 的 ST脚本,脚本8卡,带TP2PP2EP2就行。数据集enwiki或者deepseek都行。基线为megatron配置config.cross_entropy_fusion_impl == 'native',实验为config.cross_entropy_fusion_impl == 'te'。
验收标准:长跑2000步,精度在MAPE 2% 误差以内。性能不低于基线。
验收材料:结果日志,测试脚本,环境信息


任务描述
基于 TransformerEngineNPU 开放仓库进行 Parallel Cross Entropy 功能开发
任务交付件
本期任务为基于 TransformerEngineNPU 开放仓库进行 Parallel Cross Entropy 功能开发,请合入开发代码。语义和精度参考 NVTE v2.17 parallel_cross_entropy。主要开发点如下:
验收标准
PR 合入
本地完成测试验证后,向TransformerEngineNPU的main分支及2.17分支发起PR。
对接人
Liz
欢迎加入社区,感谢您对社区的贡献 🎉!