Pull Request已成功合入, 合并人@ascend-robot
(感谢 ascend-robot 的贡献)变更摘要
此 PR 为 MoE(Mixture of Experts)token 反置换操作新增了 DTensor 分布式分片策略支持,主要针对 _npu_moe_token_unpermute 和 npu_moe_token_unpermute_grad_v2 两个算子注册了分片策略函数。
主要改动
- 新增
_npu_moe_token_unpermute_strategy策略函数:为npu._npu_moe_token_unpermute.default算子注册 DTensor 分片策略,提供全复制(Replicate)和隐藏维度分片(Shard(1))两种策略,其中隐藏维度分片策略对输出张量和输入permuted_tokens沿第 1 维进行分片。 - 新增
npu_moe_token_unpermute_grad_v2_strategy策略函数:为npu.npu_moe_token_unpermute_grad_v2.default算子注册 DTensor 分片策略,同样支持全复制和隐藏维度分片两种策略,隐藏维度分片策略中梯度输出permuted_tokens沿第 1 维分片,probs梯度使用Partial()归约。 - 可选张量参数处理:两个新增策略函数均对可选的
probs和permuted_tokens参数进行了判空处理,当参数为None时对应策略位置填None。


代码审查
经过完整的审查,我对变更文件做了以下检查:
-
_npu_moe_token_unpermute_strategy(行 101-123):与已有的npu_moe_token_unpermute_strategy(行 77-98)对比,新增函数多了一个输出(permuted_tokens_for_backward),两个输出的 sharding 均与输入的permuted_tokens保持一致,参数数量与函数注释完全匹配。 -
npu_moe_token_unpermute_grad_v2_strategy(行 151-177):与已有的npu_moe_token_unpermute_grad_strategy(行 126-148)对比,v2 版本将必选的permuted_tokens张量替换为permuted_tokens_size_0(int)和permuted_tokens_dtype(ScalarType),并在末尾增加了可选的permuted_tokens。输出 sharding 语义与 v1 完全一致,参数数量(8 个)与函数注释匹配。该模式亦与文件中已有的npu_moe_token_permute_grad_v2_strategy(行 54-74)一致。 -
未发现逻辑错误、安全漏洞、可靠性问题或破坏性变更。
总结
| 优先级 | 数量 |
|---|---|
| P0 | 0 |
| P1 | 0 |
| P2 | 0 |
| P3 | 1 |
torch_npu/distributed/tensor/_moe_ops.py:已审查,发现 1 个 P3 级别问题(缺少对新增策略的测试覆盖),无其他问题。
整体风险判断:低。两个新增的分片策略函数严格遵循文件中已有的模式,分片语义正确、参数数量匹配。唯一的缺口是缺少对应的自动化测试,建议后续补充。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| torch_npu/distributed | ✅ liangsongwei, 楚浩田 (2/2) | ✅ liangsongwei, 楚浩田 (2/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)


ascend docs pipeline is running...


✅ 跳过 docs ci 检查,没有需要检查的文档文件


| 阶段 | 任务名 | 状态 | 详情 |
|---|---|---|---|
| 编译构建 | Build_X86 | ✅ | >>> |
| Build_ARM | ✅ | >>> | |
| Build_LibTorch_x86 | ✅ | >>> | |
| Build_LibTorch_ARM | ✅ | >>> | |
| Build_X86_torchair | 🛑 | >>> | |
| Build_ARM_torchair | 🛑 | >>> | |
| patch_test | 🛑 | >>> | |
| 恶意代码检查 | Antipoison | ✅ | >>> |
| 编码安全与规范检查 | CodeCheck | ✅ | >>> |
| check_error | ✅ | >>> | |
| CodeCheck_lintrunner | ✅ | >>> | |
| 开源片段检查 | SCA | ✅ | >>> |
| 开发者测试 | UT_ARM_A3_Part_01 | 🛑 | >>> |
| UT_ARM_A3_Part_02 | 🛑 | >>> | |
| UT_ARM_A2_Part_01 | ✅ | >>> | |
| UT_ARM_A2_Part_02 | ✅ | >>> | |
| UT_ARM_A2_Part_03 | ✅ | >>> | |
| UT_inductor_Part_01 | 🛑 | >>> | |
| UT_inductor_Part_02 | 🛑 | >>> | |
| UT_inductor_Part_03 | 🛑 | >>> | |
| UT_inductor_Part_04 | 🛑 | >>> | |
| UT_DIST_ARM_Part_01 | ✅ | >>> | |
| UT_DIST_ARM_Part_02 | ✅ | >>> | |
| UT_DIST_ARM_Part_03 | ✅ | >>> | |
| UT_DIST_ARM_Part_04 | ✅ | >>> | |
| UT_ARM_A2_Select_Part_01 | ✅ | >>> | |
| UT_ARM_A2_Select_Part_02 | ✅ | >>> | |
| 流水线 | PR-pipeline_pytorch | ✅ | >>> |
- compile、compile_inductor、compile_torchair : 运行流水线
- retry : 重试流水线所有失败子任务
- retry <任务名> : 仅重试指定失败子任务
- stop : 停止流水线


/approve




1. Origin pull request:
https://gitcode.com/Ascend/pytorch/merge_requests/40312
2. Original pull request related issue(s):
https://gitcode.com/Ascend/pytorch/issues/3108
3. Original pull request related commit(s):