Closed
[Requirement|需求建议]: 构建与CI流程适配 npuArch 算子注册(AddConfigByArch) #4431
esok11Add on  8 days agoClosed at  7 days ago
esok11Collaborators
8 days ago Create

一、背景信息 (必填)

算子注册方式正在从 AddConfig("<socVersion>") 迁移到 ArchConfigHelper::AddConfigByArch(Ops::Base::DAV_xxx)(npuArch 注册)。但 ops-math 仓库构建与 CI 侧的“算子是否支持某芯片”判定仍只识别 AddConfig("<socVersion>"),导致仅用 AddConfigByArch 注册的算子被误判为不支持当前芯片,影响 tiling 目录收集、ops-info 生成、CI 算子筛选、本地自检与 cannsim 选算子。

二、价值/作用 (必填)

使构建与 CI 流程在不改动算子代码的前提下识别 npuArch 注册方式,保证 npuarch 整改后的算子不会在编译、打包、分组、自检与仿真环节被漏选/漏测;同时保留对旧 COMPUTE_UNIT/NPU_ARCH 写法的兼容,改造可渐进推进。

三、设计方案 (必填)

在现有的 socVersion↔npuArch 映射(cmake/soc_arch_variables.cmake 的 ASCEND_ALL_COMPUTE_UNIT / SOC_TO_ARCH_VALUES)基础上,为各构建/CI 环节补一份同名映射与 arch 识别逻辑,并统一采用“先按 npuArch 匹配、未命中再回退 socVersion”的策略。

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

不涉及算子调用框架,属于构建系统(CMake)与 CI 脚本(Python / Bash)适配;改动随仓库构建流程生效,算子侧无需额外配置。

3.2 总体设计
  • cmake/func.cmake:add_all_modules_sources 中 NPU_ARCH 与 TILING_DIR 继续按位置一一配对,当前构建芯片的 key 统一换算为 npuArch 后匹配;若声明列表中没有该 npuArch(老写法全为 socVersion),回退按 socVersion 字面值匹配。
  • cmake/gen_ops_info.cmake:check_op_supported 的 grep 增加 AddConfigByArch ... <ARCH_UPPER> 备选分支(主模块与 MODULE_EXT 两处),仅在 get_npu_arch_by_soc_version 可换算时启用。
  • scripts/ci/gen_ci_cmd.py:新增 SOC_TO_ARCH 映射与 soc_to_arch(),check_op_supports_soc 增加 AddConfigByArch + DAV_xxx 正则判定。
  • scripts/ci/gen_ops_soc.py:新增 SOC_TO_ARCH 与反向表 ARCH_TO_SOC_NAMES,新增 extract_add_config_by_arch_configs() 解析 AddConfigByArch 中的 DAV_xxx 并映射回 socVersion,汇入 extract_ai_core_configs() 供算子分组使用。
  • scripts/ci/local_check.sh:内置 SOC_TO_ARCH 关联数组与 soc_to_npu_arch(),op_supports_soc 增加 AddConfigByArch[^;]*DAV_xxx 判断,并同步 cannsim 跳过提示文案。
  • cmake/opbuild.cmake:gen_op_host_* 目标链接 opbase_util_objs(存在时)并加入 OPBASE_INC_DIRS 头文件路径。
  • cmake/third_party/opbase.cmake:OPBASE_TAG_ID 升级为 ab014585877c660db1f024a04b43650867556fbc。
3.2.1 算子支持的数据类型

不涉及(构建与 CI 脚本改动,不改变任何算子的数据类型支持范围)。

3.2.2 host侧设计

check_op_supported(CMake)与 check_op_supports_soc(Python)/op_supports_soc(Bash)在保留 AddConfig("<soc>") 判断的基础上,按 socVersion→npuArch 映射追加 AddConfigByArch 的 arch 匹配;gen_ops_soc.py 额外负责把 AddConfigByArch 中的 DAV_xxx 反向映射为 socVersion,参与 CI 算子分组。

3.2.3 kernel侧设计

不涉及(未修改 kernel 代码)。

3.3 支持硬件

映射覆盖 cmake/soc_arch_variables.cmake 中的 socVersion→npuArch 对应关系(如 ascend910b/ascend910_93→dav_2201、ascend950/ascend350→dav_3510、ascend310p→dav_2002、ascend310b→dav_3002、ascend910→dav_1001 等);新增脚本侧映射表需与 cmake 侧保持一致。

3.4 算子约束限制

  • 仅对映射表中列出的 socVersion 能换算为 npuArch;未命中映射时脚本侧回退为纯 socVersion 匹配,arch 注册的算子仍可能被漏判。
  • CMake 侧回退逻辑仅在声明列表内查不到当前 npuArch 时触发,因此 NPU_ARCH 与 TILING_DIR 仍需按位置一一对应。
  • 已知不一致:本次新增脚本映射写作 ascend5162a → dav_5162,而 cmake/soc_arch_variables.cmake 为 ascend5162 → dav_5162,按 ascend5162 构建时脚本侧 arch 匹配会落空,建议对齐拼写。

💡 备注(选填)
关联 PR:https://gitcode.com/cann/ops-math/pull/6990

likedislike
Eesok11Collaborators
8 days ago Added label: requirement
esok11Collaborators
8 days ago Comments:

/assign @esok11

likedislike
CANN-robotCANN-robotCollaborators
8 days ago Assign esok11 as responsible person
CANN-robotCANN-robotCollaborators
7 days ago Close issue
CANN-robotCANN-robotCollaborators
7 days ago Added label: resolved