已合并
fix: torch ops cpp sources #8489
丛吉钰创建于 17 天前
fix: torch ops cpp sources #8489
已合并
丛吉钰创建于 17 天前
丛吉钰
丛吉钰成员
17 天前

描述

本次PR主要修复了 Torch 算子 C++ 源码的路径管理问题,将原本按算子类别(如 activation、matmul、norm、quant)分目录存放的 .cpp 文件统一扁平化到 csrc/ 根目录。同时简化了 OpBuilder 基类,移除 category 参数及相关路径拼接逻辑,并增强了 JIT 编译阶段的错误诊断能力和构建过程中的文件清理机制。

主要改动

OpBuilder 基类重构:移除 init 中的 category 参数,resolve_source 方法简化为直接返回 csrc/{cpp_filename},不再拼接子目录;各子类 sources() 方法统一改用 self.resolve_source("xxx.cpp") 替代原有的硬编码子目录路径。
load 方法增强:新增 ninja 可用性检查,若未安装则抛出明确的 RuntimeError;JIT 编译失败时提供包含常见原因(CANN toolkit 未 source、缺少编译器、缺少 ninja)的诊断信息。
setup.py 打包逻辑适配:_non_python_files 和 _collect_op 中 .cpp 文件的收集路径从 csrc// 调整为 csrc/;BuildPyWithOps 新增对 csrc 子目录的处理,构建时清理不属于当前选中算子的残留 .cpp 文件。
install_requires 依赖调整:移除 torch>=2.6.0 和 torch_npu,新增 ninja 作为安装依赖。

关联的Issue

#4690

测试

本地编译构建,查看build目录下的目录层级

文档更新

类型标签

AI/Agent生成声明

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 丛吉钰 的贡献)
丛吉钰丛吉钰成员
17 天前 创建了 pull request,commit 9fd02293
atomgit-bot
atomgit-bot
17 天前 评论:

变更摘要

本次PR主要修复了 Torch 算子 C++ 源码的路径管理问题,将原本按算子类别(如 activationmatmulnormquant)分目录存放的 .cpp 文件统一扁平化到 csrc/ 根目录。同时简化了 OpBuilder 基类,移除 category 参数及相关路径拼接逻辑,并增强了 JIT 编译阶段的错误诊断能力和构建过程中的文件清理机制。

主要改动

  • OpBuilder 基类重构:移除 __init__ 中的 category 参数,resolve_source 方法简化为直接返回 csrc/{cpp_filename},不再拼接子目录;各子类 sources() 方法统一改用 self.resolve_source("xxx.cpp") 替代原有的硬编码子目录路径。
  • load 方法增强:新增 ninja 可用性检查,若未安装则抛出明确的 RuntimeError;JIT 编译失败时提供包含常见原因(CANN toolkit 未 source、缺少编译器、缺少 ninja)的诊断信息。
  • setup.py 打包逻辑适配_non_python_files_collect_op.cpp 文件的收集路径从 csrc/<category>/ 调整为 csrc/BuildPyWithOps 新增对 csrc 子目录的处理,构建时清理不属于当前选中算子的残留 .cpp 文件。
  • install_requires 依赖调整:移除 torch>=2.6.0torch_npu,新增 ninja 作为安装依赖。
likedislike
atomgit-bot
atomgit-bot
17 天前 评论:

代码审查

我已审查完所有 13 个变更文件。以下是审查结果摘要:


审查结果汇总

优先级 数量 说明
P0 1 flat_quant.py 遗漏移除 category 参数,导致导入时 TypeError
P2 2 install_requires 移除关键依赖 + extension.cpp 被错误排除
P3 1 BuildPyWithOps.run().h 文件清理逻辑不一致

整体风险判断:中高风险。 P0 缺陷会导致 flat_quant 模块导入立即崩溃,必须修复后才能合入。两个 P2 问题合在一起可能影响选择性构建的可用性。


逐文件审查确认

文件 审查结果
activation/swiglu_group/torch_extension/swiglu_group.py ✅ 无问题
activation/swiglu_group_quant/torch_extension/swiglu_group_quant.py ✅ 无问题
activation/swiglu_group_quant_grad/torch_extension/swiglu_group_quant_grad.py ✅ 无问题
experimental/activation/swiglu_clamp/torch_extension/swiglu_clamp.py ✅ 无问题(仅注释更新,一致)
matmul/matmul_emu_split_weight/torch_extension/matmul_emu_split_weight.py ✅ 无问题
matmul/quant_matmul_activation_quant/torch_extension/quant_matmul_activation_quant.py ✅ 无问题
norm/rms_norm_dynamic_quant/torch_extension/rms_norm_dynamic_quant.py ✅ 无问题
quant/flat_quant/torch_extension/flat_quant.py ❌ P0:super().__init__ 仍传递 category 参数
quant/grouped_dynamic_mx_quant_with_dual_axis/torch_extension/grouped_dynamic_mx_quant_with_dual_axis.py ✅ 无问题
quant/mx_to_block_mx_quant/torch_extension/mx_to_block_mx_quant.py ✅ 无问题
quant/swiglu_group_grad/torch_extension/swiglu_group_grad.py ✅ 无问题
torch_extension/cann_ops_nn/op_builder/builder.py ✅ 无问题(resolve_source 简化 + ninja 检查 + 错误包装,一致)
torch_extension/setup.py ⚠️ P2×2 + P3×1(如上所述)
类型 数量
🔴 阻塞 1
🟡 建议 0

⛔ 需要修改

likedislike
CANN-robotCANN-robot成员
17 天前 添加了label:cann-cla/yes
丛吉钰丛吉钰成员
17 天前 修改了pull request 的描述
此处折叠了56条消息 查看更多
wang-xing001成员
15 天前 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
15 天前 添加了label:approved
CANN-robotCANN-robot成员
15 天前 关闭了关联的issue
CANN-robotCANN-robot成员
15 天前 合入了pull request
CANN-robot
CANN-robot成员
15 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike