昇腾社区首页
中文
注册
开发者
下载

AutoFuse使能方式

前提条件

  • 安装软件包:准备带有昇腾AI处理器的硬件环境,并安装驱动固件和CANN软件包,具体安装步骤请参见CANN 软件安装指南
  • GCC版本:要求9.5.0及以上,建议使用9.5.0版本。
  • CMake:要求3.20.0版本及以上,建议使用3.20.0版本。
  • 安装完成后设置环境变量:

    安装CANN软件后,使用CANN运行用户进行编译、运行时,需要以CANN运行用户登录环境,执行source ${install_path}/set_env.sh命令设置环境变量。其中${install_path}为CANN软件的安装目录,例如:/usr/local/Ascend/ascend-toolkit。

AutoFuse使能

AutoFuse框架目前支持Elemwise、Broadcast、Reduce、Concat、4大类算子的融合能力。Elemwise、Broadcast类算子融合能力完整,在开启自动融合时默认使能;Reduce、Concat默认不使能需要额外环境变量显示控制开启。在TensorFlow图模式流程中,自动融合的开启方式由环境变量控制,包括功能控制与DFX控制,自动融合开箱只需要打开功能控制,DFX控制用于辅助定位或优化。功能控制的环境变量名为AUTOFUSE_FLAGSDFX控制的环境变量名为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

控制自动融合局部融合节点不做提升精度操作。

取值:

AscIR类型的字符串组合,多个类型使用英文逗号分割,默认值为空字符串,表示所有AscGraph都会提升精度。

该参数中的AscIR类型是Dump图中对应节点type中的取值,例如Dump图中某节点type的取值为ge:Add,则实际配置为Add。

配置示例:

--autofuse_enhance_precision_blacklist=Le,Where,Sub,Add,Sigmoid

使用约束:

  • "Sum"、"Mean"、"Prod"不支持低精度类型,默认必须提升精度,因此不能配置到提升精度黑名单中。
  • 不提升精度可以获得更高性能,但可能会引发精度问题。因此,在配置不提升精度后,用户需确保精度满足业务要求。
  • Dump图的方法请参见DUMP_GE_GRAPH

--experimental_enable_jit_executor_v2

控制是否打开切图编译。

取值:

  • true:表示开启。
  • false:(默认值)表示关闭。

切图编译是将原始图在无法推导符号的边界进行断图处理,切成N个图,将上游图的输出作为下游图的输入hint继续符号推导并执行。

配置示例:
--experimental_enable_jit_executor_v2=true

使用约束:

无。

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_small_shape_strategy

试验参数,后续版本会删除。使能网络中部分小shape场景TilingFunc耗时优化的能力。

取值:

  • true:使能。
  • false:(默认值)不使能。

配置示例:

--att_enable_small_shape_strategy=false

--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算子精度异常。