def __init__(self,
iterations_per_loop=1,
profiling_config=None,
model_dir=None,
tf_random_seed=None,
save_summary_steps=0,
save_checkpoints_steps=None,
save_checkpoints_secs=None,
session_config=None,
keep_checkpoint_max=5,
keep_checkpoint_every_n_hours=10000,
log_step_count_steps=100,
distribute=None,
enable_data_pre_proc=True,
precision_mode=None,
enable_reduce_precision=False,
variable_format_optimize=True,
mix_compile_mode=False,
hcom_parallel=False,
graph_memory_max_size=None,
variable_memory_max_size=None,
auto_tune_mode=None,
dump_config=None,
stream_max_parallel_num=None,
is_tailing_optimization=False,
horovod_mode = False,
graph_run_mode = 1,
op_debug_level = 0,
enable_scope_fusion_passes = None,
enable_exception_dump = 0,
op_select_implmode=None,
optypelist_for_implmode=None,
dynamic_input_config=None,
aoe_mode=None,
work_path=None,
buffer_optimize=“l2_optimize”,
enable_small_channel=0,
fusion_switch_file=None,
enable_compress_weight=False,
compress_weight_conf=None,
op_compiler_cache_mode=None,
op_compiler_cache_dir=None,
debug_dir=None,
dynamic_input=False,
dynamic_graph_execute_mode="dynamic_execute",
dynamic_inputs_shape_range=None,
train_distribute=None,
eval_distribute=None,
local_rank_id=None,
local_device_list=None,
session_device_id=None,
distribute_config=None,
modify_mixlist=None,
op_precision_mode=None,
device_type,
hccl_timeout = None,
op_wait_timeout = None,
op_execute_timeout= None
)
NPURunConfig类的构造函数,NPURunConfig类继承了RunConfig类,可以调用基类的原生接口。
使用多Device执行训练的场景下,不支持使用按时间保存文件的参数save_checkpoints_secs。
参数名 |
描述 |
---|---|
NPURunConfig继承RunConfig的参数: |
|
model_dir |
保存模型路径。默认值:None。 如果NPURunConfig和NPUEstimator配置的model_dir不同,系统报错。 如果NPURunConfig和NPUEstimator仅一个接口配置model_dir,以配置的路径为准。 如果NPURunConfig和NPUEstimator均未配置model_dir,则系统在当前脚本执行路径创建一个model_dir_xxxxxxxxxx目录保存模型文件。 |
tf_random_seed |
初始化变量的种子。默认值:None。 |
save_summary_steps |
每隔多少step保存一次Summary。默认值:0。 该参数仅适用于iterations_per_loop=1的场景,iterations_per_loop>1时,可能无法按照配置的值保存,请参考“Log/Summary”专题实现信息保存。 |
save_checkpoints_steps |
每隔多少step保存一次checkpoint。默认值:None。
如果用户只希望在某个device上保存checkpoint,而不希望在其他device上保存checkpoint数据,可以按照如下方法修改训练脚本。 TensorFlow原始代码: self._classifier=tf.estimator.Estimator( model_fn=cnn_model_fn, model_dir=self._model_dir, config=tf.estimator.RunConfig( save_checkpoints_steps=50 if hvd.rank() == 0 else None, keep_checkpoint_max=1)) 迁移后的代码: self._classifier=NPUEstimator( model_fn=cnn_model_fn, model_dir=self._model_dir, config=tf.estimator.NPURunConfig( save_checkpoints_steps=50 if get_rank_id() == 0 else 0, keep_checkpoint_max=1)) |
save_checkpoints_secs |
每隔多少秒保存一次checkpoint。默认值:None。 与save_checkpoints_steps不能同时配置。 |
session_config |
设置session参数的ConfigProto格式对象。默认值:None。 |
keep_checkpoint_max |
最大保存多少个checkpoint文件。默认值:5 |
keep_checkpoint_every_n_hours |
保留N个小时的checkpoint文件。 默认值:10000,可有效禁用该功能。 如需使用该功能,keep_checkpoint_max需要配置足够大。 |
log_step_count_steps |
每隔多少step,记录global step和loss值一次。默认值:100。 该参数仅适用于iterations_per_loop=1的场景,iterations_per_loop>1时,可能无法按照配置的值保存,请参考“Log/Summary”专题实现信息保存。 |
NPURunConfig不支持的参数: |
|
train_distribute |
指明分布式训练策略,分布式相关配置由experimental_distribute指定。 仅TF Adapte迁移工具会使用该参数,不建议用户单独使用。 |
device_fn |
获取每个Operation的Device字段的function。 |
protocol |
可选参数,指定启动Server时使用的协议。无表示默认为GRPC。 |
eval_distribute |
是否分布式验证,分布式相关配置由experimental_distribute指定。 仅TF Adapte迁移工具会使用该参数,不建议用户单独使用。 |
experimental_distribute |
分布式配置。 |
NPURunConfig新增参数: |
|
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) |
profiling_config |
profiling开关,用户在创建NPURunConfig之前,可以实例化一个ProfilingConfig类进行profiling的配置。ProfilingConfig类的构造函数,请参见ProfilingConfig构造函数。 配置示例: config = NPURunConfig(profiling_config=profiling_config) |
dump_config |
dump开关,用户在创建NPURunConfig之前,可以实例化一个DumpConfig类进行dump的配置。DumpConfig类的构造函数,请参见DumpConfig构造函数。 配置示例: config = NPURunConfig(dump_config=dump_config) |
enable_data_pre_proc |
getnext算子是否下沉到昇腾AI处理器侧执行,getnext算子下沉是使能训练迭代循环下沉的必要条件。
配置示例: config = NPURunConfig(enable_data_pre_proc=True) |
precision_mode |
算子精度模式,配置要求为string类型。
配置示例: config = NPURunConfig(precision_mode="allow_mix_precision") |
enable_reduce_precision |
当前版本暂不支持。 |
variable_format_optimize |
是否开启变量格式优化。
为了提高训练效率,在网络执行的变量初始化过程中,将变量转换成更适合在昇腾AI处理器上运行的数据格式。但在用户特殊要求场景下,可以选择关闭该功能开关。 配置示例: config = NPURunConfig(variable_format_optimize=True) |
mix_compile_mode |
是否开启混合计算模式。
计算全下沉模式即所有的计算类算子全部在Device侧执行,混合计算模式作为计算全下沉模式的补充,将部分不可离线编译下沉执行的算子留在前端框架中在线执行,提升昇腾AI处理器支持Tensorflow的适配灵活性。 配置示例: config = NPURunConfig(mix_compile_mode=True) |
hcom_parallel |
是否启用Allreduce梯度更新和前后向并行执行。
配置示例: config = NPURunConfig(hcom_parallel=True) |
graph_memory_max_size |
网络静态内存和最大动态内存,可根据网络大小指定。单位:Byte,取值范围:[0, 256*1024*1024*1024]或[0, 274877906944]。当前受昇腾AI处理器硬件限制,graph_memory_max_size和variable_memory_max_size总和最大支持31G。如果不设置,默认为26GB。 配置示例: config = NPURunConfig(graph_memory_max_size=str(26*1024 * 1024 * 1024)) |
variable_memory_max_size |
变量内存,可根据网络大小指定。单位:Byte,取值范围:[0,256*1024*1024*1024]或[0, 274877906944]。当前受昇腾AI处理器硬件限制,graph_memory_max_size和variable_memory_max_size总和最大支持31G。如果不设置,默认为5GB。 配置示例: config = NPURunConfig(variable_memory_max_size=str(5*1024 * 1024 * 1024)) |
auto_tune_mode |
用户可以控制TBE算子编译时,是否通过Auto Tune工具对算子进行调优,以便在昇腾AI处理器上寻找最好的性能配置。
支持配置多种模式,多种模式放在双引号中,中间用英文逗号分隔,若未配置该参数,则自动关闭自动调优功能。 关于Auto Tune工具的介绍和使用方法请参见《CANN 开发工具指南》中的“Auto Tune工具使用指南”章节。 配置示例: config = NPURunConfig(auto_tune_mode="RL,GA") |
stream_max_parallel_num |
指定AICPU/AICORE引擎的并行度,从而实现AICPU/AICORE算子间的并行执行。 配置示例: config = NPURunConfig(stream_max_parallel_num="DNN_VM_TF:10,DNN_V100:1") DNN_VM_TF为AICPU引擎名称,本示例指定了AICPU引擎的并发数为10; DNN_V100为AICORE引擎名称,本示例指定了AICORE引擎的并发数为1。 AICPU/AICORE引擎的并行度默认为1,取值范围为:[1,13]。 |
is_tailing_optimization |
分布式训练场景下,是否开启通信拖尾优化,用于提升训练性能。通信拖尾优化即,通过计算依赖关系的改变,将不依赖于最后一个AR(梯度聚合分片)的计算操作调度到和最后一个AR并行进行,以达到优化通信拖尾时间的目的。取值:
必须和NPUOptimizer构造函数配合使用,且要求和NPUOptimizer构造函数中的is_tailing_optimization值保持一致。 配置示例: config = NPURunConfig(is_tailing_optimization=True) |
horovod_mode |
当前版本暂不支持。 |
graph_run_mode |
图执行模式,取值:
配置示例: config = NPURunConfig(graph_run_mode=1) |
op_debug_level |
算子debug功能开关,取值:
配置示例: config = NPURunConfig(op_debug_level=1) |
enable_scope_fusion_passes |
指定编译时需要生效的融合规则列表。此处传入注册的融合规则名称,允许传入多个,用“,”隔开。 无论是内置还是用户自定义的Scope融合规则,都分为如下两类:
配置示例: config = NPURunConfig(enable_scope_fusion_passes="ScopeLayerNormPass,ScopeClipBoxesPass") |
distribute |
通过PS-Worker架构进行分布式训练时,传入ParameterServerStrategy对象。 配置示例: config = NPURunConfig(distribute=strategy) |
enable_exception_dump |
是否Dump AI Core Error算子的输入和输出信息,dump信息生成在当前脚本执行目录。
配置示例: config = NPURunConfig(enable_exception_dump=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 |
当前版本暂不支持。 |
aoe_mode |
当前版本暂不支持。 |
work_path |
当前版本暂不支持。 |
distribute_config |
当前版本暂不支持。 |
buffer_optimize |
当前版本暂不支持。 |
enable_small_channel |
当前版本暂不支持。 |
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" } } } 需要注意的是:
|
enable_compress_weight |
当前版本暂不支持。 |
compress_weight_conf |
当前版本暂不支持。 |
op_compiler_cache_mode |
用于配置算子编译磁盘缓存模式。
使用说明:
配置示例:
config = NPURunConfig(op_compiler_cache_mode="enable") |
op_compiler_cache_dir |
用于配置算子编译磁盘缓存的目录。 路径支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。 如果参数指定的路径存在且有效,则在指定的路径下自动创建子目录kernel_cache;如果指定的路径不存在但路径有效,则先自动创建目录,然后在该路径下自动创建子目录kernel_cache。 默认值:$HOME/atc_data
配置示例:
config = NPURunConfig(op_compiler_cache_dir="/home/test/kernel_cache") |
debug_dir |
用于配置保存算子编译生成的调试相关的过程文件的路径,包括算子.o/.json/.cce等文件。 默认生成在当前脚本执行路径下。
配置示例:
config = NPURunConfig(debug_dir="/home/test") |
dynamic_input |
当前网络的输入是否为动态输入,取值包括:
配置示例:
config = NPURunConfig(dynamic_input=True) 须知:
当存在不同输入shape的子图时,由于dynamic_inputs_shape_range是针对于单张图的配置属性,因此可能会导致执行异常,建议使用set_graph_exec_config以支持动态输入场景。 |
dynamic_graph_execute_mode |
对于动态输入场景,需要通过该参数设置执行模式,即dynamic_input为True时该参数生效。取值为: dynamic_execute:动态图编译模式。该模式下获取dynamic_inputs_shape_range中配置的shape范围进行编译。
配置示例:
config = NPURunConfig(dynamic_graph_execute_mode="dynamic_execute") 须知:
当存在不同输入shape的子图时,由于dynamic_inputs_shape_range是针对于单张图的配置属性,因此可能会导致执行异常,建议使用set_graph_exec_config以支持动态输入场景。 |
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]") 使用注意事项:
|
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") |
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, ...) ... |
modify_mixlist |
配置混合精度黑白灰名单,配置为路径以及文件名,文件为json格式。 allow_mix_precision混合精度模式下,针对全网中float32数据类型的算子,按照内置的优化策略,自动将部分float32的算子降低精度到float16,从而在精度损失很小的情况下提升系统性能并减少内存使用。用户可以在内置优化策略基础上进行调整,自行指定哪些算子允许降精度,哪些算子不允许降精度。
配置示例:
config = NPURunConfig(modify_mixlist="/home/test/ops_info.json") ops_info.json中可以指定算子类型,多个算子使用英文逗号分隔,样例如下: { "black-list": { // 黑名单 "to-remove": [ // 黑名单算子转换为灰名单算子 "Yolo" ], "to-add": [ // 白名单或灰名单算子转换为黑名单算子 "Matmul", "Cast" ] }, "white-list": { // 白名单 "to-remove": [ // 白名单算子转换为灰名单算子 "Conv2D" ], "to-add": [ // 黑名单或灰名单算子转换为白名单算子 "Bias" ] } } 如何查询混合精度场景下算子的内置优化策略:内置优化策略在“OPP安装目录/opp/op_impl/built-in/ai_core/tbe/config/ascend910/aic-ascend910-ops-info.json”,例如: "Conv2D":{ "precision_reduce":{ "flag":"true" },
|
op_precision_mode |
设置具体某个算子的精度模式,通过该参数传入自定义的精度模式配置文件op_precision.ini,可以为不同的算子设置不同的精度模式。 ini文件格式要求: AvgPoolV2=high_precision ReduceMeanD=high_performance 该参数不能与op_select_implmode、optypelist_for_implmode参数同时使用,若三个参数同时配置,则只有op_precision_mode参数指定的模式生效。 该参数不建议配置,若使用高性能或者高精度模式,网络性能或者精度不是最优,则可以使用该参数,通过配置ini文件调整某个具体算子的精度模式。 配置示例: config = NPURunConfig(op_precision_mode="/home/test/op_precision.ini") |
device_type |
当前版本暂不支持。 |
hccl_timeout |
集合通信超时时间,单位为s。 配置示例: config = NPURunConfig(hccl_timeout=600) |
op_wait_timeout |
算子等待超时时间,单位为s。 配置示例: config = NPURunConfig(op_wait_timeout=120) |
op_execute_timeout |
当前版本暂不支持。 |
返回NPURunConfig类对象,作为NPUEstimator的初始化参数传入。
from npu_bridge.npu_init import * session_config=tf.ConfigProto() config = NPURunConfig( session_config=session_config, mix_compile_mode=False, iterations_per_loop=1000)