已关闭
[Bug]: test_sequence_parallel_style 中 dropout backward 阶段报错 RuntimeError: shape '[240, 4]' is invalid for input of size 240 #4782
yule100创建于  18 天前关闭于  3 天前
yule100成员
18 天前 创建

在提交新问题之前,请确保您已经在社区中搜索过相关问题,并使用了社区中提供的资源/工具后,仍未找到满意的解决方式。

⚠️ 安全信息提醒:请仔细检查提供的文本内容,确保其不包含敏感数据信息,包括但不限于:

  • API 令牌或密钥
  • 密码或身份验证凭证
  • 私有网址或接口地址
  • 个人或机密数据
  • ...

在分享配置信息或代码示例时,请将敏感信息脱敏处理,或使用 <TOKEN> 等占位符替代原有内容。

环境信息

例如:
- 操作系统
- 昇腾硬件信息
- CANN软件版本
- 安装的对应软件版本

🐛 问题描述

[Bug]: test_sequence_parallel_style 中 dropout backward 阶段报错 RuntimeError: shape '[240, 4]' is invalid for input of size 240

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

likedislike
Yyule100成员
18 天前 添加了label:bug
TorchNPU-BotTorchNPU-Bot成员
18 天前 添加了label:bot-triaged
TorchNPU-Bot
TorchNPU-Bot成员
18 天前 评论:

检测到当前 issue 已关联 PR,自动添加标签:bot-triaged

likedislike
zjl5071
17 天前 评论:

📌 信息来源声明:以下分析基于昇腾知识图谱(Ascend KG)检索,并对 Ascend/pytorch 与上游 PyTorch 源码做了交叉核验。

结论:该报错是 PyTorch 2.12 新引入的 single_dim 策略框架与 torch_npu 位压缩 dropout mask 的兼容性问题,修复 PR #46315 的根因分析与修复方向经独立核验成立。

关键证据链(两侧源码核验):

  1. 优先级机制(上游 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)会被整体绕过。
  2. 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) 并存、不做重分布。
  3. 冲突点:内置 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) 约束自洽,是对优先级规则的最小侵入修复,方向正确。
  • 两点建议关注:
    1. del op_single_dim_strategy_funcs[...] 需做 torch < 2.12 版本守卫(旧版本无该框架/key,直接 del 会 KeyError)与重复 import 幂等性处理;
    2. 这是类系统性风险:torch_npu 中所有经 register_op_strategy 注册、而算子本身又带 pointwise tag 的注册,在 2.12 下都会被同样绕过(不止 dropout)。建议按此模式批量自查存量注册,避免逐个爆雷。

昇腾知识图谱接入方式:https://gitcode.com/agent0/kg-tools

likedislike
chenrayraychenrayray成员
8 天前 关联了里程碑:v26.2.0
chenrayray
chenrayray成员
3 天前 评论:

因为本单相关实施 PR 已全部结束(1 个已合入、1 个已关闭),按照本轮 issue 整理规则,先关闭此单。其中关闭但未合入的 PR 不代表对应修复已交付。

核对的 PR:

如仍有问题或需要继续推进,请重新打开,并补充当前 PyTorch / TorchNPU / CANN 版本、硬件环境、复现步骤及相关日志;需求类请补充尚未完成的具体内容。

likedislike
chenrayraychenrayray成员
3 天前 关闭了 issue
chenrayraychenrayray成员
3 天前 issue状态由 TODO 改变为 DONE
ascend-robotascend-robot成员
3 天前 添加了label:resolved