Pull Request已成功合入, 合并人@CANN-robot
(感谢 CactiCode 的贡献)变更摘要
本 PR 主要针对 Autofuse 编译器的 host 编译与并行调度进行优化,涉及 ascendc_compile.py 与 compile_adapter.py 两个文件。核心改动包括:新增 --parallel_host_device 参数并改用 parser.parse_known_args 做兼容解析;在 main 中按该参数自适应选择 host/device 并行或串行编译,并移除绑核逻辑改为 OS 调度;host worker 数改为跟随 cpp 文件数动态调整并只保底下界;host 侧由多 cpp 拆分编译改为合并单文件编译;编译命令默认不再捕获输出(丢弃到 DEVNULL)以避免多进程并发时 pipe 拥塞,仅在失败时重试一次并捕获 stderr 用于报错。
主要改动
- 新增
--parallel_host_device参数并兼容未知参数:parse_compile_args新增--parallel_host_device(str2bool,默认False表示串行),并将parser.parse_args改为parser.parse_known_args,提升命令行参数兼容性。 - host/device 自适应并行与串行编译:
main中parallel_host_device=True时通过ThreadPoolExecutor(max_workers=2)并行执行compile_host_objs与compile_device_obj,否则串行执行;同时移除绑核逻辑(改由 OS 调度),并新增_skip_acquire、device_obj_path等参数在compile_host_objs、build_device_so、link_kernel_target间透传已编译的 device 对象。 - host worker 数动态自适应: 新增
HOST_WORKER_MIN = 2与_clamp_host_worker_count,worker 数跟随 cpp 文件数(每 cpp 一线程)只保底下界防退化串行;get_host_compile_worker_count保留budget=0形参以兼容旧调用。 - host 单文件编译优化:
write_host_sources在有 split marker 时仍生成拆分头文件(供 cpp#include),但将各 cpp 段合并为单个 cpp 文件编译,避免大 kernel 场景下多 cpp 并行抢池退化;compile_host_objs也相应移除ThreadPoolExecutor改为串行逐文件编译。 - 编译输出处理与失败重试:
run_compile_command在未开启诊断时默认将 stdout/stderr 重定向到DEVNULL(避免多进程并发编译时 pipe 拥塞导致编译时间暴涨),命令失败时重试一次并捕获 stderr 用于构造报错信息。


代码审查
审查总结
变更文件复核
- autofuse/compiler/python/ascendc_compile.py — 已逐段复核:
run_compile_command重试逻辑(发现 P3)、build_pch_command列表拆分(等价、无问题)、_clamp_host_worker_count/get_host_compile_worker_count(发现 P2 UT 回归 + P3 死代码/串行化回退)、compile_host_objs/compile_device_obj(发现 P3 串行化)、build_device_so/link_kernel_target新增device_obj_path参数(发现 P2 UT 破坏)、main并行/串行 all 流程(线程调度与 PCH/产物路径无冲突,无新增问题)。 - autofuse/compiler/python/compile_adapter.py — 已逐段复核:
parse_compile_args改parse_known_args(发现 P3 静默吞参)、write_host_sources单文件合并(发现 P3 翻译单元合并风险)。PGO 路径write_inductor_pgo_sources未受影响。
发现统计
- P2(2 个):①
get_host_compile_worker_count丢失 CPU 上限语义,破坏既有 UTtest_get_host_compile_worker_count_uses_32_worker_limit;②link_kernel_target无条件传第 4 个位置参数给build_device_so,破坏 3 参 mock 的既有 UTtest_link_kernel_target_reuses_host_objects_for_static_recompile。 - P3(4 个):③
compile_host_objs串行化导致多文件(PGO 拆分)host 编译并行度回退,且新增 worker 计数逻辑全部为未接线的死代码;④run_compile_command确定性失败双倍执行整条命令,放大失败路径耗时;⑤parse_known_args静默忽略拼错/未知参数,可能悄然改变编译行为;⑥write_host_sources把多个 cpp 段合并为单一翻译单元,存在跨段符号冲突/粘连风险且无测试覆盖。
整体风险判断
该 PR 的核心改动(host 单文件合并编译、host/device 自适应并行、失败重试)方向明确且注释充分,但存在两类真实回归:一是两处既有单元测试被破坏(P2,CI 会直接变红);二是 host 并行编译的 worker 调度机制被移除却留下整套未接线死代码,且 PGO 多文件路径从并行退化为串行,说明重构未完全收口。建议合入前先修复两处 UT 回归、确认多文件路径的并行度取舍,并对失败重试与单文件合并语义补充测试。
No further issues found in the final sweep beyond the above.
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 2 |
💬 仅评论


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.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-cann/graph-autofusion | ✅ yangyongqiang0606, zhang_shengjie, wangxiaotian995 (3/2) | ✅ yangyongqiang0606 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
Ren_Jie, thanks for your pull request. All authors of the commits have signed the CLA. 👍


/lgtm


/approve


描述
为支持 TorchAir 通过 Inductor 进程池并行调度 AscendC 编译,将原有完整编译入口拆分为可独立调用的 tiling object、kernel object 和收尾链接阶段,同时保留原有完整编译路径的功能行为。
修改内容
.o,支持源码 split 和 PCH。.o,不执行链接。.so。all、host、device、JIT、Top-N、PGO、CV fusion、PCH 和静态 shape 重编译路径。tiling_obj_paths、kernel_obj_path等。编译流程
兼容性
为 TorchAir PR #3595 提供底层 AscendC 原子编译入口;原有完整编译入口仍保留,旧 TorchAir 可继续使用原有调用方式。建议升级顺序:先升级 graph-autofusion,再升级 TorchAir。
如何测试
python -m py_compile语法检查通过。核对清单
其他信息
本 PR 相对最新
develop仅保留以下两个文件改动:autofuse/compiler/python/ascendc_compile.pyautofuse/compiler/python/compile_adapter.pyAuthored with an AI assistant.