AutoFuse使能方式
前提条件
AutoFuse使能
AutoFuse框架目前支持Elemwise、Broadcast、Reduce、Concat、4大类算子的融合能力。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 |
控制整体自动融合功能是否开启。 取值:
不配置表示关闭整体自动融合功能,关闭时以下其他控制点全部失效,无论是否配置。 配置示例: --enable_autofuse=true 使用约束: 配置开启后,Elemwise算子与Broadcast算子间的自动融合能力便开启。 |
|
--autofuse_disable_pass |
控制拓展融合能力是否关闭。 取值:
配置多个取值时使用英文逗号分割,默认为空,Reduce类、Concat类算子的融合能力目前默认不开启。 配置示例: --autofuse_disable_pass=reduce,concat 使用约束: 与--autofuse_enable_pass不能同时配置相同的取值。 |
|
--autofuse_enable_pass |
控制拓展融合能力是否开启。 取值:
配置多个取值时使用英文逗号分割,默认为空,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 使用约束: |
|
--experimental_enable_jit_executor_v2 |
控制是否打开切图编译。 取值:
切图编译是将原始图在无法推导符号的边界进行断图处理,切成N个图,将上游图的输出作为下游图的输入hint继续符号推导并执行。
配置示例:
--experimental_enable_jit_executor_v2=true 使用约束: 无。 |
AUTOFUSE_DFX_FLAGS环境变量控制点
|
key值 |
控制点 |
|---|---|
|
--codegen_compile_debug |
控制是否保留融合算子生成时的中间过程文件。 取值:
配置示例: --codegen_compile_debug=true 设置为true,保留文件后,在脚本执行目录下将生成kernel_meta_*文件夹,其中包含生成的kernel源码、Tiling源码、cmake工程以及编译结果。 使用约束:无 |
|
--autofuse_att_algorithm |
控制Auto Tiling求解算法选择。 取值:
配置示例: --autofuse_att_algorithm=HighPerf 使用约束: 轴排序算法是默认算法,高性能算法属于试验性算法,不一定能获取到更好的算子执行性能,只是算法理论上限较高。 |
|
--att_accuracy_level |
控制Auto Tiling算法求解精度,理论上精度越高kernel性能越好。 取值:
默认为低精度求解,保证Tiling耗时不至于过长。 配置示例: --att_accuracy_level=1 使用约束: 高精度求解可能会得出更优的tiling解,但需要更长的Tiling执行时间,低精度求解则反之。 |
|
--att_enable_small_shape_strategy |
试验参数,后续版本会删除。使能网络中部分小shape场景TilingFunc耗时优化的能力。 取值:
配置示例: --att_enable_small_shape_strategy=false |
|
--att_enable_multicore_ub_tradeoff |
用于控制att_corenum_threshold和att_ub_threshold功能是否开启。 取值:
配置示例: --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是否使能。 取值:
配置示例: --att_profiling=true 使用约束: 该控制点仅用于定位Auto Tiling模块本身的执行时间问题。 |
|
--disable_lifting |
用于控制lifting功能是否关闭。 自动融合会将算子融合成名为AscBackend的新算子,lifting则将未能满足条件的AscBackend回滚到原算子。 取值:
配置示例: --disable_lifting=true 使用约束: 该控制点仅用于定位Ascbackend回滚结构的分析问题,开启该控制点可能会导致ApplyAdamD算子精度异常。 |