已合并
[fix] 无反向算子实现的API ,求梯度抛异常 #5447
L1919_snow创建于 7月10日
[fix] 无反向算子实现的API ,求梯度抛异常 #5447
已合并
L1919_snow创建于 7月10日
L1919_snow成员
7月10日

【合入来源】

如有社区issue,请关联issue链接
请勿携带内部流程信息(需求链接、问题单、内部issue等)

【修改方案】

拦截4个无反向实现的算子的报错,只有求反向梯度的时候,才会触发改修改

【资料变更】

“不涉及”

【接口变更】

“不涉及”

【功能验证】

image.png

【CheckList】

PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x]

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 L1919_snow 的贡献)
LL1919_snow成员
7月10日 创建了 pull request,commit c7839db3
atomgit-bot
atomgit-bot
7月10日 评论:

变更摘要

此PR主要解决NPU自定义算子缺少反向实现时,用户调用 .backward() 求梯度会导致不明确的运行时错误的问题。通过新增 AutogradErrorFallback.cpp 文件,为四个暂无反向算子实现的NPU API注册了自定义的 autograd fallback,在反向传播过程中捕获到这些算子时会抛出明确的错误提示,告知用户该算子不支持梯度计算,从而提升调试体验。

主要改动

  • 新增 AutogradErrorFallback.cpp:在 op_plugin/ops/opapi/ 目录下新增该文件,作为对无反向实现的NPU算子的统一错误处理入口。
  • 定义 customThrowFallback lambda:该 fallback 函数在触发时通过 TORCH_CHECK(false, ...) 抛出明确的运行时错误,提示用户不要在依赖这些算子的张量上调用 .backward()
  • 注册四个NPU算子的 Autograd 回退:通过 TORCH_LIBRARY_IMPL(npu, AutogradPrivateUse1, m)npu_add_rms_normnpu_apply_rotary_pos_embnpu_interleave_ropenpu_moe_gating_top_k_softmax 四个算子绑定 customThrowFallback,使其在 autograd 反向传播路径中被拦截并抛出异常。
likedislike
atomgit-bot
atomgit-bot
7月10日 评论:

代码审查

发现 4 个问题,其中 2 个严重问题需要立即修复。

类型 数量
🔴 阻塞 2
🟡 建议 0

⛔ 需要修改

likedislike
ascend-robotascend-robot成员
7月10日 添加了label:stat/needs-squash
此处折叠了112条消息 查看更多
htchu成员
7月14日 评论:

/approve

likedislike
ascend-robotascend-robot成员
7月14日 删除了label:ci-pipeline-passed
ascend-robotascend-robot成员
7月14日 添加了label:ci-pipeline-passed
ascend-robot
ascend-robot成员
7月14日 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike
ascend-robotascend-robot成员
7月14日 删除了label:ci-pipeline-passed