已开启
[PROMPT-CONSERVATIVE][source #33] [泛化测试 G03] [Bug-Report|缺陷反馈]: FusedMulAdd/FusedMulAddAdd/MulNoNan 未注册 InferDataType,GE 图通路输出 dtype 缺少推导来源 #65
xujiachen8创建于  9月16日
xujiachen8成员
9月16日 创建

本条为响应质量测试副本,来源 https://gitcode.com/xujiachen8/ops-math/issues/33 。

[泛化测试 G03] 测试副本,仅用于 gitcode-issue-handler 泛化测试。
来源:https://gitcode.com/cann/ops-math/issues/2987
原状态:open
原标题:[Bug-Report|缺陷反馈]: FusedMulAdd/FusedMulAddAdd/MulNoNan 未注册 InferDataType,GE 图通路输出 dtype 缺少推导来源

Describe the current behavior / 问题描述

FusedMulAdd、FusedMulAddAdd、MulNoNan 这 3 个算子,在各自的 op_host/*_infershape.cpp 中只做了 IMPL_OP_INFERSHAPE(<OpType>).InferShape(...) 注册,没有注册 InferDataType;在 op_graph/ 下也没有 IMPL_OP(<OpType>).InferDataType(...) 的注册。因此在 GE 图通路上,这 3 个算子的输出 dtype 缺少显式推导来源。

Environment / 环境信息

  • 代码仓:cann/ops-math,master 分支
  • 复现基线:6439d9c90(feat: Add aclnn st cases and golden functions)
  • 复现环境:x86_64 Ubuntu,gcc 13.3.0,使用仓内 op_host UT 框架(build.sh -u --ophost)
  • 说明:该问题位于算子注册面(op_host / op_graph 的 InferDataType 注册),与具体昇腾硬件型号无关,影响所有注册了上述算子的产品形态

Steps to reproduce the issue / 重现步骤

  1. 检出 cann/ops-math master(基线 6439d9c90)

  2. 对上述任一算子检查注册面,例如:

grep -n "InferDataType" math/fused_mul_add/op_host/fused_mul_add_infershape.cpp
grep -rn "InferDataType" math/fused_mul_add/op_graph/

两条命令均无输出,即该算子既没有在 op_host 也没有在 op_graph 注册 InferDataType。math/fused_mul_add_add、math/mul_no_nan 同理。

  1. 在 UT 中从注册表取该算子实现,其 infer_datatype 字段为 nullptr。

Describe the expected behavior / 预期结果

这 3 个算子应注册 InferDataType,输出 dtype 跟随输入 x1(与 op_proto 一致),即从注册表取到的 infer_datatype 非空,且对 fp16 / fp32 / bf16 / int32 等输入 dtype 均能推导出与 x1 相同的输出 dtype。

修复前,上述 grep 命令无任何输出(即无 InferDataType 注册)。

修复后,bash build.sh -u --ophost --ops=fused_mul_add,fused_mul_add_add,mul_no_nan 的执行结果:

[  PASSED  ] 47 tests.

[       OK ] FusedMulAddInfershape.infer_datatype_fp16
[       OK ] FusedMulAddInfershape.infer_datatype_fp32
[       OK ] FusedMulAddInfershape.infer_datatype_int32
[       OK ] FusedMulAddAddInfershape.infer_datatype_fp16
[       OK ] FusedMulAddAddInfershape.infer_datatype_fp32
[       OK ] FusedMulAddAddInfershape.infer_datatype_int32
[       OK ] MulNoNanInfershape.infer_datatype_fp16
[       OK ] MulNoNanInfershape.infer_datatype_fp32
[       OK ] MulNoNanInfershape.infer_datatype_bf16
[       OK ] MulNoNanInfershape.infer_datatype_int32

新增用例中的 ASSERT_NE(opImpl->infer_datatype, nullptr) 即为该注册生效的直接证据。

Special notes for this issue / 备注

likedislike
xujiachen8成员
9月16日 评论:

您好,感谢反馈!

问题分析

按 Issue 所述基线,三个算子的 GE 图通路缺少 InferDataType 注册会使注册表没有明确的输出 dtype 推导来源。当前仓库源码已能看到 math/fused_mul_add/op_host/fused_mul_add_infershape.cpp、math/fused_mul_add_add/op_host/fused_mul_add_add_infershape.cpp 和 math/mul_no_nan/op_host/mul_no_nan_infershape.cpp 均注册了对应的 InferDataType,实现为输出 dtype 跟随输入 x1;这与 Issue 期望的推导规则一致。

处理方向

关联 PR !5244 已合入 master,覆盖上述三个 op_host 实现文件及对应 UT:三个输出 dtype 均跟随输入 x1,UT 从注册表取得回调并验证 fp16、fp32、int32(MulNoNan 另含 bf16)。Issue 提供的 !5263 当前已关闭且未显示合入记录;其 diff 同样针对三项注册和 UT。当前仓库已包含三项注册;现有验证范围为 op_host UT,Issue 与 PR 均未提供 GE 图端到端验证。

likedislike