已合并
fix: torch ops cpp sources #8489
丛吉钰创建于 17 天前
fix: torch ops cpp sources #8489
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 丛吉钰 的贡献)atomgit-bot
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/<category>/调整为csrc/;BuildPyWithOps新增对csrc子目录的处理,构建时清理不属于当前选中算子的残留.cpp文件。install_requires依赖调整:移除torch>=2.6.0和torch_npu,新增ninja作为安装依赖。


atomgit-bot
17 天前 评论:
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 |
⛔ 需要修改


17 天前 添加了label:cann-cla/yes
17 天前 修改了pull request 的描述
此处折叠了56条消息 查看更多
wang-xing001
15 天前 评论:
15 天前 评论:
/lgtm
/approve


15 天前 添加了label:approved
15 天前 关闭了关联的issue
15 天前 合入了pull request
CANN-robot
15 天前 评论:
15 天前 评论:
Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


描述
本次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") 替代原有的硬编码子目录路径。/ 调整为 csrc/;BuildPyWithOps 新增对 csrc 子目录的处理,构建时清理不属于当前选中算子的残留 .cpp 文件。
load 方法增强:新增 ninja 可用性检查,若未安装则抛出明确的 RuntimeError;JIT 编译失败时提供包含常见原因(CANN toolkit 未 source、缺少编译器、缺少 ninja)的诊断信息。
setup.py 打包逻辑适配:_non_python_files 和 _collect_op 中 .cpp 文件的收集路径从 csrc/
install_requires 依赖调整:移除 torch>=2.6.0 和 torch_npu,新增 ninja 作为安装依赖。
关联的Issue
#4690
测试
本地编译构建,查看build目录下的目录层级
文档更新
类型标签
AI/Agent生成声明