已关闭
[Requirement|需求建议]: 补齐 IndexByTensor 算子 fallback 主机执行实现 #4819
esok11创建于  24 天前关闭于  6 天前
esok11成员
24 天前 创建

Backgroud(背景信息)

IndexByTensor 算子当前缺少 fallback(主机侧)执行实现。当算子无法在 Device 侧执行时,需要一条 Host 侧的 fallback 路径承接计算,否则该算子在 fallback 场景下不可用。

PR #8730 新增 index/index/op_graph/index_by_tensor_fallback.cpp,为 IndexByTensor 算子补齐主机侧 fallback 执行函数。

Origin(信息来源)

来源于 cann/ops-nn 算子仓库 PR #8730(作者 @esok11)。

Benefit / Necessity (价值/作用)

  • 使 IndexByTensor 算子具备 Host 侧 fallback 执行能力,覆盖无法在 Device 侧执行的场景;
  • 通过掩码(mask)机制支持动态索引中部分维度被屏蔽(置空占位张量)的场景,最终复用 aclnnIndex 底层接口完成计算;
  • 完善算子的多执行路径,提升算子可用性与兼容性。

Design(设计方案)

fallback 命名空间下注册 IndexByTensorOpExecuteFunc

  1. 输入与属性获取:通过 gert::OpExecuteContext 获取输入 0(self 张量)、输入 1..N(动态索引张量列表)、属性 0(gert::ContinuousVector 类型的 mask,元素为 int64)以及输出 0。
  2. 掩码重建索引列表getIndicesWithMask 遍历 mask,掩码值为 0 时插入 shape 为 {0}、dtype 为 DT_INT64 的空占位张量,掩码值为 1 时保留对应的实际索引张量(按累计的占位数量做下标偏移)。
  3. 派发执行:通过 CANN_OPS_OPB_SYN_EXEC_ACLNN(hostApiCtx, aclnnIndex, self_ge, inputTensorList, out_ge) 同步调用底层 aclnnIndex 接口完成计算。
  4. 异常处理:对 hostApiCtxself_geout_geattrs 等关键指针做空指针校验,非法 mask 值记录 OP_LOGE,失败返回 GRAPH_FAILED

关联 PR:https://gitcode.com/cann/ops-nn/pull/8730

likedislike
Eesok11成员
24 天前 添加了label:requirement
esok11成员
24 天前 评论:

/assign @esok11

likedislike
CANN-robotCANN-robot成员
24 天前 将 esok11 设为负责人
aiteeraiteer
18 天前 关联了pull request:feat: 新增 IndexByTensor 算子 fallback 主机执行实现
Eesok11成员
6 天前 issue状态由 进行中 改变为 已完成
Eesok11成员
6 天前 关闭了 issue