| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat: 适配Python libpython解析并容错初始化失败 Co-authored-by: du-hua1024<duhua2@huawei.com> # message auto-generated for no-merge-commit merge: !3762 merge develop into develop feat: 适配Python libpython解析并容错初始化失败 Created-by: du-hua1024 Commit-by: du-hua1024 Merged-by: cann-robot Description: # Pull Request ## 描述 本次变更包含两部分改动:适配 Python3.7 libpython 路径解析,以及 GE 初始化时 Python 加载失败容错。 ### 1. 适配 Python3.7 libpython 路径解析 修复 Python conda 环境下 libpython 动态库路径解析不稳的问题。 问题场景: - 当前解释器位于 /root/anaconda3/envs/xxx/bin/python。 - sysconfig.get_config_var("LDLIBRARY") / INSTSONAME 返回的 libpython3.7m.so / libpython3.7m.so.1.0 库名是可用的。 - 但 sysconfig.get_config_var("LIBDIR") 可能返回旧 prefix,例如 /root/miniconda3/envs/xxx/lib,与当前解释器真实安装目录不一致,导致原逻辑只在错误目录下查找 libpython。 变更点: - GE Python runtime 探测 libpython 时,目录查找顺序改为优先使用当前解释器目录:sys.prefix/lib、sys.exec_prefix/lib、dirname(sys.executable)/../lib,最后回退 sysconfig.LIBDIR。 - GE Python runtime 在绝对路径查找失败时,保留裸库名 fallback,让 dlopen 继续走 LD_LIBRARY_PATH / ld cache / 系统库路径。 - Python pass runtime fallback codegen 与 native matrix builder 同步使用当前解释器目录优先的查找规则;这两个构建路径仍要求解析到真实库文件路径,不使用裸库名 fallback。 - 兜底库名仍按 Python 3.7 及以下追加 m 后缀、Python 3.8+ 不追加 m 后缀生成,与 py_decouple.cc 规则保持一致。 ### 2. GE 初始化时 Python 加载失败容错 将 GePythonRuntimeManager::EnsureReady() 的失败处理从阻断初始化改为告警并继续,涉及以下入口: - aclgrphBuildInitializeImpl(compiler/api/aclgrph/ge_ir_build.cc) - GEInitializeImpl(api/session/client/ge_api_v2.cc) - GeGenerator::Initialize(compiler/api/generator/ge_generator.cc) - GenerateModel / GenerateSingleOp(api/atc/main_impl.cc) - GePythonRuntimeManager::EnsureReadyLocked 中 GELOGE 改为 GELOGW ### 3. 代码格式和 codecheck 修复 - 修复 clang-format / ruff format 格式问题 - 拆分 _query_current_python_build_info、_rewrite_link_args、_build_native_artifacts 等大函数,解决圈复杂度和函数行数超限告警 - 修复 slice whitespace before ':' 问题 - 提取 CheckAutoTuneMode 函数解决 aclgrphBuildInitializeImpl 函数行数超限 - 修正 catagory 拼写为 category ## 变更类型 请选择本次引入的变更类型: - [x] Bug 修复 - [ ] 新功能 - [ ] 代码风格更新(格式化,局部变量) - [ ] 重构(既不修复错误也不增加功能的代码变动) - [ ] 构建过程或辅助工具的变动 - [ ] 文档内容更新 ## 关联的Issue 暂无。 ## 如何测试 - 模拟 sysconfig.LIBDIR 指向 /root/miniconda3/envs/xxx/lib、当前解释器位于 /root/anaconda3/envs/xxx/bin/python 的场景,确认查找目录优先包含 /root/anaconda3/envs/xxx/lib,python3.7 能加载成功 - 验证 Python runtime 加载失败时 GE 初始化仍能正常完成 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 本次变更不涉及用户文档更新 - [x] 我在标题中使用了合适的类型标签(如:feat:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 未执行完整 UT。 See merge request: cann/ge!3762 | 3 个月前 | |
fix: 统一管理 Python 解释器生命周期 Co-authored-by: du-hua1024<duhua2@huawei.com> # message auto-generated for no-merge-commit merge: !3631 merge develop into develop fix: 统一管理 Python 解释器生命周期 Created-by: du-hua1024 Commit-by: du-hua1024 Merged-by: cann-robot Description: # Pull Request ## 描述 当前 TBE、Python Pass 等多处依赖 Python 解释器,本 PR 引入 GePythonRuntimeManager,在 GE 各初始化入口统一探测、加载 libpython 并管理 Python 解释器生命周期,为 Python Fusion Pass 等能力提供一致的运行时基础。 **主要变更:** ### 1. 新增 GePythonRuntimeManager(base/common/python_runtime/) - ge_python_runtime_manager.h:管理器类定义,提供 EnsureReady() / ShutdownProcess() 接口 - ge_python_runtime_manager.cc:管理器实现,包含 EnsureReadyLocked()、FinalizeOwnedInterpreterLocked() 等核心逻辑 - ge_python_runtime_manager_helper.h:辅助头文件,包含 Python C API 类型定义、符号常量、探测脚本及 inline 工具函数(ResolvePythonCApi、EnsureLibpythonLoaded、ProbePythonRuntimeFromCommand 等) - 自动探测 python3/python 并解析 libpython 路径,通过 dlopen 加载 Python C API - 若进程内已有解释器则 attach,否则初始化 owned interpreter 并在 init 线程释放 GIL ### 2. 接入 GE 初始化链路 - GEInitializeV2 / GEFinalizeV2(api/session/client/ge_api_v2.cc) - GeGenerator::Initialize(compiler/api/generator/ge_generator.cc) - aclgrphBuildInitializeImpl / aclgrphBuildFinalize(compiler/api/aclgrph/ge_ir_build.cc) - ATC 离线编译路径(api/atc/main_impl.cc):GenerateModel、GenerateSingleOp 等入口在 GELib::Initialize 前调用 EnsureReady(),失败/退出路径补充 ShutdownProcess() ### 3. 测试更新 - 新增 ge_python_runtime_unittest.cc,覆盖 attach 已有解释器、owned interpreter 初始化与 shutdown 场景 - 更新 fusion_pass_executor_unittest.cc:添加 python_pass_loaded_ 状态追踪,SetUp/TearDown 仅在加载过 Python pass 时调用 UnloadPythonPasses() - 更新 ge_generator_unittest.cc、ge_api_v2_unittest.cc、ge_ir_build_unittest.cc 等,在 teardown 中调用 ShutdownProcess() 避免用例间状态污染 - 更新 ST 测试入口(test_main.cc、rt2_test_main.cc、dump_test_fixture.h)添加 ShutdownProcess() - 更新 dflow 测试(test.cc、init_ge.h、dflow_api_unittest.cc、ge_api_dflow_unittest.cc)添加 GEFinalize() 调用 - 新增 scoped_unset_ld_preload.h 辅助类,用于 ge_running_env_test 中临时清除 LD_PRELOAD 环境变量 ## 变更类型 - [x] ✨ 新功能 - [ ] 🐛 Bug 修复 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue 无 ## 如何测试 1. 验证在线、离线、atc 场景编译入口在加载 Python pass 前能成功初始化解释器(日志含 [GePythonRuntime] Loaded libpython 或 Initialize owned interpreter) 2. 运行 ge_python_runtime_unittest 验证 attach/owned interpreter 生命周期管理 3. 运行 fusion_pass_executor_unittest 验证 Python pass 注册与卸载逻辑 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于 commit message 的格式、无效 commit 的合并等 ## 其他信息 无 See merge request: cann/ge!3631 | 3 个月前 | |
feat: 适配Python libpython解析并容错初始化失败 Co-authored-by: du-hua1024<duhua2@huawei.com> # message auto-generated for no-merge-commit merge: !3762 merge develop into develop feat: 适配Python libpython解析并容错初始化失败 Created-by: du-hua1024 Commit-by: du-hua1024 Merged-by: cann-robot Description: # Pull Request ## 描述 本次变更包含两部分改动:适配 Python3.7 libpython 路径解析,以及 GE 初始化时 Python 加载失败容错。 ### 1. 适配 Python3.7 libpython 路径解析 修复 Python conda 环境下 libpython 动态库路径解析不稳的问题。 问题场景: - 当前解释器位于 /root/anaconda3/envs/xxx/bin/python。 - sysconfig.get_config_var("LDLIBRARY") / INSTSONAME 返回的 libpython3.7m.so / libpython3.7m.so.1.0 库名是可用的。 - 但 sysconfig.get_config_var("LIBDIR") 可能返回旧 prefix,例如 /root/miniconda3/envs/xxx/lib,与当前解释器真实安装目录不一致,导致原逻辑只在错误目录下查找 libpython。 变更点: - GE Python runtime 探测 libpython 时,目录查找顺序改为优先使用当前解释器目录:sys.prefix/lib、sys.exec_prefix/lib、dirname(sys.executable)/../lib,最后回退 sysconfig.LIBDIR。 - GE Python runtime 在绝对路径查找失败时,保留裸库名 fallback,让 dlopen 继续走 LD_LIBRARY_PATH / ld cache / 系统库路径。 - Python pass runtime fallback codegen 与 native matrix builder 同步使用当前解释器目录优先的查找规则;这两个构建路径仍要求解析到真实库文件路径,不使用裸库名 fallback。 - 兜底库名仍按 Python 3.7 及以下追加 m 后缀、Python 3.8+ 不追加 m 后缀生成,与 py_decouple.cc 规则保持一致。 ### 2. GE 初始化时 Python 加载失败容错 将 GePythonRuntimeManager::EnsureReady() 的失败处理从阻断初始化改为告警并继续,涉及以下入口: - aclgrphBuildInitializeImpl(compiler/api/aclgrph/ge_ir_build.cc) - GEInitializeImpl(api/session/client/ge_api_v2.cc) - GeGenerator::Initialize(compiler/api/generator/ge_generator.cc) - GenerateModel / GenerateSingleOp(api/atc/main_impl.cc) - GePythonRuntimeManager::EnsureReadyLocked 中 GELOGE 改为 GELOGW ### 3. 代码格式和 codecheck 修复 - 修复 clang-format / ruff format 格式问题 - 拆分 _query_current_python_build_info、_rewrite_link_args、_build_native_artifacts 等大函数,解决圈复杂度和函数行数超限告警 - 修复 slice whitespace before ':' 问题 - 提取 CheckAutoTuneMode 函数解决 aclgrphBuildInitializeImpl 函数行数超限 - 修正 catagory 拼写为 category ## 变更类型 请选择本次引入的变更类型: - [x] Bug 修复 - [ ] 新功能 - [ ] 代码风格更新(格式化,局部变量) - [ ] 重构(既不修复错误也不增加功能的代码变动) - [ ] 构建过程或辅助工具的变动 - [ ] 文档内容更新 ## 关联的Issue 暂无。 ## 如何测试 - 模拟 sysconfig.LIBDIR 指向 /root/miniconda3/envs/xxx/lib、当前解释器位于 /root/anaconda3/envs/xxx/bin/python 的场景,确认查找目录优先包含 /root/anaconda3/envs/xxx/lib,python3.7 能加载成功 - 验证 Python runtime 加载失败时 GE 初始化仍能正常完成 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 本次变更不涉及用户文档更新 - [x] 我在标题中使用了合适的类型标签(如:feat:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 未执行完整 UT。 See merge request: cann/ge!3762 | 3 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 3 个月前 | ||
| 3 个月前 | ||
| 3 个月前 |