性能调优
ge.exec.op_precision_mode
设置指定算子内部处理时的精度模式,支持指定一个算子或多个算子。通过该参数传入自定义的精度模式配置文件op_precision.ini,可以为不同的算子设置不同的精度模式。
ini文件中按照算子类型、节点名称设置精度模式,每一行设置一个算子类型或节点名称的精度模式,按节点名称设置精度模式的优先级高于按算子类型。
配置文件中支持设置如下精度模式:
- high_precision:表示高精度。
- high_performance:表示高性能。
- enable_float_32_execution:算子内部处理时使用FP32数据类型功能,该场景下FP32数据类型不会自动转换为HF32数据类型;若使用HF32计算,精度损失超过预期时,可启用该配置,指定部分算子内部计算时使用FP32,保持精度。
Atlas A2 训练系列产品 /Atlas A2 推理系列产品 Atlas A3 训练系列产品 /Atlas A3 推理系列产品 - enable_hi_float_32_execution:算子内部处理时使用HF32数据类型功能,使能后,FP32数据类型自动转换为HF32数据类型;该配置可以降低数据所占空间大小,实现性能提升。
仅
Atlas A2 训练系列产品 /Atlas A2 推理系列产品 、Atlas A3 训练系列产品 /Atlas A3 推理系列产品 支持此选项。当前版本该选项暂不支持。 - support_out_of_bound_index:表示对gather、scatter和segment类算子的indices输入进行越界校验,校验会降低算子的执行性能。
- keep_fp16:算子内部处理时使用FP16数据类型功能,该场景下FP16数据类型不会自动转换为FP32数据类型;若使用FP32计算时性能不满足预期,同时精度要求不高情况下,可以选择keep_fp16模式,牺牲精度提升性能,不建议使用该低精度模式。
- super_performance:表示超高性能,和高性能相比,在算法计算公式上进行了优化。
具体某个算子支持配置的精度/性能模式取值,可以通过CANN软件安装后文件存储路径的opp/built-in/op_impl/ai_core/tbe/impl_mode/all_ops_impl_mode.ini文件查看。
op_precision.ini配置样例如下:
[ByOpType] optype1=high_precision optype2=high_performance optype3=enable_hi_float_32_execution optype4=support_out_of_bound_index [ByNodeName] nodename1=high_precision nodename2=high_performance nodename3=enable_hi_float_32_execution nodename4=support_out_of_bound_index
配置示例:
{"ge.exec.op_precision_mode", "$HOME/conf/op_precision.ini"};
必选/可选:可选
生效级别:全局
ge.exec.variable_acc
是否开启变量格式优化。
参数取值:
- True:(默认值)开启。
- False:关闭。
为了提高训练效率,在网络执行的变量初始化过程中,将变量转换成更适合在AI处理器上运行的数据格式。但在用户特殊要求场景下,可以选择关闭该功能开关。
使用约束:
开启时,不能同时将ge.AllowMultiGraphParallelCompile配置为"1",否则会校验报错。
配置示例:
{"ge.exec.variable_acc", "True"};
必选/可选:可选
生效级别:全局/session/graph
ge.graphMaxParallelModelNum
图执行模式下,同一个图可以在同一个device上被多个模型并行加载执行;该参数用于控制允许并行加载的最大模型数目。
参数取值:
1~INT32_MAX,默认为8。
配置示例:
{"ge.graphMaxParallelModelNum", "8"};
必选/可选:可选
生效级别:全局/session/graph
ge.tiling_schedule_optimize
Tiling下沉调度优化开关。
由于NPU中AI Core内部存储无法完全容纳算子输入输出的所有数据,需要每次搬运一部分输入数据进行计算然后搬出,再搬运下一部分输入数据进行计算,该过程称之为Tiling;根据算子的shape等信息来确定数据切分算法相关参数(比如每次搬运的块大小,以及总共循环多少次)的计算程序,称之为Tiling实现。由于Tiling实现中完成的均为标量计算,AI Core并不擅长,故一般在Host侧CPU上执行,但是满足下述条件Tiling实现会下沉到Device侧执行:
- 模型为静态shape。
- 模型中的算子支持Tiling下沉,比如FusedInferAttentionScore、IncreFlashAttention等融合算子。
- 支持Tiling下沉的算子值有依赖,需要满足前一个算子的值有device的执行结果;如果依赖的值是Const,则不需要下沉执行Tiling,编译时会完成Tiling。
该参数仅支持以下产品:
参数取值:
- 0:(默认值)关闭Tiling下沉。
- 1:使能Tiling下沉。
配置示例:
{"ge.tiling_schedule_optimize", "0"};
必选/可选:可选
生效级别:全局/session/graph