---
title: 简介
description: "AutoFuse是基于Ascend C的自动融合框架，支持自动融合范围识别、自动算子代码生成、Auto Tiling优化、动态shape及混合精度等特性；在算法网络中，由于存在大量的Vector计算，各个Vector计算之间会产生大量的内存搬运，导致Memory Bound问题。而AutoFuse通过自动将多个算子融合为一个算子，减少网络中的算子数量和内存搬运，从而缓解了Memory Bound问题，释放昇腾算力，提升模型的执行性能。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/graphdevg/autofuse_1_0000.html
sourcePath: /source/zh/canncommercial/900/programug/graphdevg/autofuse_1_0000.html
indexId: 0d738b43e6e889764c2139db787933621390987ffc8362ad8ab23c85655bf00270
---
# 简介

#### 什么是AutoFuse

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

收益原理示意图如图1所示，自动融合通过将多个算子合并为单个算子，理论上在MTE搬运、动态shape调度开销方面都会有一定的收益，对于小shape、MTE Bound的推荐网络，一般都能获得正收益。

图1 收益原理

自动融合特性，支持在如下AI处理器型号使用：

- Atlas 350 加速卡
- Atlas A3 训练系列产品 / Atlas A3 推理系列产品
- Atlas A2 训练系列产品 / Atlas A2 推理系列产品


#### 技术路线

自动融合方案基于昇腾NPU底层统一的Ascend C IR（Ascend C IR是面向Ascend C编程语言做建模的IR，如下简称AscIR）Schedule与代码生成能力，构建了两条融合实现路径，如图2所示。

- 第一条路径基于昇腾自研的GE框架，注重NPU的亲和性，核心包括三部分能力：

  - Ascend IR（Ascend Intermediate Representation）的符号化shape推导，通过变量符号表达动态变化的shape，从而在编译时基于符号化的shape进行代码生成。
  - Ascend IR到AscIR的Lowering实现，使用低层级的AscIR表达Ascend IR的计算逻辑，确定融合结构。
  - 融合策略，结合AscIR的特点与约束，进行融合结构间的循环轴合并，获得融合最优解。

- 第二条路径则对接PyTorch Inductor，聚焦于生态支持，复用Inductor的融合能力，将Inductor IR表达的融合结构转换为Ascend C IR图，进行代码生成。当前版本不支持该技术路线。

图2 技术路线


#### 融合原理

自动融合的实现包含两部分，自动确定融合范围和根据融合范围自动生成融合kernel源码及kernel二进制。前者称为自动融合前端，后者称为自动融合的后端（对应图2中的公共底层能力）：

前端的实现主要是根据一定规则或配置判断哪些算子能够融合，确定一个融合算子的融合范围，融合范围用FusedGraph来表达，如下图图3所示，FusedGraph内部包含>=1个AscBackend节点，AscBackend可以理解为一个类似于ge::op::partitionedcall的Ascend IR算子，其携带一个子图对象，一个AscBackend节点携带一个AscGraph属性，一个AscGraph内包含多个AscIR节点。AscIR与AscGraph详细介绍请参见AscIR与AscGraph。

图3 FusedGraph

图4 AscBackend对应的AscGraph

后端的实现包含Schedule/Codegen/Auto Tiling等，后端接收到FusedGraph后，Schedule首先针对计算/搬运类节点分别生成对应的TilingGroup，并通过TilingGroup合并策略，构建适用于整个融合算子的归一化TilingGroup。最终基于该归一化TilingGroup来生成FusedGraph的Tiling策略。经过Codegen实现和Auto Tiling，生成kernel源码、tiling_func源码、tiling_data源码、并编译生成Host和Device交付件。 自动融合的生效方式请参见AutoFuse使能方式。Schedule/Codegen/Auto Tiling的实现原理请分别参见对应章节。
