首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
GE融合Pass:MatMul+Add融合示例
📅 2026/9/10 2:59:31
✍️ 爱科研究院
👁 阅读 3,247
样例使用指导【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge功能描述本样例以MatMulAdd融合为GEMM的融合pass为例介绍capture tensor 功能的使用 提供在线推理与atc工具离线编译模型两种验证方式pass使用eager style api和融合接口实现。目录结构├── src │ ├──fuse_matmul_add_pass.cpp // pass实现文件 ├── CMakeLists.txt // 编译脚本 ├── data | ├──torch_gen_onnx.py // torch脚本用于导出onnx | ├──torch_forward_1.py // torch脚本用于在线推理pass成功执行 | ├──torch_forward_2.py // torch脚本用于在线推理pass被拦截 |—— gen_es_api | |——CMakeLists.txt // 生成eager style api的编译脚本环境要求编译器GCC 7.3.x使用python及其依赖库版本python3.9 、pytorch2.1已完成相关环境准备。实现步骤定义类FuseMatMulAndAddPass继承PatternFusionPass。重写基类PatternFusionPass中的3个函数Patterns定义匹配模板用于在整图中获取与该模板相同的拓扑。pattern-CaptureTensor()捕获tensortensor结构为{NodeIo,index}。MeetRequirements对模板匹配到的拓扑进行筛选。match_result-GetCapturedTensor(kAddCaptureIdx,add_node);读取捕获的NodeIo进行检查。Replacement定义替换部分。match_result-GetCapturedTensor(kMatMulCaptureIdx, matmul_node);读取捕获的NodeIo提取属性值。注册FuseMatMulAndAddPass为自定义融合pass执行阶段为BeforeInferShape。程序编译配置环境变量。运行软件包中设置环境变量脚本命令如下source ${ASCEND_PATH}/set_env.sh${ASCEND_PATH}为CANN软件包安装目录下的cann路径。请替换相关软件包的实际安装路径例如${INSTALL_PATH}/cann。根据实际情况修改CMakeLists.txt文件中的如下信息。ASCEND_PATH可以设置默认的软件包路径如果通过set_env.sh设置了$ASCEND_HOME_PATH无需修改。target_include_directories需要包含的头文件对于本示例无需修改。如果是用户自行开发的代码当需要添加头文件时在示例下方直接增加行即可注意不要删除原有项目。如果网络中有自定义算子请增加自定义算子的原型定义头文件。target_link_libraries需要链接的库对于本示例无需修改。如果是用户自行开发的代码当需要添加链接库时在示例下方直接增加行即可注意不要删除原有项目。禁止链接软件包中的其他so否则后续升级可能会导致兼容性问题。执行如下命令 生成eager style api依次执行:mkdir build cd build cmake ..执行后在build目录下产生的es_all_build/generated_code目录中包含es构图api的头文件及源码。执行make命令编译自定义pass so成功编译后通过make install将动态库文件libfuse_matmul_add_for_capture_tensor_sample_pass.so安装到自定义融合pass目录下。 可以在make后增加可选参数-j$(nproc)用于并行执行构建任务$(nproc)动态获取CPU核心数。make -j$(nproc) fuse_matmul_add_for_capture_tensor_sample_pass make install程序运行配置环境变量(如已执行跳过)。运行软件包中设置环境变量脚本命令如下source ${ASCEND_PATH}/set_env.sh${ASCEND_PATH}请替换相关软件包的实际安装路径。使用ATC离线推理。设置环境变量dump出编译过程中的模型图export DUMP_GE_GRAPH1进入data目录执行.py文件导出onnx文件中使用了torch的onnx导出器依赖额外的Python包onnx运行前请确保安装。此外ATC工具当前最高支持onnx opset_version 18,若当前torch默认导出更高版本需显示指定详情见脚本中注释python torch_gen_onnx.py执行结束后在data目录下生成.onnx格式的模型文件名称为model.onnx。执行ATC工具命令(关于ATC工具的详细说明请前往昇腾文档搜索文档“ATC离线模型编译工具”)soc_version请根据实际环境修改atc --model./model.onnx --framework5 --soc_versionxxx --output./model日志打印内容Define pattern for FuseMatMulAndAddPass in capture tensor sample Define MeetRequirements for FuseMatMulAndAddPass in capture tensor sample Define replacement for FuseMatMulAndAddPass in capture tensor sample在线推理设置环境变量dump出编译过程中的模型图export DUMP_GE_GRAPH1进入data目录执行.py文件进行在线推理在线推理请确保已安装torch_npu插件执行torch_forward_1.pypython torch_forward_1.py对于torch_forward_1.py日志中出现如下打印Define pattern for FuseMatMulAndAddPass in capture tensor sample Define MeetRequirements for FuseMatMulAndAddPass in capture tensor sample Define replacement for FuseMatMulAndAddPass in capture tensor sample执行torch_forward_2.pypython torch_forward_2.py对于torch_forward_2.py日志中出现如下打印Define pattern for FuseMatMulAndAddPass in capture tensor sample Define MeetRequirements for FuseMatMulAndAddPass in capture tensor sample Only support Add inputs are fp32查看运行结果执行完成后目录下生成一系列.pdtxt文件。 对比以下dump图ge_onnx_xxxxx_PreRunBegin.pdtxt执行前dump图ge_onnx_xxxxx_RunCustomPassBeforeInferShape.pdtxt执行InferShape前的自定义pass dump图可以发现模型已按预期优化即MatMul与Add被GEMM替换。若未获得预期结果可设置如下环境变量如使用atc命令还需添加参数--logdebug让日志打印到屏幕来定位原因。export ASCEND_SLOG_PRINT_TO_STDOUT1 #日志打印到屏幕 export ASCEND_GLOBAL_LOG_LEVEL0 #日志级别为debug级别【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/9/10 2:59:31
OpenMAIC 扩展实战指南:在 Fork 仓库内定制 AI 提供商、持久化、主题与页面(Extend Cookbook 深度解读)
2026/9/10 2:59:31
CANN/ge动态批量图片分类样例
2026/9/10 2:59:31
Mojo 编译器(KGEN)测试体系实战指南:从 lit 测试编写到 Bazel 运行全流程
2026/9/10 6:54:44
CANN/GE图引擎ACL整型属性设置API
2026/9/10 6:54:44
CANN/ge CBLAS算子调用示例
2026/9/10 6:54:44
Vue Vben Admin 为何值得选择:框架理念、技术演进与质量保障体系全解析
2026/9/10 6:54:44
Apache Airflow 3.x 版本发布说明深度解读:从 3.0 服务化架构到 3.3 分区调度与多团队
2026/9/10 6:54:44
ToolJet 在 Google Cloud Run 上的完整部署指南:应用、ToolJet Database 与 Workflows
2026/9/10 6:49:44
Nacos 客户端运行时规范深度解析:连接、能力协商、本地缓存与 Redo 恢复机制
2026/9/10 0:04:20
AI搜索的信任缺口:企业内容如何在答案时代自证可信
2026/9/10 0:04:20
Spring Boot+Vue+Node.js售后服务系统开发实战
2026/9/10 0:04:20
SpringBoot+Vue民宿预订管理系统开发实践:从架构设计到部署上线
2026/9/10 2:30:52
超人会飞不算本事:系统稳定依赖清晰规则与边界设计
2026/9/10 5:51:31
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
2026/9/9 5:25:52
基于CNN的调制信号识别:MATLAB实现时频图分类实战