NPURunConfig配置参数说明
基础功能
参数名 |
描述 |
---|---|
graph_run_mode |
图执行模式,取值:
配置示例: config = NPURunConfig(graph_run_mode=1) |
session_device_id |
当用户需要将不同的模型通过同一个训练脚本在不同的Device上执行,可以通过该参数指定Device的逻辑ID。 通常可以为不同的图创建不同的Session,并且传入不同的session_device_id,该参数优先级高于环境变量ASCEND_DEVICE_ID。 配置示例: config0 = NPURunConfig(..., session_device_id=0, ...) estimator0 = NPUEstimator(..., config=config0, ...) ... config1 = NPURunConfig(..., session_device_id=1, ...) estimator1 = NPUEstimator(..., config=config1, ...) ... config7 = NPURunConfig(..., session_device_id=7, ...) estimator7 = NPUEstimator(..., config=config7, ...) ... |
distribute |
通过PS-Worker架构进行分布式训练时,用于传入ParameterServerStrategy对象。 配置示例: config = NPURunConfig(distribute=strategy) |
deterministic |
是否开启确定性计算,开启确定性开关后,算子在相同的硬件和输入下,多次执行将产生相同的输出。 此配置项有以下两种取值:
默认情况下,无需开启确定性计算。因为开启确定性计算后,算子执行时间会变慢,导致性能下降。在不开启确定性计算的场景下,多次执行的结果可能不同。这个差异的来源,一般是因为在算子实现中,存在异步的多线程执行,会导致浮点数累加的顺序变化。 但当发现模型执行多次结果不同,或者精度调优时,可以通过此配置开启确定性计算辅助进行调试调优。需要注意,如果希望有完全确定的结果,在训练脚本中需要设置确定的随机数种子,保证程序中产生的随机数也都是确定的。 配置示例: config = NPURunConfig(deterministic=1) |
内存管理
参数名 |
描述 |
---|---|
memory_config |
用于配置系统内存使用方式,用户在创建NPURunConfig之前,可以实例化一个MemoryConfig类进行功能配置。MemoryConfig类的构造函数,请参见MemoryConfig构造函数。 |
external_weight |
同一个session内同时加载多个模型时,如果多个模型间的权重能够复用,建议通过此配置项将网络中Const/Constant节点的权重外置,实现多个模型间的权重复用,从而减少权重的内存占用。
说明:一般场景下不需要配置此参数,针对模型加载环境有内存限制的场景,可以将权重外置。
配置示例:
config = NPURunConfig(external_weight=True) |
input_fusion_size |
Host侧输入数据搬运到Device侧时,将用户离散多个输入数据合并拷贝的阈值。单位为Byte,最小值为0 Byte,最大值为33554432 Byte(32MB),默认值为131072 Byte(128KB)。若:
例如用户有10个输入,有2个输入数据大小为100KB,2个输入数据大小为50KB,其余输入大于100KB,若设置:
配置示例: config = NPURunConfig(input_fusion_size=25600) |
动态shape
参数名 |
描述 |
---|---|
ac_parallel_enable |
动态shape图中,是否允许AI CPU算子和AI Core算子并行运行。
动态shape图中,开关开启时,系统自动识别图中可以和AI Core并发的AI CPU算子,不同引擎的算子下发到不同流上,实现多引擎间的并行,从而提升资源利用效率和动态shape执行性能。
配置示例: config = NPURunConfig(ac_parallel_enable="1") |
compile_dynamic_mode |
是否需要泛化图中所有的输入shape。
配置示例: config = NPURunConfig(compile_dynamic_mode=True) |
混合计算
参数名 |
描述 |
---|---|
mix_compile_mode |
是否开启混合计算模式。
计算全下沉模式即所有的计算类算子全部在Device侧执行,混合计算模式作为计算全下沉模式的补充,将部分不可离线编译下沉执行的算子留在前端框架中在线执行,提升昇腾AI处理器支持TensorFlow的适配灵活性。 配置示例: config = NPURunConfig(mix_compile_mode=True) |
功能调试
精度调优
参数名 |
描述 |
---|---|
precision_mode |
算子精度模式,配置要求为string类型。
针对Atlas 训练系列产品,默认配置项为“allow_fp32_to_fp16”。 针对Atlas A2 训练系列产品,默认配置项为“must_keep_origin_dtype”。 配置示例: config = NPURunConfig(precision_mode="allow_mix_precision")
说明:
|
precision_mode_v2 |
算子精度模式,配置要求为string类型。
默认值:
配置示例: config = NPURunConfig(precision_mode_v2="origin")
说明:
|
modify_mixlist |
开启混合精度的场景下,开发者可通过此参数指定混合精度黑白灰名单的路径以及文件名,自行指定哪些算子允许降精度,哪些算子不允许降精度。 用户可以在脚本中通过配置“precision_mode_v2”参数或者“precision_mode”参数开启混合精度。
黑白灰名单存储文件为json格式,配置示例如下:
config = NPURunConfig(modify_mixlist="/home/test/ops_info.json") ops_info.json中可以指定算子类型,多个算子使用英文逗号分隔,样例如下: { "black-list": { // 黑名单 "to-remove": [ // 黑名单算子转换为灰名单算子 "Xlog1py" ], "to-add": [ // 白名单或灰名单算子转换为黑名单算子 "Matmul", "Cast" ] }, "white-list": { // 白名单 "to-remove": [ // 白名单算子转换为灰名单算子 "Conv2D" ], "to-add": [ // 黑名单或灰名单算子转换为白名单算子 "Bias" ] } } 说明:上述配置文件样例中展示的算子仅作为参考,请基于实际硬件环境和具体的算子内置优化策略进行配置。 混合精度场景下算子的内置优化策略可在“CANN软件安装目录/opp/built-in/op_impl/ai_core/tbe/config/<soc_version>/aic-<soc_version>-ops-info.json”文件中查询,例如: "Conv2D":{ "precision_reduce":{ "flag":"true" },
|
enable_reduce_precision |
当前版本暂不支持。 |
customize_dtypes |
使用precision_mode参数设置整个网络的精度模式时,可能会存在个别算子存在精度问题,此种场景下,可以使用customize_dtypes参数配置个别算子的精度模式,而模型中的其他算子仍以precision_mode指定的精度模式进行编译。需要注意,当precision_mode取值为“must_keep_origin_dtype”时,customize_dtypes参数不生效。 该参数需要配置为配置文件路径及文件名,例如:/home/test/customize_dtypes.cfg。 配置示例: config = NPURunConfig(customize_dtypes="/home/test/customize_dtypes.cfg") 配置文件中列举需要自定义计算精度的算子名称或算子类型,每个算子单独一行,且算子类型必须为基于Ascend IR定义的算子的类型。对于同一个算子,如果同时配置了算子名称和算子类型,编译时以算子名称为准。 配置文件格式要求: # 按照算子名称配置 Opname1::InputDtype:dtype1,dtype2,…OutputDtype:dtype1,… Opname2::InputDtype:dtype1,dtype2,…OutputDtype:dtype1,… # 按照算子类型配置 OpType::TypeName1:InputDtype:dtype1,dtype2,…OutputDtype:dtype1,… OpType::TypeName2:InputDtype:dtype1,dtype2,…OutputDtype:dtype1,… 配置文件配置示例: # 按照算子名称配置 resnet_v1_50/block1/unit_3/bottleneck_v1/Relu::InputDtype:float16,int8,OutputDtype:float16,int8 # 按照算子类型配置 OpType::Relu:InputDtype:float16,int8,OutputDtype:float16,int8
说明:
|
精度比对
参数名 |
描述 |
---|---|
dump_config |
dump开关,用户在创建NPURunConfig之前,可以实例化一个DumpConfig类进行dump的配置。DumpConfig类的构造函数,请参见DumpConfig构造函数。 配置示例: config = NPURunConfig(dump_config=dump_config) |
quant_dumpable |
如果TensorFlow网络是经过AMCT工具量化后的网络,可通过此参数控制是否采集量化前的dump数据,默认值为“0”。
配置示例: config = NPURunConfig(quant_dumpable="1")
说明:
此参数仅适用于在线推理场景下使用。 开启Data Dump的场景下,可通过将此配置项配置为“1”,确保可以采集量化前的dump数据。 |
fusion_switch_file |
融合开关配置文件路径以及文件名。 格式要求:支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。 系统内置了一些图融合和UB融合规则,均为默认开启,可以根据需要关闭指定的融合规则。
配置示例:
config = NPURunConfig(fusion_switch_file="/home/test/fusion_switch.cfg") 配置文件fusion_switch.cfg样例如下,on表示开启,off表示关闭。 { "Switch":{ "GraphFusion":{ "RequantFusionPass":"on", "ConvToFullyConnectionFusionPass":"off", "SoftmaxFusionPass":"on", "NotRequantFusionPass":"on", "ConvConcatFusionPass":"on", "MatMulBiasAddFusionPass":"on", "PoolingFusionPass":"on", "ZConcatv2dFusionPass":"on", "ZConcatExt2FusionPass":"on", "TfMergeSubFusionPass":"on" }, "UBFusion":{ "TbePool2dQuantFusionPass":"on" } } } 同时支持用户一键关闭融合规则: { "Switch":{ "GraphFusion":{ "ALL":"off" }, "UBFusion":{ "ALL":"off" } } } 需要注意的是:
|
buffer_optimize |
当前版本暂不支持。 |
性能调优
- 基础配置
参数名
描述
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 optype3=support_out_of_bound_index [ByNodeName] nodename1=high_precision nodename2=high_performance nodename3=support_out_of_bound_index
- high_precision:表示高精度。
- high_performance:表示高性能。
- support_out_of_bound_index:表示对gather、scatter和segment类算子的indices输入进行越界校验, 校验会降低算子的执行性能。
具体某个算子支持配置的精度/性能模式取值,可通过CANN软件安装后文件存储路径的“opp/built-in/op_impl/ai_core/tbe/impl_mode/all_ops_impl_mode.ini”文件查看。
该参数不能与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
当前版本暂不支持。
variable_placement
若网络的权重较大,Device侧可能存在内存不足导致网络执行失败的场景,此种情况下可通过此配置将variable的部署位置调整到Host,以降低Device的内存占用。
- Device:Variable部署在Device。
- Host:Variable部署在Host。
默认值为:Device
约束说明:- 如果此配置项取值为“Host”,需要开启混合计算(即mix_compile_mode取值为“True”)。
- 若训练脚本中存在类似tf.case/tf.cond/tf.while_loop等TensorFlow V1版本控制流算子对应的API,此种场景下,如果将“variable_placement”配置为“Host”,可能会导致网络运行失败。为避免此问题,需要在训练脚本中添加如下接口,将TensorFlow V1版本的控制流算子转换为V2版本,并启用资源变量。
tf.enable_control_flow_v2() tf.enable_resource_variables()
配置示例:
config = NPURunConfig(variable_placement="Device")
graph_max_parallel_model_num
在线推理场景下,可通过此参数设置图执行时的最大并行次数。当此参数大于1时,图执行时会拉起对应数量的线程并行执行,从而提升图的整体执行流水效率。
需要配置为整数,取值范围为[1,INT32_MAX],默认值为1,其中INT32_MAX是INT32类型的最大值,为“2147483647”。
配置示例:
config = NPURunConfig(graph_max_parallel_model_num=4)
Profiling
参数名 |
描述 |
---|---|
profiling_config |
profiling开关,用户在创建NPURunConfig之前,可以实例化一个ProfilingConfig类进行profiling的配置。ProfilingConfig类的构造函数,请参见ProfilingConfig构造函数。 配置示例: config = NPURunConfig(profiling_config=profiling_config) |
AOE
算子编译
参数名 |
描述 |
---|---|
op_compiler_cache_mode |
用于配置算子编译磁盘缓存模式。默认值为enable。
使用说明:
配置示例:
config = NPURunConfig(op_compiler_cache_mode="enable") |
op_compiler_cache_dir |
用于配置算子编译磁盘缓存的目录。 路径支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。 若指定的路径存在且路径有效,会在指定的路径下自动创建子目录kernel_cache;如果指定的路径不存在但路径有效,则先自动创建目录,然后在该路径下自动创建子目录kernel_cache。 算子编译缓存文件存储优先级为: 配置参数“op_compiler_cache_dir” > ${ASCEND_CACHE_PATH}/kernel_cache_host标识 > 默认路径($HOME/atc_data)。 关于环境变量ASCEND_CACHE_PATH的详细说明可参见《环境变量参考》。
配置示例:
config = NPURunConfig(op_compiler_cache_dir="/home/test/kernel_cache") |
数据增强
参数名 |
描述 |
---|---|
local_rank_id |
该参数用于推荐网络场景的数据并行场景,在主进程中对于数据进行去重操作,去重之后的数据再分发给其他进程的Device进行前后向计算。
该模式下,一个主机上多Device共用一个进程做数据预处理,但实际还是多进程的场景,在主进程上进行数据预处理,其他进程不在接受本进程上的Dataset,而是接收主进程预处理后的数据。 具体使用方法一般是通过集合通信的get_local_rank_id()接口获取当前进程在其所在Server内的rank编号,用来判断哪个进程是主进程。 配置示例: config = NPURunConfig(local_rank_id=0, local_device_list="0,1") |
local_device_list |
该参数配合local_rank_id使用,用来指定主进程给哪些其他进程的Device发送数据。 config = NPURunConfig(local_rank_id=0, local_device_list="0,1") |
异常补救
参数名 |
描述 |
---|---|
hccl_timeout |
集合通信超时时间,单位为s,默认值1836s。 当默认时长不满足需求时(例如出现通信失败的错误),可通过此配置项延长超时时间。
配置示例: config = NPURunConfig(hccl_timeout=1800) |
op_wait_timeout |
算子等待超时时间,单位为s。 配置示例: config = NPURunConfig(op_wait_timeout=120) |
op_execute_timeout |
算子执行超时时间,单位为s。 配置示例: config = NPURunConfig(op_execute_timeout=90) |
stream_sync_timeout |
图执行时,stream同步等待超时时间,超过配置时间时报同步失败。单位:ms 默认值-1,表示无等待时间,出现同步失败不报错。 说明:集群训练场景下,此配置的值(即stream同步等待超时时间)需要大于集合通信超时时间,即“hccl_timeout”配置项的值或者环境变量“HCCL_EXEC_TIMEOUT”的值。 配置示例: config = NPURunConfig(stream_sync_timeout=60000) |
event_sync_timeout |
图执行时,event同步等待超时时间,超过配置时间时报同步失败。单位:ms 默认值-1,表示无等待时间,出现同步失败不报错。 配置示例: config = NPURunConfig(event_sync_timeout=60000) |
试验参数
试验参数为调试功能扩展参数,后续版本可能会存在变更,不支持应用于商用产品中。
参数名 |
描述 |
---|---|
experimental_config |
功能扩展参数,当前暂不建议使用。用户在创建NPURunConfig之前,可以实例化一个ExperimentalConfig类进行功能配置。ExperimentalConfig类的构造函数,请参见ExperimentalConfig构造函数。 |
jit_compile |
模型编译时,选择是优先在线编译算子,还是优先使用已编译好的算子二进制文件。
默认值:auto。
须知:
该参数仅受限于大型推荐类型网络使用。 配置示例: config = NPURunConfig(jit_compile="auto") |
后续版本废弃配置
如下配置在后续版本即将废弃,请不要使用如下配置。
参数名 |
描述 |
---|---|
enable_data_pre_proc |
性能调优相关配置。 getnext算子是否下沉到昇腾AI处理器侧执行,getnext算子下沉是使能训练迭代循环下沉的必要条件。
配置示例: config = NPURunConfig(enable_data_pre_proc=True) |
variable_format_optimize |
性能调优相关配置。 是否开启变量格式优化。
为了提高训练效率,在网络执行的变量初始化过程中,将变量转换成更适合在昇腾AI处理器上运行的数据格式。但在用户特殊要求场景下,可以选择关闭该功能开关。 默认值为空,代表不使能此配置。 配置示例: config = NPURunConfig(variable_format_optimize=True) |
op_debug_level |
算子debug功能开关,取值:
默认值为空,代表不使能此配置。 配置示例: config = NPURunConfig(op_debug_level=1) |
op_select_implmode |
昇腾AI处理器部分内置算子有高精度和高性能实现方式,用户可以通过该参数配置模型编译时选择哪种算子。取值包括:
默认值为空,代表不使能此配置。
配置示例:
config = NPURunConfig(op_select_implmode="high_precision") |
optypelist_for_implmode |
列举算子optype的列表,该列表中的算子使用op_select_implmode参数指定的模式,当前支持的算子为Pooling、SoftmaxV2、LRN、ROIAlign,多个算子以“,”分隔。 该参数需要与op_select_implmode参数配合使用,配置示例: config = NPURunConfig( op_select_implmode="high_precision", optypelist_for_implmode="Pooling,SoftmaxV2") 默认值为空,代表不使能此配置。 |
dynamic_input |
当前网络的输入是否为动态输入,取值包括:
配置示例:
config = NPURunConfig(dynamic_input=True) |
dynamic_graph_execute_mode |
对于动态输入场景,需要通过该参数设置执行模式,即dynamic_input为True时该参数生效。取值为: dynamic_execute:动态图编译模式。该模式下获取dynamic_inputs_shape_range中配置的shape范围进行编译。
配置示例:
config = NPURunConfig(dynamic_graph_execute_mode="dynamic_execute") |
dynamic_inputs_shape_range |
动态输入的shape范围。例如全图有3个输入,两个为dataset输入,一个为placeholder输入,则配置示例为: config = NPURunConfig(dynamic_inputs_shape_range="getnext:[128 ,3~5, 2~128, -1],[64 ,3~5, 2~128, -1];data:[128 ,3~5, 2~128, -1]") 使用注意事项:
|
graph_memory_max_size |
历史版本,该参数用于指定网络静态内存和最大动态内存的大小。 当前版本,该参数不再生效。系统会根据网络使用的实际内存大小动态申请。 |
variable_memory_max_size |
历史版本,该参数用于指定变量内存的大小。 当前版本,该参数不再生效。系统会根据网络使用的实际内存大小动态申请。 |