已关闭
[Requirement|需求建议]: 适配 ASCEND_CUSTOM_OPP_PATH 环境变量下的算子信息库加载 #253
ren-botao创建于  7月9日关闭于  7月9日
ren-botao成员
7月9日 创建

Backgroud(背景信息)

当前 OpKernelLib 在加载算子信息库 JSON(aic-*-ops-info.json)时,仅支持从 $ASCEND_OPP_PATH/vendors/<vendor>/ 与 built-in 路径中读取,未支持用户通过 ASCEND_CUSTOM_OPP_PATH 环境变量指定自定义算子包(custom opp)路径。这导致用户使用自定义算子包部署算子时,自定义算子信息库无法被 OpKernelLib::Initialize() 正确加载,自定义算子无法参与算子信息库的解析与调度。

此外,原有路径获取函数(GetConfigFilePaths / GetCustomFilePaths)命名与职责混淆,GetCustomFilePaths 实际只处理 ASCEND_OPP_PATH/vendors 路径,无法表达「自定义算子包」这一独立来源;空路径检查使用 OP_CHECK(realCustomFilePath == "", emplace_back(...)) 反向逻辑,存在把空 real path 错误加入列表的风险。

Origin(信息来源)

开发过程中发现的问题

Benefit / Necessity(价值/作用)

  1. 新增对 ASCEND_CUSTOM_OPP_PATH 环境变量的支持,使自定义算子包用户能够通过环境变量指定算子信息库路径,自定义算子可被正常加载调度。
  2. 明确信息库来源的合并优先级:custom-opp(最高) > opp-vendors > built-in(最低),让高优先级来源的算子定义可以覆盖低优先级来源,满足自定义算子覆盖内置算子的场景。
  3. 通过统一 real path 空值检查与日志升级(OP_LOGD → OP_LOGI),提升加载失败时的可定位性。

应用场景:用户基于昇腾平台二次开发或部署自定义算子包时,需要通过 ASCEND_CUSTOM_OPP_PATH 让运行时识别自有算子信息库,并优先于 vendors / built-in 生效。

Design(设计方案)

在 src/nnopbase/composite_op/aclnn_engine/op_kernel_lib.{h,cpp} 中:

  1. 将路径获取函数重构为三个职责清晰的接口:
    • GetBuiltInFilePaths()(原 GetConfigFilePaths):读取 built-in 路径下的算子信息库 JSON。
    • GetOppVendorsFilePaths()(原 GetCustomFilePaths):读取 $ASCEND_OPP_PATH/vendors/<vendor>/... 路径,并补全对单个 vendor 目录读取失败时跳过、空 real path 跳过的处理。
    • GetCustomOppFilePaths()(新增):基于 CUSTOM_IMPL_PATH(来自 ASCEND_CUSTOM_OPP_PATH 多路径解析),读取 <custom_impl>/aic<TARGET_SOC>/*-ops-info.json;显式在路径中补 /,兼容 mmRealPath 是否保留尾部斜杠的两种实现。
  2. Initialize() 中按优先级合并路径列表:built-in → insert(opp-vendors) at begin → insert(custom-opp) at begin → reverse,最终保证 custom-opp 在前、built-in 在后;merge_patch 顺序遍历使高优先级(靠前)覆盖低优先级。
  3. 修复空路径检查逻辑:将 OP_CHECK(realCustomFilePath == "", emplace_back) 改为正向 if (empty) warn; else emplace_back,避免把空路径加入候选。
  4. 将路径加载相关日志从 OP_LOGD(调试级)升级为 OP_LOGI(信息级),便于在运行时定位算子信息库加载问题。
  5. GetSocPath() 去掉 initFlag_ 短路条件(仅保留 socPath_.empty() 判断),保证多次调用返回一致的 SoC 路径,配合新增的 testGetSocPathConsistentAcrossCalls UT 验证。

测试覆盖(tests/nnopbase/ut/composite_op/test_op_kernel.cpp):

  • testGetCustomOppFilePaths:覆盖 env 未设置 / 单路径 / 多路径(冒号分隔)/ dir 不存在 四个分支。
  • Initialize_MergePriority_CustomOppWinsOverVendorsAndBuiltin:验证 custom-opp 优先级覆盖 vendors 与 built-in。
  • testGetSocPathConsistentAcrossCalls:验证多次调用 GetSocPath() 返回值一致。

关联 PR:https://gitcode.com/cann/opbase/pull/620

likedislike
Rren-botao成员
7月9日 添加了label:requirement
Rren-botao成员
7月9日 修改了issue 的描述
Rren-botao成员
7月9日 将 ren-botao 设为负责人
CANN-robotCANN-robot成员
7月9日 关闭了 issue
CANN-robotCANN-robot成员
7月9日 添加了label:resolved