已合并
[fix] 无反向算子实现的API ,求梯度抛异常 #5447
L1919_snow创建于 7月10日
[fix] 无反向算子实现的API ,求梯度抛异常 #5447
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 L1919_snow 的贡献)7月10日 创建了 pull request,commit c7839db3
atomgit-bot
7月10日 评论:
7月10日 评论:
变更摘要
此PR主要解决NPU自定义算子缺少反向实现时,用户调用 .backward() 求梯度会导致不明确的运行时错误的问题。通过新增 AutogradErrorFallback.cpp 文件,为四个暂无反向算子实现的NPU API注册了自定义的 autograd fallback,在反向传播过程中捕获到这些算子时会抛出明确的错误提示,告知用户该算子不支持梯度计算,从而提升调试体验。
主要改动
- 新增
AutogradErrorFallback.cpp:在op_plugin/ops/opapi/目录下新增该文件,作为对无反向实现的NPU算子的统一错误处理入口。 - 定义
customThrowFallbacklambda:该 fallback 函数在触发时通过TORCH_CHECK(false, ...)抛出明确的运行时错误,提示用户不要在依赖这些算子的张量上调用.backward()。 - 注册四个NPU算子的 Autograd 回退:通过
TORCH_LIBRARY_IMPL(npu, AutogradPrivateUse1, m)为npu_add_rms_norm、npu_apply_rotary_pos_emb、npu_interleave_rope、npu_moe_gating_top_k_softmax四个算子绑定customThrowFallback,使其在 autograd 反向传播路径中被拦截并抛出异常。


ascend-robot
7月10日 评论:
7月10日 评论:
atomgit-bot
7月10日 评论:
7月10日 评论:
7月10日 添加了label:stat/needs-squash
此处折叠了112条消息 查看更多
7月14日 删除了label:ci-pipeline-passed
7月14日 添加了label:ci-pipeline-passed
ascend-robot
7月14日 评论:
7月14日 评论:
Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


7月14日 删除了label:ci-pipeline-passed
【合入来源】
【修改方案】
拦截4个无反向实现的算子的报错,只有求反向梯度的时候,才会触发改修改
【资料变更】
“不涉及”
【接口变更】
“不涉及”
【功能验证】
【CheckList】