已合并
fix: 修复aclop与图模式混跑时自定义Pass资源被提前释放的问题 #4243
fix: 修复aclop与图模式混跑时自定义Pass资源被提前释放的问题 #4243
已合并
why you创建于 8月3日
why you成员
8月3日

描述

修复 aclop 单算子编译与 GeSession 图编译混跑时,自定义 Pass 资源被提前释放的问题。

问题根因GeGenerator::Finalize() 调用 ShutdownPassPluginsForProcess() 执行进程级 Pass 卸载,清空 registration_datas_dlclose 动态库句柄。aclop 单算子编译结束后会释放仍被 GeSession 图编译依赖的 Pass 资源,导致后续图编译中自定义 Pass 不再执行。

解决方案

  1. PassPluginLoader 引入引用计数 active_users_
    • LoadPassPlugins(): active_users_==0 时首次加载 C++/Python Pass,每次调用 +1
    • UnloadPassPlugins(): 每次调用 -1,仅 active_users_==0 时真正卸载 + 进程级清理
  2. GeGenerator::Finalize() 改用 UnloadPassPlugins() 替代 ShutdownPassPluginsForProcess(),只递减引用计数,不强制卸载进程级资源
  3. GeGenerator 增加 pass_plugins_loaded_ flag + GE_DISMISSABLE_GUARD,保证 Initialize 失败时自动释放 Pass 引用
  4. 所有调用方(GEInitialize/GEFinalize/GeGenerator/ATC/aclgrphBuild)统一用 Load/Unload
  5. 移除 PassPluginLease 类、AcquirePassPlugins/ReleasePassPlugins/ShutdownPassPluginsForProcess
  6. CustomPassHelper::Insert() 去掉 unique_lock,防止 Load() 持锁时 dlopen 触发 PassReceiver 构造函数 → Insert() 重入导致同线程死锁(std::shared_mutex 不支持递归)

变更类型

核对清单

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 why you 的贡献)
Wwhy you成员
8月3日 创建了 pull request,commit 2648f85b
atomgit-bot
atomgit-bot
8月3日 评论:

变更摘要

此 PR 修复了 aclop 单算子编译与 GeSession 图编译混跑时自定义 Pass 资源被提前释放的问题。根因是 GeGenerator::Finalize() 直接调用 ShutdownPassPluginsForProcess() 执行进程级卸载,清空 registration_datas_dlclose 动态库,导致后续图编译中自定义 Pass 不再执行。解决方案核心是在 PassPluginLoader 中引入引用计数 active_users_,使 LoadPassPlugins()UnloadPassPlugins() 成对调用时仅在所有使用者释放后才真正卸载资源,并将所有调用方从进程级 ShutdownPassPluginsForProcess() 统一迁移到引用计数式的 UnloadPassPlugins()

主要改动

  • PassPluginLoader 引入引用计数机制Load() 中仅在 active_users_==0 时首次加载 C++/Python Pass 并每次 +1,Unload() 中每次 -1 且仅在 active_users_==0 时真正卸载资源并执行进程级清理,同时移除原来的 ShutdownForProcess()RollbackPythonPassesLoad() 方法。
  • 所有调用方统一使用 UnloadPassPlugins()api/atc/main_impl.ccapi/session/client/ge_api_v2.cccompiler/api/aclgrph/ge_ir_build.cc 中的 ShutdownPassPluginsForProcess() 全部替换为 UnloadPassPlugins(),头文件 pass_plugin_loader.h 中移除该函数声明。
  • GeGenerator 增加 Pass 生命周期安全保障:新增 pass_plugins_loaded_ 标志位配合 GE_DISMISSABLE_GUARDInitialize() 成功加载 Pass 后设置标志并通过 guard 确保失败时自动 UnloadFinalize() 中仅在标志为真时调用 UnloadPassPlugins() 而非进程级 shutdown。
  • CustomPassHelper 并发安全修复:新增 mutable std::shared_mutex mutex_ 成员,Load()Unload() 使用 unique_lockRun() 使用 shared_lockInsert() 去除锁以避免 Load() 持锁时 dlopen 触发 PassReceiver 构造函数回调 → Insert() 重入导致同线程死锁。
  • 新增单元测试覆盖fusion_pass_executor_unittest.cc 增加引用计数多引用/无引用场景和 Python Pass 加载卸载测试;ge_generator_unittest.cc 增加 Initialize 失败时自动释放 Pass 插件的验证用例。
likedislike
atomgit-bot
atomgit-bot
8月3日 评论:

代码审查

✅ 未发现问题

likedislike
CANN-robotCANN-robot成员
8月3日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
8月3日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here
You can get sig-info at here


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-cann/ge Mexyy, kobemini, 张德鹏 (3/2) 张德鹏 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

qq_45842700, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
CANN-robot
CANN-robot成员
8月3日 评论:

CLA Signature Pass

qq_45842700, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
why you成员
8月3日 评论:

compile

likedislike
Wwhy you成员
8月3日 update merge request[project id: 8824148, iid: 4243, commit_id: 7d6f34aaa88abf78b575edd8e9f75d8794343789] virtual merging success
CANN-robotCANN-robot成员
8月3日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
8月3日 评论:

流水线任务触发成功
任务链接 [42acb6ec3b094115bbd7c8f4c5087344][流水线指导]

任务名称状态日志下载链接
pre_comment ✅ SUCCESS >>>>>
Compile_X86_compiler ✅ SUCCESS >>>>> >>>>>
Compile_X86_executor ✅ SUCCESS >>>>> >>>>>
Compile_X86_dflow ✅ SUCCESS >>>>> >>>>>
UT_Test_dflow ✅ SUCCESS
UT_Test_ge_common ✅ SUCCESS
UT_Test_parser ✅ SUCCESS
UT_Test_python ✅ SUCCESS >>>>>
UT_Test_rt ✅ SUCCESS
UT_Test_acl ✅ SUCCESS
UT_Test_autofuse ✅ SUCCESS
UT_Test_executor ✅ SUCCESS
UT_Test_autofuse_ascendc_api ✅ SUCCESS
ST_Test_dflow ✅ SUCCESS
ST_Test_ge_common ✅ SUCCESS
ST_Test_parser ✅ SUCCESS
ST_Test_python ✅ SUCCESS >>>>>
ST_Test_rt ✅ SUCCESS
ST_Test_autofuse ✅ SUCCESS
ST_Test_executor ✅ SUCCESS
ST_Test_hetero ✅ SUCCESS
ST_Test_autofuse_ascendc_api ✅ SUCCESS
ST_Test_autofuse_e2e ✅ SUCCESS
UT_Test_fe ✅ SUCCESS
UT_Test_tefusion ✅ SUCCESS
ST_Test_fe ✅ SUCCESS
ST_Test_tefusion ✅ SUCCESS
ST_Test_ge_common_atc ✅ SUCCESS
UT_Test_Report_graphengine ✅ SUCCESS >>>>>
UT_Test_Report_ge_executor_c ✅ SUCCESS >>>>>
UT_Test_Report_ge_autofuse ✅ SUCCESS >>>>>
ST_Test_Report_graphengine ✅ SUCCESS >>>>>
ST_Test_Report_ge_executor_c ✅ SUCCESS >>>>>
ST_Test_Report_ge_autofuse ✅ SUCCESS >>>>>
UT_Test_Report_fe ✅ SUCCESS >>>>>
ST_Test_Report_fe ✅ SUCCESS >>>>>

[2026-08-03 16:41:24]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
8月3日 评论:

流水线任务触发成功
任务链接 [89025dd94f4045d989009eb790053e19][流水线指导]

任务名称状态日志下载链接
pre_comment ✅ SUCCESS >>>>>
Compile_ARM_compiler ✅ SUCCESS >>>>> >>>>>
Compile_ARM_executor ✅ SUCCESS >>>>> >>>>>
Compile_ARM_dflow ✅ SUCCESS >>>>> >>>>>
API_Check ✅ SUCCESS >>>>>
PreSmoke_A900_npupool ✅ SUCCESS >>>>>

[2026-08-03 16:34:58]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
8月3日 评论:

流水线任务触发成功
任务链接 [e0c86251c51944ca86a515c564245732][流水线指导]

任务名称状态日志下载链接
codecheck_Pr ✅ SUCCESS
antipoison ✅ SUCCESS >>>>>
SCA ✅ SUCCESS >>>>>
codecheck_dt ✅ SUCCESS >>>>>
codecheck_precommit ✅ SUCCESS >>>>>
StaticCheck_codespell ✅ SUCCESS
StaticCheck_link_validity ✅ SUCCESS
StaticCheck_resource_existence ✅ SUCCESS
StaticCheck_tag_closed ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS

[2026-08-03 16:33:15]    CI执行结束

likedislike
CANN-robotCANN-robot成员
8月3日 添加了label:api-check-pass
CANN-robotCANN-robot成员
8月3日 删除了label:api-check-pass
CANN-robotCANN-robot成员
8月3日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
8月3日 添加了label:ci-pipeline-passed
Wwhy you成员
8月3日 修改了pull request 的描述
GengChao
GengChao成员8月3日进行代码检视1
api/atc/main_impl.cc
已过期
@@ -2345,7 +2345,7 @@ int32_t main_impl(int32_t argc, char *argv[]) {
23452345 GELOGW("[Ensure][PythonRuntime] failed before running ATC, continue initialization, ret[%u].", python_runtime_ret);
23462346 }
23472347 GE_MAKE_GUARD(release_python_resources, []() {
2348- (void)ge::fusion::ShutdownPassPluginsForProcess();
GengChao
GengChao8月3日评论:

ShutdownPassPluginsForProcess删除之后 设计文档需要同步更新一下

likedislike
Wwhy you成员
8月3日 update merge request[project id: 8824148, iid: 4243, commit_id: 4224c4b859110476d62abc8d94f5d74d4f0ea619] virtual merging success
此处折叠了5条事件消息 查看更多
CANN-robotCANN-robot成员
8月3日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
8月3日 评论:

Notification

This pull request has been changed(code update) or closed, so removes the following label(s): ci-pipeline-passed.

likedislike
why you成员
8月3日 评论:

compile

likedislike
Wwhy you成员
8月3日 update merge request[project id: 8824148, iid: 4243, commit_id: 663eaaa438167f664e43cb0f3e143b75e73ae765] virtual merging success
CANN-robotCANN-robot成员
8月3日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
8月3日 评论:

流水线任务触发成功
任务链接 [2ba93cc3dcd041caaed0681488ff9401][流水线指导]

任务名称状态日志下载链接
pre_comment ✅ SUCCESS >>>>>
Compile_ARM_compiler ✅ SUCCESS >>>>> >>>>>
Compile_ARM_executor ✅ SUCCESS >>>>> >>>>>
Compile_ARM_dflow ✅ SUCCESS >>>>> >>>>>
API_Check ✅ SUCCESS >>>>>
PreSmoke_A900_npupool ✅ SUCCESS >>>>>

[2026-08-03 21:09:53]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
8月3日 评论:

流水线任务触发成功
任务链接 [6cf763eed3374bb798655e92e9b94ab6][流水线指导]

任务名称状态日志下载链接
pre_comment ✅ SUCCESS >>>>>
Compile_X86_compiler ✅ SUCCESS >>>>> >>>>>
Compile_X86_executor ✅ SUCCESS >>>>> >>>>>
Compile_X86_dflow ✅ SUCCESS >>>>> >>>>>
UT_Test_dflow ✅ SUCCESS
UT_Test_ge_common ✅ SUCCESS
UT_Test_parser ✅ SUCCESS
UT_Test_python ✅ SUCCESS >>>>>
UT_Test_rt ✅ SUCCESS
UT_Test_acl ✅ SUCCESS
UT_Test_autofuse ✅ SUCCESS
UT_Test_executor ✅ SUCCESS
UT_Test_autofuse_ascendc_api ✅ SUCCESS
ST_Test_dflow ✅ SUCCESS
ST_Test_ge_common ✅ SUCCESS
ST_Test_parser ✅ SUCCESS
ST_Test_python ✅ SUCCESS >>>>>
ST_Test_rt ✅ SUCCESS
ST_Test_autofuse ✅ SUCCESS
ST_Test_executor ✅ SUCCESS
ST_Test_hetero ✅ SUCCESS
ST_Test_autofuse_ascendc_api ✅ SUCCESS
ST_Test_autofuse_e2e ✅ SUCCESS
UT_Test_fe ✅ SUCCESS
UT_Test_tefusion ✅ SUCCESS
ST_Test_fe ✅ SUCCESS
ST_Test_tefusion ✅ SUCCESS
ST_Test_ge_common_atc ✅ SUCCESS
UT_Test_Report_graphengine ✅ SUCCESS >>>>>
UT_Test_Report_ge_executor_c ✅ SUCCESS >>>>>
UT_Test_Report_ge_autofuse ✅ SUCCESS >>>>>
ST_Test_Report_graphengine ✅ SUCCESS >>>>>
ST_Test_Report_ge_executor_c ✅ SUCCESS >>>>>
ST_Test_Report_ge_autofuse ✅ SUCCESS >>>>>
UT_Test_Report_fe ✅ SUCCESS >>>>>
ST_Test_Report_fe ✅ SUCCESS >>>>>

[2026-08-03 21:16:27]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
8月3日 评论:

流水线任务触发成功
任务链接 [7b1b78e5ff514a78af8772a32411eccc][流水线指导]

任务名称状态日志下载链接
codecheck_Pr ✅ SUCCESS
antipoison ✅ SUCCESS >>>>>
SCA ✅ SUCCESS >>>>>
codecheck_dt ✅ SUCCESS >>>>>
codecheck_precommit ✅ SUCCESS >>>>>
StaticCheck_codespell ✅ SUCCESS
StaticCheck_link_validity ✅ SUCCESS
StaticCheck_resource_existence ✅ SUCCESS
StaticCheck_tag_closed ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS

[2026-08-03 21:08:12]    CI执行结束

likedislike
CANN-robotCANN-robot成员
8月3日 添加了label:api-check-pass
CANN-robotCANN-robot成员
8月3日 删除了label:api-check-pass
CANN-robotCANN-robot成员
8月3日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
8月3日 添加了label:ci-pipeline-passed
Wwhy you成员
8月5日 解决了最后一个问题
GengChao
GengChao成员
8月5日 评论:

/lgtm

likedislike
夏国正成员
8月5日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
8月5日 添加了label:lgtm
张德鹏成员
8月5日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
8月5日 添加了label:approved
CANN-robotCANN-robot成员
8月5日 合入了pull request
wangyuchenwangyuchen成员
8月6日 关联了issue:[Question|问题咨询]: 加载om报错"(QuantBatchMatmulV3) memory out of range"
wangyuchenwangyuchen成员
26 天前 删除了关联的issue:[Question|问题咨询]: 加载om报错"(QuantBatchMatmulV3) memory out of range"
wangyuchenwangyuchen成员
26 天前 关联了issue:[Bug-Report|缺陷反馈]: torchair图模式与aclop单算子混跑,图模式下自定义pass不生效
CANN-robotCANN-robot成员
26 天前 删除了label:ci-pipeline-passed