新闻详情

新闻详情

首页 / 资讯中心 / 详情

CANN/ge MatMul+Add融合pass样例

发布时间:2026/9/10 3:02:11来源:尧图网络
CANN/ge MatMul+Add融合pass样例
样例使用指导【免费下载链接】geGEGraph Engine是面向昇腾的图编译器和执行器提供了计算图优化、多流并行、内存复用和模型下沉等技术手段加速模型执行效率减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge功能描述本样例为MatMulAdd融合为GEMM自定义pass样例 提供在线推理与atc工具离线编译模型两种方式演示框架如何调用自定义pass完成图优化。 本样例使用eager style api和融合接口实现。目录结构├── src │ ├──fuse_matmul_add_pass.cpp // pass实现文件 ├── CMakeLists.txt // 编译脚本 ├── data | ├──torch_gen_onnx.py // torch脚本用于导出onnx | ├──torch_forward.py // torch脚本用于在线推理 |—— gen_es_api | |——CMakeLists.txt // 生成eager style api的编译脚本环境要求编译器GCC 7.3.x使用python及其依赖库版本python3.9 、pytorch2.1已完成环境准备。实现步骤定义类FuseMatMulAndAddPass继承PatternFusionPass。重写基类PatternFusionPass中的2个函数Patterns定义匹配模板用于在整图中获取与该模板相同的拓扑。Replacement定义替换部分。注册FuseMatMulAndAddPass为自定义融合pass执行阶段为BeforeInferShape。程序编译假设CANN软件包的安装目录为INSTALL_PATH例如/home/HwHiAiUser/Ascend/。配置环境变量。运行软件包中设置环境变量脚本命令如下source ${ASCEND_PATH}/set_env.sh${ASCEND_PATH}为CANN软件包安装目录下的cann路径。请替换相关软件包的实际安装路径例如${INSTALL_PATH}/cann。根据实际情况修改CMakeLists.txt文件中的如下信息。ASCEND_PATH可以设置默认的软件包路径如果通过set_env.sh设置了$ASCEND_HOME_PATH无需修改。PASS_SO_DIR可以设置自定义融合pass动态库安装目录名默认为pass_so_dir。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_pass.so安装到自定义融合pass目录下。 可以在make后增加可选参数-j$(nproc)用于并行执行构建任务$(nproc)动态获取CPU核心数。make -j$(nproc) fuse_matmul_add_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 Define replacement for FuseMatMulAndAddPass在线推理设置环境变量dump出编译过程中的模型图export DUMP_GE_GRAPH1进入data目录执行.py文件进行在线推理在线推理请确保已安装torch_npu插件python torch_forward.py日志中出现如下打印Define pattern for FuseMatMulAndAddPass Define replacement for FuseMatMulAndAddPass查看运行结果执行完成后目录下生成一系列.pbtxt文件。 对比以下dump图ge_onnx_xxxxx_PreRunBegin.pbtxt执行前dump图ge_onnx_xxxxx_RunCustomPassBeforeInferShape.pbtxt执行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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

WSABuilds Windows安卓子系统完整安装指南:从解包到首次启动 2026/9/10 4:23:21

WSABuilds Windows安卓子系统完整安装指南:从解包到首次启动

WSABuilds Windows安卓子系统完整安装指南:从解包到首次启动 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (ro…

阅读更多 →
OpenHuman TokenJuice 适配器:宿主侧接入独立加载型上下文压缩模块的完整解析 2026/9/10 4:23:21

OpenHuman TokenJuice 适配器:宿主侧接入独立加载型上下文压缩模块的完整解析

OpenHuman TokenJuice 适配器:宿主侧接入独立加载型上下文压缩模块的完整解析 【免费下载链接】openhuman OpenHuman is an open source personal AI for Mac, Windows and Linux — local-first memory, agent orchestration, and deep research. 项目地址: http…

阅读更多 →
电商后台系统和ERP有什么区别?2026选型避坑指南 2026/9/10 4:23:21

电商后台系统和ERP有什么区别?2026选型避坑指南

摘要:电商后台系统和ERP到底有什么区别,很多老板在选型时第一反应就是想弄清楚这个问题。本文用2026年最新视角拆解两者的定位差异、功能边界与适用场景,帮你不花冤枉钱。 这两年问"该上系统"的电商老板越来越多,但一开…

阅读更多 →
国产MCU替代STM32的5个隐藏坑:复位、晶振、GPIO、调试、Flash实操避坑指南 2026/9/10 4:23:21

国产MCU替代STM32的5个隐藏坑:复位、晶振、GPIO、调试、Flash实操避坑指南

1. 为什么“Pin-to-Pin兼容”不是换颗芯片就能跑起来的万能钥匙国产MCU替代STM32,这两年几乎成了嵌入式工程师桌面上的日常议题。从GD32、APM32、CKS32到MM32,厂商宣传页上最醒目的四个字永远是“Pin-to-Pin兼容”——引脚定义一致、封装相同、甚至数据手…

阅读更多 →
嵌入式软硬一体团队怎么找?3-5人成熟外协团队的筛选与合作方法 2026/9/10 4:23:21

嵌入式软硬一体团队怎么找?3-5人成熟外协团队的筛选与合作方法

在嵌入式这个圈子里待得越久,越觉得"找个靠谱的人"比"做个靠谱的产品"更难。每年蓝桥杯赛道里挤满了新人,技术社区里的学习路线、面试题、八股文满天飞,可真到项目需要把一个硬件从原理图画到PCB、再把驱动从uboot调到应…

阅读更多 →
TelegramBots内联查询系统:打造智能交互体验的终极指南 2026/9/10 4:20:21

TelegramBots内联查询系统:打造智能交互体验的终极指南

TelegramBots内联查询系统:打造智能交互体验的终极指南 TelegramBots是一个强大的Java库,专为创建基于Telegram Bots API的机器人而设计。内联查询系统作为其核心功能之一,允许用户直接在聊天中输入查询并获得即时反馈,无需打开单…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞