news 2026/5/11 3:30:35

昇腾CANN GE融合Pass示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
昇腾CANN GE融合Pass示例

样例使用指导

【免费下载链接】geGE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力,并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge

功能描述

本样例为移动ReLu到Concat前的自定义pass样例,当融合pass场景中需要包含动态数量输入/出的算子时,可参考本样例。 样例中提供在线推理与atc工具离线编译模型两种方式演示框架如何调用自定义pass完成图优化, 使用eager style api和融合接口实现。

目录结构

├── src │ ├──move_relu_before_concat_pass.cpp // pass实现文件 ├── CMakeLists.txt // 编译脚本 ├── data | ├──es_gen_air.py // 导出air | ├──torch_forward.py // torch脚本用于在线推理 |—— gen_es_api | |——CMakeLists.txt // 生成eager style api的编译脚本

环境要求

  • 编译器:GCC >= 7.3.x
  • 使用python及其依赖库版本:python>=3.9 、pytorch>=2.1
  • 已完成相关环境准备。

实现步骤

  1. 定义MoveReluBeforeConcatPass类继承FusionBasePass
  2. 重写基类FusionBasePass中的Run方法,其中实现自定义pass逻辑。
  3. 定义FindConcatNodesMeetRequirements遍历图中节点,获取符合条件的Concat节点。
  4. 定义MoveReluBeforeConcat实现改图,其中:
    • Replacement根据concat节点构造替换结构
    • GetSubgraphBoundary构造被替换的子图边界boundary
    • 最后调用SubgraphRewriterReplace方法实现替换

程序编译

假设CANN软件包的安装目录为INSTALL_PATH,例如/home/HwHiAiUser/Ascend/

  1. 配置环境变量。

    运行软件包中设置环境变量脚本,命令如下:

    source ${ASCEND_PATH}/set_env.sh

    ${ASCEND_PATH}为CANN软件包安装目录下的cann路径。请替换相关软件包的实际安装路径,例如${INSTALL_PATH}/cann

  2. 根据实际情况修改CMakeLists.txt文件中的如下信息。

    • ASCEND_PATH:可以设置默认的软件包路径,如果通过set_env.sh设置了$ASCEND_HOME_PATH,无需修改。

    • PASS_SO_DIR:可以设置自定义融合pass动态库安装目录名,默认为pass_so_dir

    • target_include_directories:需要包含的头文件,对于本示例,无需修改。如果是用户自行开发的代码,当需要添加头文件时,在示例下方直接增加行即可,注意不要删除原有项目。如果网络中有自定义算子,请增加自定义算子的原型定义头文件。

    • target_link_libraries:需要链接的库,对于本示例,无需修改。如果是用户自行开发的代码,当需要添加链接库时,在示例下方直接增加行即可,注意不要删除原有项目。

      禁止链接软件包中的其他so,否则后续升级可能会导致兼容性问题。

  3. 执行如下命令 生成eager style api

    依次执行:

    mkdir build && cd build cmake ..

    执行后,在build目录下产生的es_all_build/generated_code目录中包含es构图api的头文件及源码。

  4. 执行make命令编译自定义pass so,成功编译后通过make install将动态库文件libmove_relu_before_concat_pass.so安装到自定义融合pass目录下。 可以在make后增加可选参数-j$(nproc)用于并行执行构建任务,$(nproc)动态获取CPU核心数。

    make -j$(nproc) move_relu_before_concat_pass make install

程序运行

  1. 配置环境变量(如已执行,跳过)。

    • 运行软件包中设置环境变量脚本,命令如下:

      source ${ASCEND_PATH}/set_env.sh

      ${ASCEND_PATH}请替换相关软件包的实际安装路径。

  2. 使用ATC离线推理。

    • 设置环境变量,dump出编译过程中的模型图:
      export DUMP_GE_GRAPH=1
    • 安装es_all.whl
      pip install --force-reinstall --upgrade --target ${ASCEND_PATH}/python/site-packages/ ${BUILD_PATH}/es_output/whl/es_all-*****.whl

      ${BUILD_PATH}请替换为build目录的实际路径。

    • 设置环境变量,添加es_all.so的路径
      LD_LIBRARY_PATH="${BUILD_PATH}/es_output/lib64:${LD_LIBRARY_PATH}"
    • 进入data目录执行.py文件导出air:
      python es_gen_air.py
    • 执行结束后,在data目录下生成.air格式的模型文件,名称为graph.air。
    • 执行ATC工具命令(关于ATC工具的详细说明,请前往昇腾文档搜索文档“ATC离线模型编译工具”),soc_version请根据实际环境修改:
      atc --model=./graph.air --framework=1 --soc_version=xxx --output=./model
    • 日志中出现如下打印:
      MoveReluBeforeConcatPass Define Replacement for MoveReluBeforeConcatPass Replacement of MoveReluBeforeConcatPass succeeded
  3. 在线推理

    • 设置环境变量,dump出编译过程中的模型图:
      export DUMP_GE_GRAPH=1
    • 进入data目录执行.py文件进行在线推理(在线推理请确保已安装torch_npu插件):
      python torch_forward.py
    • 日志中出现如下打印:
      MoveReluBeforeConcatPass Define Replacement for MoveReluBeforeConcatPass Replacement of MoveReluBeforeConcatPass succeeded
  4. 查看运行结果

    • ATC工具命令执行完成后,目录下生成一系列.pbtxt文件。 对比以下dump图:

      • ge_onnx_xxxxx_PreRunBegin.pbtxt执行前dump图
      • ge_onnx_xxxxx_RunCustomPassBeforeInferShape.pbtxt执行InferShape前的自定义pass dump图

      可以发现模型已按预期优化,即ReLu被移动到到Concat前。

    • 若未获得预期结果,可设置如下环境变量(如使用atc命令,还需添加参数--log=debug)让日志打印到屏幕,来定位原因。

      export ASCEND_SLOG_PRINT_TO_STDOUT=1 #日志打印到屏幕 export ASCEND_GLOBAL_LOG_LEVEL=0 #日志级别为debug级别

【免费下载链接】geGE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力,并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 3:28:34

电子墨水屏技术原理与低功耗设计实践

1. 电子墨水屏技术原理深度解析电子墨水屏(E-paper)的核心在于其独特的双稳态显示机制。与传统LCD依赖背光源持续发光不同,电子墨水屏通过物理移动带电颜料颗粒实现显示效果。每个像素点由数百万个直径约100微米的微胶囊构成,胶囊…

作者头像 李华
网站建设 2026/5/11 3:27:30

douyin-downloader:5大核心功能解析与实战应用指南

douyin-downloader:5大核心功能解析与实战应用指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support.…

作者头像 李华
网站建设 2026/5/11 3:19:48

Weaviate向量数据库实战:从官方示例到RAG应用开发全解析

1. 项目概述:从代码仓库到向量数据库的实战指南如果你最近在关注大语言模型应用开发,或者想给自己的应用加上一个“记忆大脑”,那你大概率已经听说过向量数据库了。在众多选型中,Weaviate以其开源、易用和强大的功能脱颖而出。但当…

作者头像 李华
网站建设 2026/5/11 3:18:19

通过 Taotoken 的 Token Plan 套餐在 Ubuntu 长期项目中实现预算可控

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过 Taotoken 的 Token Plan 套餐在 Ubuntu 长期项目中实现预算可控 在长期运行的 AI 辅助项目中,成本的可预测性和可…

作者头像 李华
网站建设 2026/5/11 3:16:30

HQChart使用教程105-K线图,分时图如何对接AI进行数据分析

HQChart使用教程105-K线图,分时图如何对接AI进行数据分析 效果图功能步骤图形描述接口示例HQChart代码地址 效果图 K线图形AI分析K线图形AI分析功能 把K线图或分时图转成文字描述给AI,用户可以对这些数据使用AI来进行分析。这样可以省去AI去别的地方下载…

作者头像 李华