已关闭
[Requirement|需求建议]: #4694
kangjiaming创建于  25 天前关闭于  24 天前
kangjiaming
25 天前 创建

Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.

Backgroud(背景信息)

IndexCheck 是一个 L0 内部算子,用于在索引类 aclnn L2 接口(如 aclnnIndexaclnnIndexPutV2)执行索引操作前进行索引合法性检查。当索引越界时,算子通过 assert 报错终止程序,防止产生不可预期的结果。

当前 IndexCheck 算子仅支持 ASCEND910BASCEND910_93 平台,尚未适配最新的 ASCEND950 平台。随着 Ascend 950 平台的推广,基于该平台的索引类算子(Index、IndexPutV2 等)缺少前置的越界检查能力,存在运行时不可预期行为的风险。

此外,现有实现对输入的合法性校验不够完善:

  • 未校验 bounds 的数据类型是否为 INT64;
  • 未校验 indices 张量列表中各张量的 dtype 是否一致;
  • 未校验 indices 张量数量与维度数上限,极端输入可能导致 tiling 阶段异常。

Origin(信息来源)

Ascend 950 平台适配需求,由 CANN 算子团队提出。IndexCheck 作为索引类算子的公共前置检查算子,其 950 适配是 aclnnIndexaclnnIndexPutV2 等算子在 950 平台完整可用性的前置依赖。

Benefit / Necessity(价值/作用)

  1. 平台覆盖:使 IndexCheck 算子在 Ascend 950 平台可用,进而让 aclnnIndexaclnnIndexPutV2 等上层算子在 950 平台具备索引越界检查能力,提升运行时安全性。
  2. 输入校验增强:在 API 层和 tiling 层新增对 bounds dtype、indices dtype 一致性、张量数量上限(8)、维度数上限(8)的校验,提前拦截非法输入,避免后续 kernel 执行时出现不可预期的行为。
  3. 防御性编程:tiling 层的硬校验作为第二道防线,即使 API 层校验被绕过,也能在编译/tiling 阶段返回 GRAPH_FAILED,保障算子鲁棒性。

Benefit / Necessity (价值/作用)

Design(设计方案)

1. 平台适配

  • op_api/index_check.cpp:在 IndexCheck 入口的平台判断逻辑中新增 SocVersion::ASCEND950
  • op_host/index_check_def.cpp:在 AICore 配置列表中注册 "ascend950",使算子可在新平台上加载对应的 tiling/kernel 配置。

2. API 层输入校验(op_api/index_check.cpp)

  • 新增 bounds 数据类型校验:bounds->GetDataType() 必须为 DT_INT64,否则跳过并告警。
  • IsAiCoreSupport 中新增 indices 张量 dtype 一致性检查:遍历张量列表,若任一张量 dtype 与 tensor[0] 不同则返回 false。
  • 新增 indices 张量数量上限校验:indices->Size() > 8 时跳过并告警。

3. Tiling 层硬校验(op_host/index_check_tiling.cpp)

  • 新增 MAX_DIM_NUM = 8 常量。
  • IndexCheckTiling::Init 中新增 tensorId_ > MAX_TENSOR_NUM 的错误检查,不满足时返回 GRAPH_FAILED
  • 新增单张量维度数 > MAX_DIM_NUM 的错误检查,不满足时返回 GRAPH_FAILED
likedislike
yuning_chenyuning_chen成员
25 天前 将 kangjiaming 设为负责人
CANN-robotCANN-robot成员
24 天前 关闭了 issue
CANN-robotCANN-robot成员
24 天前 添加了label:resolved