---
title: AutoFuse使能方式
description: "- 安装软件包：准备带有AI处理器的硬件环境，并安装驱动固件和CANN软件包，具体安装步骤请参见《CANN 软件安装(https://www.hiascend.com/document/detail/zh/canncommercial/900/softwareinst/instg/instg_0000.html)》。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/graphdevg/autofuse_1_0004.html
sourcePath: /source/zh/canncommercial/900/programug/graphdevg/autofuse_1_0004.html
indexId: 6995f78ef8d59382b9cf3ea14b83eaa8016e0218672116396c1c71ac154f899070
---
# AutoFuse使能方式

#### 前提条件

- 安装软件包：准备带有AI处理器的硬件环境，并安装驱动固件和CANN软件包，具体安装步骤请参见《CANN 软件安装(https://www.hiascend.com/document/detail/zh/canncommercial/900/softwareinst/instg/instg_0000.html)》。
- GCC版本：要求9.5.0及以上，建议使用9.5.0版本。
- CMake：要求3.20.0版本及以上，建议使用3.20.0版本。
- 安装完成后设置环境变量：
  安装CANN软件后，使用CANN运行用户进行编译、运行时，需要以CANN运行用户登录环境，执行source ${INSTALL_DIR}/set_env.sh命令设置环境变量。${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例，安装后文件默认存储路径为：/usr/local/Ascend/cann。


#### AutoFuse使能

AutoFuse框架目前支持Elemwise、Broadcast、Reduce、Concat4大类算子的融合能力。Elemwise、Broadcast类算子融合能力完整，在开启自动融合时默认使能；Reduce、Concat默认不使能需要额外环境变量显式控制开启。在TensorFlow图模式流程中，自动融合的开启方式由环境变量控制，包括功能控制与DFX控制，自动融合开箱只需要打开功能控制，DFX控制用于辅助定位或优化。功能控制的环境变量名为AUTOFUSE_FLAGS，DFX控制的环境变量名为AUTOFUSE_DFX_FLAGS，环境变量值以字符串"--key=value"形式配置，每一项不同的key代表一个具体控制点， 多项配置使用英文分号分隔。配置示例如下：

- 功能控制

```
export AUTOFUSE_FLAGS="--enable_autofuse=true;--autofuse_enable_pass=reduce,concat"
```


- DFX控制：

```
export AUTOFUSE_DFX_FLAGS="--att_accuracy_level=1;--att_profiling=true"
```


AUTOFUSE_FLAGS环境变量控制点

| key值 | 控制点 |
| --- | --- |
| \-\-enable\_autofuse | 控制整体自动融合功能是否开启。 取值： true：表示开启。 false：（默认值）表示关闭。 不配置表示关闭整体自动融合功能，关闭时以下其他控制点全部失效，无论是否配置。 配置示例： \-\-enable\_autofuse=true 使用约束： 配置开启后，Elemwise算子与Broadcast算子间的自动融合能力便开启。 |
| \-\-autofuse\_disable\_pass | 控制拓展融合能力是否关闭。 取值： reduce：控制Reduce类算子融合能力关闭。 concat：控制Concat类算子融合能力关闭。 配置多个取值时使用英文逗号分割，默认为空，Reduce类、Concat类算子的融合能力目前默认不开启。 配置示例： \-\-autofuse\_disable\_pass=reduce,concat 使用约束： 与\-\-autofuse\_enable\_pass不能同时配置相同的取值。 |
| \-\-autofuse\_enable\_pass | 控制拓展融合能力是否开启。 取值： reduce：控制Reduce融合能力开启。 concat：控制Concat融合能力开启。 配置多个取值时使用英文逗号分割，默认为空，Reduce类、Concat类算子的融合能力目前默认不开启。 配置示例： \-\-autofuse\_enable\_pass=reduce,concat 使用约束： 与\-\-autofuse\_disable\_pass不能同时配置相同的取值。 |
| \-\-autofuse\_enhance\_precision\_blacklist | 控制自动融合局部融合节点不做提升精度操作。 某个AscGraph中所有的AscIR都配置到黑名单中，该AscGraph才不会升精度。 取值： AscIR类型的字符串组合，多个类型使用英文逗号分割，默认值为空字符串，表示所有AscGraph都会提升精度。 该参数中的AscIR类型是Dump图中对应节点type中的取值，例如Dump图中某节点type的取值为ge:Add，则实际配置为Add。 配置示例： \-\-autofuse\_enhance\_precision\_blacklist=Le,Where,Sub,Add,Sigmoid 使用约束： "Sum"、"Mean"、"Prod"不支持低精度类型，默认必须提升精度，因此不能配置到提升精度黑名单中。 不提升精度可以获得更高性能，但可能会引发精度问题。因此，在配置不提升精度后，用户需确保精度满足业务要求。 Dump图的方法请参见《环境变量参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/envvar/envref\_07\_0001.html)》 > 图编译 > DUMP\_GE\_GRAPH(https://www.hiascend.comdocument/detail/zh/canncommercial/900/maintenref/envvar/envref\_07\_0011.html)。 |
| \-\-recomputation\_threshold | 控制自动融合重计算阈值。 该参数用于设置单输出算子的引用阈值，当单输出节点引用个数超过阈值时，首次融合会在当前节点进行融合截断。 取值：0\-255间的任意整数，默认为1。 配置示例： \-\-recomputation\_threshold=5 使用约束： 无。 |
| \-\-experimental\_enable\_jit\_executor\_v2 | 控制是否打开切图编译。 取值： true：表示开启。 false：（默认值）表示关闭。 切图编译是将原始图在无法推导符号的边界进行断图处理，切成N个图，将上游图的输出作为下游图的输入hint继续符号推导并执行。 配置示例： \-\-experimental\_enable\_jit\_executor\_v2=true 使用约束： 如下场景不支持切图： 动态分档场景 图上包含资源类算子（输入或者输入的类型是DT\_RESOURCE，如TensorArrayWrite） 图上包含V1版本控制算子（如："Switch","StreamSwitch","Merge","StreamMerge","Enter","Exit","LoopCond","NextIteration"） 开启数据预处理下沉 开启AOE调优的场景 |
| \-\-autofuse\_enable\_pgo | 控制是否开启PGO（Profile\-Guided Optimization，基于采样数据的优化）调优。 PGO调优是通过预上板采样，选取表现相对更好的Tiling以提升模型执行性能。 取值： true：表示开启。 false：（默认值）表示关闭。 配置示例： \-\-autofuse\_enable\_pgo=true 使用约束： 仅支持对静态图调优，首次配置时，不能与其他Profiling功能同时开启，后续配置时无限制。 |


AUTOFUSE_DFX_FLAGS环境变量控制点

| key值 | 控制点 |
| --- | --- |
| \-\-codegen\_compile\_debug | 控制是否保留融合算子生成时的中间过程文件。 取值： true：保留文件。 false：（默认为false）不保留文件。 配置示例： \-\-codegen\_compile\_debug=true 设置为true，保留文件后，在脚本执行目录下将生成kernel\_meta\_\*文件夹，其中包含生成的kernel源码、Tiling源码、cmake工程以及编译结果。 使用约束：无 |
| \-\-autofuse\_att\_algorithm | 控制Auto Tiling求解算法选择。 取值： HighPerf：高性能算法。 AxesReorder：（默认值）轴排序算法。 配置示例： \-\-autofuse\_att\_algorithm=HighPerf 使用约束： 轴排序算法是默认算法，高性能算法属于试验性算法，不一定能获取到更好的算子执行性能，只是算法理论上限较高。 配置非法值时会恢复为默认值。 |
| \-\-att\_accuracy\_level | 控制Auto Tiling算法求解精度，理论上精度越高kernel性能越好。 取值： 1：（默认值）高精度求解。 0：低精度求解。 默认为低精度求解，保证Tiling耗时不至于过长。 配置示例： \-\-att\_accuracy\_level=1 使用约束： 高精度求解可能会得出更优的tiling解，但需要更长的Tiling执行时间，低精度求解则反之。 配置非法值时会恢复为默认值。 |
| \-\-att\_enable\_multicore\_ub\_tradeoff | 用于控制att\_corenum\_threshold和att\_ub\_threshold功能是否开启。 取值： true：开启。 false：（默认值）不开启。 配置示例： \-\-att\_enable\_multicore\_ub\_tradeoff=true 使用约束：配置非法值时会恢复为默认值。 |
| \-\-att\_ub\_threshold | 控制Auto Tiling的Tiling策略，保证Tiling求解结果与算子实现结合，UB占用率不低于该控制点设置的取值（若UB占用率不满足指定阈值，则按可求解的最大UB占用率设置），该控制点可用于性能问题的定位。 取值：0\-100间的任意整数，默认值为20。 配置示例： \-\-att\_ub\_threshold=20 使用约束： 该参数需要和\-\-att\_enable\_multicore\_ub\_tradeoff配合使用，只有\-\-att\_enable\_multicore\_ub\_tradeoff开启时，设置了\-\-att\_ub\_threshold控制点才能生效。 配置非法值时会恢复为默认值。 |
| \-\-att\_corenum\_threshold | 控制Auto Tiling的Tiling策略，保证Tiling求解结果与算子实现结合，多核利用率不低于该控制点设置的取值（若多核利用率不满足指定阈值，则按可求解的最大多核占用率设置），该控制点可用于性能问题的定位。 取值：0\-100间的任意整数，默认值为40。 当\-\-att\_enable\_multicore\_ub\_tradeoff开启时，默认值为40，否则不会设置该策略。 配置示例： \-\-att\_corenum\_threshold=40 使用约束： 该参数需要和\-\-att\_enable\_multicore\_ub\_tradeoff配合使用，只有\-\-att\_enable\_multicore\_ub\_tradeoff开启时，设置的\-\-att\_corenum\_threshold控制点才能生效。 配置非法值时会恢复为默认值。 |
| \-\-att\_profiling | 用于控制Auto Tiling的Profiling是否使能。 取值： true：使能Profiling特性。 false：（默认值）不使能Profiling特性。 配置示例： \-\-att\_profiling=true 使用约束： 该控制点仅用于定位Auto Tiling模块本身的执行时间问题。 配置非法值时会恢复为默认值。 |
| \-\-disable\_lifting | 用于控制lifting功能是否关闭。 自动融合会将算子融合成名为AscBackend的新算子，lifting则将未能满足条件的AscBackend回滚到原算子。 取值： true：关闭lifting功能。 false：（默认值）开启lifting功能。 配置示例： \-\-disable\_lifting=true 使用约束： 该控制点仅用于定位Ascbackend回滚结构的分析问题，开启该控制点可能会导致ApplyAdamD算子精度异常。 |
| \-\-autofuse\_pgo\_algo | 控制PGO调优算法，不同算法求Tiling方式不同。 取值： core\_select：（默认值）使用控核算法。 pruning：使用剪枝算法。 默认为控核算法，保证Tiling耗时不至于过长，剪枝算法理论上可能求出更优的Tiling解，但需要远长于控核算法的Tiling时间。 配置示例： \-\-autofuse\_enable\_pgo=true \-\-autofuse\_pgo\_algo=core\_select 使用约束： 该参数需要与\-\-autofuse\_enable\_pgo配合使用，只有\-\-autofuse\_enable\_pgo开启时，设置的\-\-autofuse\_pgo\_algo控制点才能生效。 配置非法值时会恢复为默认值。 |
| \-\-autofuse\_pgo\_step\_max | 控制PGO剪枝算法步长。 取值：2\-1024间任意2的幂次，默认为16。 配置示例： \-\-autofuse\_enable\_pgo=true \-\-autofuse\_pgo\_algo=pruning \-\-autofuse\_pgo\_step\_max=16 使用约束： 该参数需要和\-\-autofuse\_pgo\_algo配合使用，只有\-\-autofuse\_pgo\_algo=pruning且生效时，设置的\-\-autofuse\_pgo\_step\_max控制点才能生效。 当step值较小时，可能会得出更优的tiling解，但需要更长的Tiling执行时间，step值较大时则反之。 配置非法值时会恢复为默认值。 |
| \-\-autofuse\_pgo\_topn | 设置参与PGO静态调优的解的数量。 取值： 0：选择所有解参与静态调优。 任意正整数：表示可选解的数量，默认值为5。 配置示例： \-\-autofuse\_enable\_pgo=true \-\-autofuse\_pgo\_topn=5 使用约束： 该参数需要与\-\-autofuse\_enable\_pgo配合使用，只有\-\-autofuse\_enable\_pgo开启时，设置的\-\-autofuse\_pgo\_topn控制点才能生效。 配置非法值时会恢复为默认值。 |


支持离线推理静态shape场景开启自动融合功能，方法为：

- 设置环境变量，开启自动融合功能，比如：

```
export AUTOFUSE_FLAGS="--enable_autofuse=true
```


  - 使用ATC离线模型编译工具转换模型，生成om离线模型。
  - 使用GE图引擎接口aclgrphBuildModel(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/ascendgraphapi/atlasgeapi_07_0078.html)编译模型，生成om离线模型。
- 模型加载与推理
  使用acl接口加载生成的om模型，完成推理。


关于ATC工具详细使用方法请参见《ATC离线模型编译工具(https://www.hiascend.com/document/detail/zh/canncommercial/900/devaids/atctool/atlasatc_16_0001.html)》。

关于GE图引擎接口使用方法请参见“编译Graph为离线模型 ”。

关于acl接口推理详细说明请参见《应用开发 (C&C++)(https://www.hiascend.com/document/detail/zh/canncommercial/900/programug/acldevg/aclcppdevg_000006.html)》中的“模型推理(https://www.hiascend.comdocument/detail/zh/canncommercial/900/programug/acldevg/aclcppdevg_000025.html)”。
