已关闭
[Bug]: test_sequence_parallel_style 中 dropout backward 阶段报错 RuntimeError: shape '[240, 4]' is invalid for input of size 240 #4782
yule100创建于 18 天前关闭于 3 天前
18 天前 添加了label:bot-triaged
TorchNPU-Bot
18 天前 评论:
18 天前 评论:
检测到当前 issue 已关联 PR,自动添加标签:bot-triaged


zjl5071
17 天前 评论:
17 天前 评论:
📌 信息来源声明:以下分析基于昇腾知识图谱(Ascend KG)检索,并对 Ascend/pytorch 与上游 PyTorch 源码做了交叉核验。
结论:该报错是 PyTorch 2.12 新引入的 single_dim 策略框架与 torch_npu 位压缩 dropout mask 的兼容性问题,修复 PR #46315 的根因分析与修复方向经独立核验成立。
关键证据链(两侧源码核验):
- 优先级机制(上游
torch/distributed/tensor/_sharding_prop.py,main 分支 2026-09,L750-790):策略分发时优先查询op_single_dim_strategy_funcs,命中即走_expand_single_dim_strategy_to_mesh扩展路径;op_strategy_funcs(即 torch_npu@register_op_strategy的注册目标)仅在未命中 single_dim 时才生效。因此 2.12 起,native_dropout_backward被内置 pointwise single_dim 自动注册后,torch_npu 侧注册的custom_dropout_backward_sharding(torch_npu/distributed/tensor/_matrix_ops.py:820)会被整体绕过。 - torch_npu 侧设计约束(
_matrix_ops.py:781-831):NPU dropout mask 为 1D 位压缩 tensor(与 CUDA 同形 bool mask 不同),forward 策略将 mask 恒置Shard(0)(含输入某维 size 小于 mesh size 的 SP 特判分支),backward 透传策略允许mask=Shard(0)与grad_output=Shard(1)并存、不做重分布。 - 冲突点:内置 pointwise single_dim 策略要求 tensor 参数 placements 一致,检测到
mask=Shard(0)与grad_output=Shard(1)不一致后触发 alltoall 重分布,对 1D 压缩 mask 执行跨维 view——即报错中的view(240, 4)(240 个元素无法重排为 240×4)→ RuntimeError。CUDA 不受影响:同形 bool mask 可安全跨维重排。
对修复 PR 的评审建议(供维护者参考):
- 方案正确性:为
native_dropout_backward.default注册自定义 single_dim 策略[output=Shard(i), grad_output=Shard(i), mask=Shard(0)],与 forward 的mask=Shard(0)约束自洽,是对优先级规则的最小侵入修复,方向正确。 - 两点建议关注:
del op_single_dim_strategy_funcs[...]需做 torch < 2.12 版本守卫(旧版本无该框架/key,直接 del 会 KeyError)与重复 import 幂等性处理;- 这是类系统性风险:torch_npu 中所有经
register_op_strategy注册、而算子本身又带 pointwise tag 的注册,在 2.12 下都会被同样绕过(不止 dropout)。建议按此模式批量自查存量注册,避免逐个爆雷。
昇腾知识图谱接入方式:https://gitcode.com/agent0/kg-tools


8 天前 关联了里程碑:v26.2.0
chenrayray
3 天前 评论:
3 天前 评论:
因为本单相关实施 PR 已全部结束(1 个已合入、1 个已关闭),按照本轮 issue 整理规则,先关闭此单。其中关闭但未合入的 PR 不代表对应修复已交付。
核对的 PR:
- pytorch !46244:已合入
- pytorch !46315:已关闭(未合入)
如仍有问题或需要继续推进,请重新打开,并补充当前 PyTorch / TorchNPU / CANN 版本、硬件环境、复现步骤及相关日志;需求类请补充尚未完成的具体内容。


3 天前 关闭了 issue
3 天前 issue状态由 TODO 改变为 DONE
3 天前 添加了label:resolved
在提交新问题之前,请确保您已经在社区中搜索过相关问题,并使用了社区中提供的资源/工具后,仍未找到满意的解决方式。
⚠️ 安全信息提醒:请仔细检查提供的文本内容,确保其不包含敏感数据信息,包括但不限于:
在分享配置信息或代码示例时,请将敏感信息脱敏处理,或使用
<TOKEN>等占位符替代原有内容。环境信息
🐛 问题描述
[Bug]: test_sequence_parallel_style 中 dropout backward 阶段报错 RuntimeError: shape '[240, 4]' is invalid for input of size 240
欢迎加入社区,感谢您对社区的贡献 🎉!