已开启
[Requirement|需求建议]: 26个算子补齐图模式InferDataType推导交付件 #3646
hahaha22创建于  5 天前
hahaha22成员
5 天前 创建

一、背景信息 (必填)

图模式下算子输出 dtype 由 InferDataType 推导函数在构图/编译期确定,是 graph_develop_guide.md 要求的图模式交付件。ops-math 仓库中本批 26 个算子此前仅有 InferShape 交付件,缺少 InferDataType 交付件(op_graph/<op>_graph_infer.cpp);其 dtype 推导语义在 canndev v1.0 旧式 IMPLEMT_COMMON_INFERFUNC 实现中已存在,需以 v2.0 仓 IMPL_OP(Op).InferDataType(f) 交付件形态补齐。

二、价值/作用 (必填)

补齐后 26 个算子在图模式(GE 构图 / ATC 离线编译)下可在编译期正确推导输出 dtype,满足图模式交付件完整性要求,与仓内 add、truncate_mod、logical_or 等已具备 InferDataType 能力的算子对齐。

三、设计方案 (必填)

3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)

图模式(GE 构图 / ATC 离线编译);不改变 aclnn 直调路径行为。

3.2 总体设计
3.2.1 算子支持的数据类型

沿用各算子现有支持的数据类型;推导规则迁移自 canndev v1.0 IMPLEMT_COMMON_INFERFUNC 的类型推导语义,按输出 dtype 推导规则分四类:

  • 透传类(out=in0,19 个):复用仓内共享模板 ops::InferDataTypeOutputSameAsInput(truncate_mod/invert 同款);
  • 比较类输出 DT_BOOL(3 个):对齐 logical_or/not_equal 现有写法;
  • 非 0 索引锚定(out=in1,2 个):Select/SelectV2 以 x1/then 为 dtype 基准(输入 0 为 condition);
  • Promote 提升类(2 个):Mul/TanhGrad 与 add_graph_infer 既有 33×33 提升表写法一致(对齐部署包 opcommon::PromoteType)。
3.2.2 host侧设计

新增 op_graph/<op>_graph_infer.cpp 共 26 个文件,经 IMPL_OP(Op).InferDataType(f) 注册;CMake 无需改动(构建宏 GLOB_RECURSE op_graph/*.cpp 自动收编)。

3.2.3 kernel侧设计

无 kernel 代码改动。

3.3 支持硬件

InferDataType 为 host 侧纯推导逻辑,不新增硬件限制,沿用各算子现有平台支持范围。

3.4 算子约束限制

InferDataType 仅做纯推导,不增加输入 dtype 一致性校验:混合 dtype 组合沿用既有防线,由 tiling 侧 dtype 组合查表在编译期拦截;非法组合(Promote 提升结果 DT_UNDEFINED)不做后置校验,均与仓内 add/axpy/sub 等存量算子行为一致。

四、算子清单(共 26 个)

  • 透传类(19 个):Addcdiv、Addcmul、Axpy、BiasAdd、BitwiseAnd、BitwiseOr、BitwiseXor、SquaredDifference、Div、DivNoNan、FloorDiv、FloorMod、Lerp、Maximum、Minimum、Mod、Muls、Sub、ClipByValue
  • 比较类输出 DT_BOOL(3 个):GreaterEqual、LessEqual、LogicalAnd
  • 非 0 索引锚定(2 个):Select、SelectV2
  • Promote 提升(2 个):Mul、TanhGrad

关联 PR:https://gitcode.com/cann/ops-math/pull/5904

likedislike
hahaha22成员
5 天前 评论:

/assign @hahaha22

likedislike
CANN-robotCANN-robot成员
5 天前 将 hahaha22 设为负责人