| feat: integrate fxrt as in-tree subpackage of torch_npu build and wheel Co-authored-by: chenhaozhe<chenhaozhe1@huawei.com> # message auto-generated for no-merge-commit merge: !45813 merge fxrt-src into master feat: integrate fxrt as in-tree subpackage of torch_npu build and wheel Created-by: c_34 Commit-by: chenhaozhe Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 > <font color="red">**如有社区issue,请关联issue链接**</font>\ > <font color="red">**请勿携带内部流程信息(需求链接、问题单、内部issue等)**</font> - [ ] 需求 - [ ] 问题单 - [x] issue/工单 https://gitcode.com/Ascend/pytorch/issues/4733 - [ ] 重构优化 - [ ] 资料更新 ## 目的 将 fxrt(FX 图运行时)以源码方式合入 torch_npu,随 torch_npu 一起编译打包,用户安装 torch_npu 后即可直接使用,无需单独安装 fxrt。 ### 概述 将 FX 图运行时 fxrt 放入 fxrt/ 目录,随 torch_npu 一起构建,以 torch_npu.fxrt 子包的形式发布,不再单独发包。 diff 主体是 fxrt/ 下的源码。对 torch_npu 已有代码的改动为 19 个文件、约 270 行,其中约 200 行是新增测试。 ### 对 torch_npu 的影响 - import torch_npu 不加载 fxrt,行为不变;fxrt 在 import torch_npu.fxrt 时才加载。 - 导入 fxrt 不改动 inductor,需显式调用 torch_npu.fxrt.register_fx_wrapper() 才会接管。 - C++ 接口唯一改动:导出 npu_logging::Logger。 - --disable_fxrt 可构建不含 fxrt 的 wheel。 # 【修改方案】 > 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列\ > 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容) **构建接入**(沿用 torchair 方式) - setup.py:检测到 fxrt/fxrt 时传入 BUILD_FXRT、FXRT_INSTALL_DST、FXRT_TARGET_PYTHON;package_data 增加 fxrt 的 .so。fxrt 暂不提供 C++ 接口,wheel 中不含 fxrt 头文件。 - CMakeLists.txt:在 torch_npu target 之后 add_subdirectory(fxrt/fxrt)。 - ci/build.sh:新增 --disable_fxrt。 fxrt 的依赖(ACL/HCCL stub、nlohmann、DVM)均复用仓库内已有内容,构建时不下载,也不依赖 CANN 安装。fxrt 库的 RPATH 包含 torch_npu/lib,auditwheel 可在 wheel 内解析 libtorch_npu.so 及其依赖。 **日志** - torch_npu/_logging/_internal.py:注册 fxrt 日志别名,TORCH_NPU_LOGS=+fxrt 控制 fxrt 的 C++ 和 Python 日志。 - torch_npu/csrc/logging/Logger.h:Logger 加 TORCH_NPU_API。torch_npu 以 -fvisibility=hidden 编译,fxrt 调用 Logger 成员函数需要导出符号,实现不变。 - TORCH_NPU_LOGS.md:模块表增加 fxrt。 **构建依赖** - nanobind 仅构建时需要(静态链接,运行时不依赖),加入 requirements*-build.txt、.ci/docker/requirements-builder.txt(==2.13.0)、ci/docker 的 Dockerfile 和源码构建指南。 **测试与门禁** - 新增 test/fxrt(7 个用例,fxrt 未构建时跳过):fxrt 后端编译运行;import torch_npu / import torch_npu.fxrt 无副作用;register_fx_wrapper() 注册行为。 - test/npu/test_public_bindings.py:模块名检查跳过 torch_npu.fxrt。fxrt 以顶层包名 fxrt 执行,对象的 __module__ 为 fxrt.*;导入检查不跳过。 - .lintrunner.toml:fxrt C++ 源码纳入 clang-format 检查。 - tools/linter/dictionary.txt:增加 hax`(fxrt 哈希实现中的变量名)。 详见RFC issue # 【资料变更】 > 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及” 当前版本不涉及 # 【接口变更】 > 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及” 新增demo特性,不涉及历史接口版本变更,demo特性已进行隔离,默认不开启。 # 【功能验证】 > 说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤\ > 新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图 当前作为demo能力,默认不主动使能的情况下,要求不修改任何pytorch_npu已有逻辑和行为。 主要验证: 1. 构建打包安装行为不影响torch-npu的包。 2. 不主动使能情况下,原有torch-npu行为不受fxrt任何影响。 关于新增依赖的缺陷扫描,主要新增一个nanobind作为构建过程中的python依赖,扫描结果如下,引入依赖版本无安全缺陷报告:  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/pytorch!45813 | 15 天前 |