性能调优

基础配置

参数名

描述

iterations_per_loop

针对一次session.run调用,在昇腾AI处理器执行训练迭代的次数,默认为1,且用户设置的训练迭代总次数必须为iterations_per_loop的整数倍。昇腾AI处理器会运行iterations_per_loop指定迭代次数,然后再返回到Host侧,该参数可以减少Host与Device间的交互次数,缩短训练时长。

混合计算模式(mix_compile_mode为True)下,iterations_per_loop必须为1。

说明:当iterations_per_loop大于1时,由于循环下沉和LossScale溢出等问题,用户设置的训练迭代总次数和实际的迭代总次数可能会有差异。

配置示例:

config = NPURunConfig(iterations_per_loop=1000)

高级配置

参数名

描述

hcom_parallel

分布式训练场景下,可通过此开关控制是否启用Allreduce梯度更新和前后向并行执行。

  • True:开启Allreduce并行。
  • False:关闭Allreduce并行。

默认值为“True”,针对小网络(例如:Resnet18),可配置为“False”。

配置示例:

config = NPURunConfig(hcom_parallel=True)

op_precision_mode

设置具体某个算子的高精度或高性能模式,通过该参数传入自定义的模式配置文件op_precision.ini,可以为不同的算子设置不同的模式。

支持按照算子类型或者按照节点名称设置,按节点名称设置的优先级高于算子类型,样例如下:

[ByOpType]
optype1=high_precision
optype2=high_performance
[ByNodeName]
nodename1=high_precision
nodename2=high_performance

该参数不能与op_select_implmode、optypelist_for_implmode参数同时使用,若三个参数同时配置,则只有op_precision_mode参数指定的模式生效。

一般场景下该参数不建议配置。若使用高性能或者高精度模式时,网络性能或者精度不是最优,则可以使用该参数,通过配置ini文件调整某个具体算子的精度模式。

配置示例:

config = NPURunConfig(op_precision_mode="/home/test/op_precision.ini")

enable_scope_fusion_passes

指定编译时需要生效的融合规则列表。此处传入注册的融合规则名称,允许传入多个,用“,”隔开。

无论是内置还是用户自定义的Scope融合规则,都分为如下两类:

  • 通用融合规则(General):各网络通用的Scope融合规则;默认生效,不支持用户指定失效。
  • 定制化融合规则(Non-General):特定网络适用的Scope融合规则;默认不生效,用户可以通过enable_scope_fusion_passes指定生效的融合规则列表。

配置示例:

config = NPURunConfig(enable_scope_fusion_passes="ScopeLayerNormPass,ScopeClipBoxesPass")

stream_max_parallel_num

此配置仅适用于NMT网络。

用于指定AICPU/AICORE引擎的并行度,从而实现AICPU/AICORE算子间的并行执行。

配置示例:

config = NPURunConfig(stream_max_parallel_num="DNN_VM_AICPU:10,AIcoreEngine:1")

DNN_VM_AICPU为AICPU引擎名称,本示例指定了AICPU引擎的并发数为10;

AIcoreEngine为AICORE引擎名称,本示例指定了AICORE引擎的并发数为1。

AICPU/AICORE引擎的并行度默认为1,取值不能超过AI Core的最大核数。

is_tailing_optimization

此配置仅用于Bert网络。

分布式训练场景下,是否开启通信拖尾优化,用于提升训练性能。通信拖尾优化即,通过计算依赖关系的改变,将不依赖于最后一个AR(梯度聚合分片)的计算操作调度到和最后一个AR并行进行,以达到优化通信拖尾时间的目的。取值:

  • True。
  • False:默认为False。

必须和NPUOptimizer构造函数配合使用,且要求和NPUOptimizer构造函数中的is_tailing_optimization值保持一致。

配置示例:

config = NPURunConfig(is_tailing_optimization=True)

enable_small_channel

当前版本暂不支持。