当前位置: 首页 > news >正文

CANN/graph-autofusion自动融合组件

Autofuse

【免费下载链接】graph-autofusionGraph-autofusion 是一个面向昇腾(Ascend)芯片的轻量级、解耦式组件集合,旨在通过自动融合技术加速模型执行。 目前已开源 SuperKernel 组件,未来将持续开放更多自动融合相关模块。项目地址: https://gitcode.com/cann/graph-autofusion

简介

AutoFuse是基于Ascend C的自动融合框架,支持自动融合范围识别、自动算子代码生成、Auto Tiling优化、动态shape及混合精度等特性;在算法网络中,由于存在大量的Vector计算,各个Vector计算之间会产生大量的内存搬运,导致Memory Bound问题。而AutoFuse通过自动将多个算子融合为一个算子,减少网络中的算子数量和内存搬运,从而缓解了Memory Bound问题,释放昇腾算力,提升模型的执行性能。

详细介绍,请参考《Autofuse自动融合》

Autofuse 目录结构

autofuse/ ├── ascendc # ascendc api 定义 ├── ascir # 算子注册 ascir ├── att # 自动 tiling 生成 模块 ├── autofuse # config 配置 ├── cmake # 三方库相关配置 ├── codegen # kernel 代码生成 模块 ├── common # 通用工具方法 ├── compiler # 对外API 接口 ├── examples # 示例脚本,演示典型用法 ├── graph_metadef # 基本图接口 ├── inc # 供 GE 调用接口 ├── optimize # 调度切分 模块 ├── scripts # 脚本路径 ├── v35 # 昇腾950 芯片相关优化 ├── CMakeLists.txt # CMake 配置文件 ├── blacklist.txt # 工程配置文件 ├── build_third_party.sh # 安装三方库脚本 ├── README.md

构建与安装

参考执行构建。

上板验证指导

用户如果想在昇腾设备上体验Autofuse 的功能与性能,可以先参考快速安装准备环境。无论是没有昇腾设备的开发者,还是已有昇腾设备的开发者,都可以快速搭建好环境。在此基础上,按照上一步构建与安装,增量安装了graph-autofusion仓编译生成的cann包。

此处指导如何搭建 Pytorch 环境,创建脚本,跑通 Inductor + Autofuse场景,并可视化生成的自动融合算子,以及观察最后的kernel性能。

当前自动融合支持elementwise类型+element类型,element类型+broadcast类型,element类型+reduce类型算子的融合。更多融合场景的支持(concat,gather等等)逐步开放中。

安装依赖

安装 torch_npu
pip3 install numpy pip3 install pyyaml pip3 install setuptools pip3 install torch_npu==2.8 # 通过pip 安装 torch_npu 时,会自动安装依赖的torch 版本
安装 inductor-npu-ext (Autofuse 在 Inductor 的使能框架)
git clone https://gitcode.com/Ascend/torchair.git cd torchair/experimental/_inductor_npu_ext/ pip3 install -e ./python/
其他环境依赖
CMake >= 3.16.0 GCC >= 7.3.0

在 openEuler 系统上,您可以通过以下命令安装:

sudo yum install cmake gcc

在 Ubuntu 系统上,您可以通过以下命令安装:

sudo apt-get install cmake gcc

sample 用例

autofuse 提供了丰富的 sample 用例,可以参考Autofuse样例。

设置环境变量

执行用例前,需要设置如下环境变量,设置运行NPU设备。

# 用户自己的 driver 包安装路径 source /usr/local/Ascend/driver/bin/setenv.sh # 用户自己的 CANN 包安装路径 source /usr/local/Ascend/ascend-toolkit/set_env.sh # 假设跑在 0卡,和脚本保持一致 export ASCEND_DEVICE_ID=0

执行用例

假设用例名为 test.py,直接执行: python3 test.py

更多调测相关环境变量

TORCH_COMPILE_DEBUG

作用: torch原生环境变量,启用详细调试日志,以及编译中间产物保存等。

使用方法:

export TORCH_COMPILE_DEBUG=1

注意: 多次执行相同脚本,会因为缓存存在而跳过编译,可以配合 TORCHINDUCTOR_FORCE_DISABLE_CACHES 使用,强制每次执行都重新编译。

TORCHINDUCTOR_FORCE_DISABLE_CACHES

作用: torch原生环境变量,禁用 Inductor 缓存,每次执行都会重新编译。

使用方法:

export TORCHINDUCTOR_FORCE_DISABLE_CACHES=1

注意: 会显著增加图启动耗时,实际部署时请勿使用该环境变量。

可选:ASCEND_LAUNCH_BLOCKING

作用: torch_npu原生环境变量,启用 Ascend 内核同步执行,每次kernel下发都会等待完成,便于确定首个报错的 kernel。

使用方法:

export ASCEND_LAUNCH_BLOCKING=1

注意: 会显著降低下发性能,实际部署时请勿使用该环境变量。

可选:AUTOFUSE_DFX_FLAGS

作用: autofuse DFX环境变量,落盘每个自动融合算子,对应的内部融合图结构。pbtxt文件可以使用netron.app 打开观察。 使用方法:

export AUTOFUSE_DFX_FLAGS="--codegen_compile_debug=true;--debug_dir=/path-to-dump/"

注意:在设置的dump图路径下,生成 Autofuse 后端,对于每个融合算子的dump图。

结果分析 & 调测输出分析

用户开启 TORCH_COMPILE_DEBUG 后,调试信息输出位于执行目录下的torch_compile_debug子目录,带有 autofused_ 前缀的目录为 inductor-npu-ext 相关产物,其余均为 inductor 原生产物。每一个autofused_ 前缀的目录,都表示一个融合算子的白盒结构。具体可参考inductor-npu-ext使用手册。

用户也可以通过profiling的相关配置,观察使能自动融合后,算子性能收益情况。对于上面的sample用例,可以注释 "model = torch.compile(model, dynamic=False, fullgraph=True)" 这一行,即可走单算子流程。然后对比profiling里,单算子场景所有算子的总耗时,与使能 Inductor+Autofuse,融合算子的总耗时。详细的Profling性能分析工具的使用方法,可参见Profiling性能分析工具指南。

需要注意的是,不是模型里所有的算子都能被融合,对于在 Inductor 层未被 lowering 的算子,最后仍然以单算子形式存在。融合提升比,等于 (融合后所有算子耗时-融合前所有算子耗时)/融合前所有算子耗时。更进一步的,可以观察融合算子的 aiv_mte2_time(输入搬运耗时)和 aiv_mte3_time(输出搬运耗时)的提升情况。

对于精度的分析,详细的精度调试工具的使用方法,可参见精度调试工具指南。

复杂网络使能

用户如果想在网络里,使能 Autofuse 功能,只需要在模型文件的开头,导入torch后面,加上 import inductor_npu_ext 即可。

【免费下载链接】graph-autofusionGraph-autofusion 是一个面向昇腾(Ascend)芯片的轻量级、解耦式组件集合,旨在通过自动融合技术加速模型执行。 目前已开源 SuperKernel 组件,未来将持续开放更多自动融合相关模块。项目地址: https://gitcode.com/cann/graph-autofusion

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

http://www.jsqmd.com/news/786209/

相关文章:

  • 生成式AI时代职场生存指南:技能重塑与人机协同实践
  • CANN/pypto设置卷积Tile形状
  • 基于拓扑数据分析的纳米图像去噪:原理、实践与动态结构研究
  • Web代理逆向工程:从协议分析到客户端架构的技术实践与风险
  • 使用codeskeleton构建代码知识图谱:可视化架构与识别隐藏依赖
  • AI技术如何驱动可持续发展:从数据到决策的绿色引擎
  • 基于Claude API与Telegram Bot构建私有AI助手:架构设计与生产部署指南
  • 系外行星探测四大主流方法:原理、应用与前沿技术解析
  • Gryph:为AI编程助手打造本地化行为审计与可观测性工具
  • SITS2026到底值不值得上手?2024真实Benchmark对比LlamaIndex+LangChain+AutoGen,性能提升47%的关键配置曝光
  • CANN模型推理实施者
  • Arm Neoverse V3AE核心寄存器架构与性能优化
  • 2026年5月温州企业税务外包服务商综合**:泓远财务咨询领跑*单 - 2026年企业推荐榜
  • 生成式AI七大法律风险解析:从数据版权到内容责任
  • 2026年5月随州工商注销服务平台**联系与选择指南 - 2026年企业推荐榜
  • 基于角色的AI能力框架:重塑工程教育中的人机协作新范式
  • 2026年成都市政路灯定制优选:如何甄别实力与服务兼备的厂家? - 2026年企业推荐榜
  • CANN/metadef AppendStride函数
  • 2026年阜阳企业如何选择不当得利纠纷法律顾问 - 2026年企业推荐榜
  • CANN/AMCT算法介绍文档
  • 阴阳师自动化脚本终极指南:智能游戏助手让日常任务轻松完成
  • CANN/cannbot-skills FA调用完整代码示例
  • 为内容创作平台集成AI能力时如何借助Taotoken灵活选型与控本
  • Python工程化实践:从能跑通到可维护的代码质量提升指南
  • 2026年曲靖家庭与工程用户,如何选到性价比爆表的天然气热水器?家园至尊深度解析 - 2026年企业推荐榜
  • CANN/hixl LLM集群信息文档
  • 软件安全与漏洞--软件安全设计
  • Windows系统调校程序
  • 2026年第二季度鄂尔多斯基建钢材市场总代理选择*** - 2026年企业推荐榜
  • CANN/opbase AllocScalar API文档