Closed
[Bug-Report|缺陷反馈]: SparseBincount 算子 infershape 注册缺少 InputsDataDependency,GEIR 通路编译期取数失败报 EZ9999 #3800
xuejinghuiAdd on 22 days agoClosed at 21 days ago
22 days ago Added label: bug-report
xuejinghui
22 days ago Comments:
22 days ago Comments:
/assign


22 days ago Assign xuejinghui as responsible person
21 days ago Close issue
21 days ago Added label: resolved
[Bug-Report|缺陷反馈]: SparseBincount 算子 infershape 注册缺少 InputsDataDependency,GEIR 通路编译期取数失败报 EZ9999
问题描述
math/sparse_bincount(950 新增算子)的 InferShape 中,输出 shape 由dense_shape/size两个输入的值决定(1D 模式输出[size];多维模式输出[dense_shape[0], size]),属典型的数据依赖输入。但IMPL_OP_INFERSHAPE注册链缺少.InputsDataDependency({IDX_DENSE_SHAPE, IDX_SIZE})声明,GE 图编译期不会向 infershape 供给这两个输入的常量数据,GetData<int32_t/int64_t>()返回 nullptr,直接报EZ9999: size data is null(sparse_bincount_infershape.cpp:73),InferShape 返回 GRAPH_FAILED,GEIR 通路执行失败。补齐 InputsDataDependency 后仍存在第二层面问题:当
size/dense_shape本身就是动态输入(非常量)时,编译期天然无数据,原实现对空数据一律return GRAPH_FAILED,动态 shape 场景被误拦截。环境信息
Ascend 950PR/950DT;CANN 9.3.0;GEIR 图模式通路(aclnn 单算子通路不经过该 infershape 注册,不受影响)
重现步骤
size以常量/placehelder 输入(如indices=(156,-1)、values=(156)、dense_shape=(2)、size=(1)、weights=(156)的动态 shape 图);size输入无数据供给,GetData得到 nullptr,报 EZ9999,InferShape 失败,RunGraph 失败。仓内最小复现(ophost UT,InfershapeContextFaker 不给 size 常量数据):
// dense_shape/size 不带 const 数据时,原实现 GetData==nullptr → GRAPH_FAILED预期结果
size/dense_shape为常量输入时:编译期可读到数据,正常推导输出 shape(1D →[size];多维 →[dense_shape[0], size]);size/dense_shape为动态输入(编译期无数据)时:对应输出维度置 -1(unknown dim),由运行时按真实数据推导,InferShape 不报错;日志/截图
根因分析
dense_shape/size的值而非 shape,属于数据依赖输入,必须通过.InputsDataDependency({IDX_DENSE_SHAPE, IDX_SIZE})显式声明,GE 才会在编译期把常量数据喂给 infershape;注册缺失导致GetData返回 nullptr(与仓内 ArgMaxV2 同类问题同源)。修复方案
修复提交(ops-math fork,squash 后单提交
cfa87226b,分支fix_sparse_bincount_inputs_data_dependency,关联 MR !6508):IMPL_OP_INFERSHAPE(SparseBincount)注册链补充.InputsDataDependency({IDX_DENSE_SHAPE, IDX_SIZE})(与 ArgMaxV2 同类修复范式一致);size/dense_shape数据为空时不再返回 GRAPH_FAILED:sizeValue/denseShapeRows默认置 -1,对应输出维度推导为 unknown dim,交由运行时确定。改动仅涉及
math/sparse_bincount/op_host/sparse_bincount_infershape.cpp(15+/8-)。验证结果
bash build.sh -u --ophost --gtest_filter='SparseBincountInfershape*',6/6 PASS(1D、多维、unknown shape、unknown rank、混合 unknown,及本地补充的indices=(156,-1)混合已知/未知维度用例——该用例验证了 issue 场景的推导路径,未随本提交合入);dense_shape={4,5}, size=8 → [4,8]),无行为回退。关联提交
fix_sparse_bincount_inputs_data_dependency:cfa87226b(squash 后单提交)备注