在昇腾AI处理器上通过sess.run模式进行训练或在线推理时,支持如下配置项。
如果表中未列出,表示该参数预留或适用于其他昇腾AI处理器版本,用户无需关注。
配置项 |
说明 |
使用场景 |
---|---|---|
use_off_line |
是否在昇腾AI处理器执行训练。
配置示例: custom_op.parameter_map["use_off_line"].b = True |
训练/在线推理 |
enable_data_pre_proc |
getnext算子是否下沉到昇腾AI处理器侧执行,getnext算子下沉是使能训练迭代循环下沉的必要条件。
配置示例:
custom_op.parameter_map["enable_data_pre_proc"].b = True |
训练 |
iterations_per_loop |
sess.run模式下通过set_iteration_per_loop配置小循环次数,即每次sess.run(),在Device侧执行训练迭代的次数。 此处的配置参数和set_iteration_per_loop设置的iterations_per_loop值保持一致,用于功能校验。 配置示例: custom_op.parameter_map["iterations_per_loop"].i = 10 |
训练 |
profiling_mode |
是否开启Profiling功能。
配置示例:
custom_op.parameter_map["profiling_mode"].b = True |
训练/在线推理 |
profiling_options |
Profiling配置选项。
说明:
在线推理支持task_trace和aicpu,不支持training_trace。 配置示例: custom_op.parameter_map["profiling_options"].s = tf.compat.as_bytes('{"output":"/tmp/profiling","training_trace":"on","fp_point":"resnet_model/conv2d/Conv2Dresnet_model/batch_normalization/FusedBatchNormV3_Reduce","bp_point":"gradients/AddN_70"}') |
训练/在线推理 |
enable_dump |
是否开启Data Dump功能,默认值:False。
配置示例:
custom_op.parameter_map["enable_dump"].b = True |
训练/在线推理 |
dump_path |
Dump文件保存路径。enable_dump为True时,该参数必须配置。 该参数指定的目录需要在启动训练的环境上(容器或Host侧)提前创建且确保安装时配置的运行用户具有读写权限,支持配置绝对路径或相对路径(相对执行命令行时的当前路径)。
配置示例: custom_op.parameter_map["dump_path"].s = tf.compat.as_bytes("/home/HwHiAiUser/output") |
训练/在线推理 |
dump_step |
指定采集哪些迭代的Data Dump数据。默认值:None,表示所有迭代都会产生dump数据。 多个迭代用“|”分割,例如:0|5|10;也可以用"-"指定迭代范围,例如:0|3-5|10。 配置示例: custom_op.parameter_map["dump_step"].s = tf.compat.as_bytes("0|5|10") |
训练 |
dump_mode |
Data Dump模式,用于指定dump算子输入还是输出数据。取值如下:
配置示例: custom_op.parameter_map["dump_mode"].s = tf.compat.as_bytes("all") |
训练/在线推理 |
enable_dump_debug |
当前版本暂不支持。 |
训练 |
dump_debug_mode |
当前版本暂不支持。 |
训练 |
precision_mode |
算子精度模式,配置要求为string类型。
配置示例: custom_op.parameter_map["precision_mode"].s = tf.compat.as_bytes("allow_mix_precision") |
训练/在线推理 |
variable_format_optimize |
是否开启变量格式优化。
为了提高训练效率,在网络执行的变量初始化过程中,将变量转换成更适合在昇腾AI处理器上运行的数据格式,例如进行NCHW到NC1HWC0的数据格式转换。但在用户特殊要求场景下,可以选择关闭该功能开关。 配置示例: custom_op.parameter_map["variable_format_optimize"].b = True |
训练 |
mix_compile_mode |
是否开启混合计算模式。
计算全下沉模式即所有的计算类算子全部在Device侧执行,混合计算模式作为计算全下沉模式的补充,将部分不可离线编译下沉执行的算子留在前端框架中在线执行,提升昇腾AI处理器支持Tensorflow的适配灵活性。 配置示例: custom_op.parameter_map["mix_compile_mode"].b = True |
训练/在线推理 |
hcom_parallel |
是否启用Allreduce梯度更新和前后向并行执行。
配置示例: custom_op.parameter_map["hcom_parallel"].b = True |
训练 |
graph_memory_max_size |
网络静态内存和最大动态内存,可根据网络大小指定。单位:Byte,取值范围:[0, 256*1024*1024*1024]或[0, 274877906944]。当前受昇腾AI处理器硬件限制,graph_memory_max_size和variable_memory_max_size总和最大支持31G。如果不设置,默认为26GB。 配置示例: custom_op.parameter_map["graph_memory_max_size"].s = tf.compat.as_bytes(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。 配置示例: custom_op.parameter_map["variable_memory_max_size"].s = tf.compat.as_bytes(str(5*1024 * 1024 * 1024)) |
训练/在线推理 |
auto_tune_mode |
用户可以控制TBE算子编译时,是否通过Auto Tune工具对算子进行调优,以便在昇腾AI处理器上寻找最好的性能配置。 若未配置该参数,则自动关闭自动调优功能。 关于Auto Tune工具的介绍和使用方法请参见《CANN 开发工具指南》中的“Auto Tune工具使用指南”章节。 配置示例: custom_op.parameter_map["auto_tune_mode"].s = tf.compat.as_bytes("RL,GA") |
训练 |
stream_max_parallel_num |
指定AICPU/AICORE引擎的并行度,从而实现AICPU/AICORE算子间的并行执行。 DNN_VM_TF为AICPU引擎名称,本示例指定了AICPU引擎的并发数为10; DNN_V100为AICORE引擎名称,本示例指定了AICORE引擎的并发数为1。 AICPU/AICORE引擎的并行度默认为1,取值范围为:[1,13][1,3]。 配置示例: custom_op.parameter_map["stream_max_parallel_num"].s = tf.compat.as_bytes("DNN_VM_TF:10,DNN_V100:1") |
训练/在线推理 |
is_tailing_optimization |
分布式训练场景下,是否开启通信拖尾优化,用于提升训练性能。通信拖尾优化即,通过计算依赖关系的改变,将不依赖于最后一个AR(梯度聚合分片)的计算操作调度到和最后一个AR并行进行,以达到优化通信拖尾时间的目的。取值:
必须和NPUOptimizer配合使用,且要求和NPUOptimizer中的is_tailing_optimization值保持一致。 配置示例: custom_op.parameter_map["is_tailing_optimization"].b = True |
训练 |
graph_run_mode |
图执行模式,取值:
配置示例: custom_op.parameter_map["graph_run_mode"].i = 1 |
训练/在线推理 |
op_debug_level |
算子debug功能开关,取值:
配置示例: custom_op.parameter_map["op_debug_level"].i = 0 |
训练/在线推理 |
enable_scope_fusion_passes |
指定编译时需要生效的Scope融合规则列表。此处传入注册的融合规则名称,允许传入多个,用“,”隔开。 无论是内置还是用户自定义的Scope融合规则,都分为如下两类:
配置示例: custom_op.parameter_map["enable_scope_fusion_passes"].s = tf.compat.as_bytes("ScopeLayerNormPass,ScopeClipBoxesPass") |
训练/在线推理 |
enable_exception_dump |
是否dump异常算子的输入和输出数据。
配置示例:
custom_op.parameter_map["enable_exception_dump"].i = 1 |
训练 |
op_select_implmode |
昇腾AI处理器部分内置算子有高精度和高性能实现方式,用户可以通过该参数配置模型编译时选择哪种算子。取值包括:
配置示例: custom_op.parameter_map["op_select_implmode"].s = tf.compat.as_bytes("high_precision") |
训练/在线推理 |
optypelist_for_implmode |
列举算子optype的列表,该列表中的算子使用op_select_implmode参数指定的模式,当前支持的算子为Pooling、SoftmaxV2、LRN、ROIAlign,多个算子以英文逗号分隔。 该参数需要与op_select_implmode参数配合使用,例如: op_select_implmode配置为high_precision。 optypelist_for_implmode配置为Pooling。 配置示例: custom_op.parameter_map["optypelist_for_implmode"].s = tf.compat.as_bytes("Pooling,SoftmaxV2") |
训练/在线推理 |
input_shape |
输入的shape信息。 配置示例: custom_op.parameter_map["input_shape"].s = tf.compat.as_bytes("data:1,1,40,-1;label:1,-1;mask:-1,-1") 表示网络中有三个输入,输入的name分别为data,label,mask,各输入的shape分别为(1,1,40,-1),(1,-1),(-1,-1),name和shape之间以英文冒号分隔。其中-1表示该维度上为动态档位,需要通过dynamic_dims设置动态档位参数。 配置注意事项:
|
在线推理 |
dynamic_dims |
输入的对应维度的档位信息。档位中间使用英文分号分隔,每档中的dim值与input_shape参数中的-1标识的参数依次对应,input_shape参数中有几个-1,则每档必须设置几个维度。并且要求档位信息必须大于1组。 input_shape和dynamic_dims这两个参数的分档信息能够匹配,否则报错退出。 配置示例: custom_op.parameter_map["dynamic_dims"].s = tf.compat.as_bytes("20,20,1,1;40,40,2,2;80,60,4,4") 结合上面举例的input_shape信息,表示支持输入的shape为:
|
在线推理 |
dynamic_node_type |
指定动态输入的节点类型。
当前不支持dataset和placeholder输入同时为动态输入。
配置示例:
custom_op.parameter_map["dynamic_node_type"].i = 0 |
在线推理 |
aoe_mode |
当前版本暂不支持。 |
训练 |
work_path |
当前版本暂不支持。 |
训练 |
distribute_config |
当前版本暂不支持。 |
训练 |
buffer_optimize |
是否开启buffer优化。
配置示例: custom_op.parameter_map["buffer_optimize"].s = tf.compat.as_bytes("l2_optimize") |
在线推理 |
enable_small_channel |
是否使能small channel的优化,使能后在channel<=4的卷积层会有性能收益。 建议用户在推理场景下打开此开关。
配置示例: custom_op.parameter_map["enable_small_channel"].i = 1 |
在线推理 |
fusion_switch_file |
融合开关配置文件路径以及文件名。 格式要求:支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。 系统内置了一些图融合和UB融合规则,均为默认开启,可以根据需要关闭指定的融合规则。 配置文件样例fusion_switch.cfg如下所示,on表示开启,off表示关闭。 { "Switch":{ "GraphFusion":{ "RequantFusionPass":"on", "ConvToFullyConnectionFusionPass":"off", "SoftmaxFusionPass":"on", "NotRequantFusionPass":"on", "SplitConvConcatFusionPass":"on", "ConvConcatFusionPass":"on", "MatMulBiasAddFusionPass":"on", "PoolingFusionPass":"on", "ZConcatv2dFusionPass":"on", "ZConcatExt2FusionPass":"on", "TfMergeSubFusionPass":"on" }, "UBFusion":{ "TbePool2dQuantFusionPass":"on" } } } 同时支持用户一键关闭融合规则: { "Switch":{ "GraphFusion":{ "ALL":"off" }, "UBFusion":{ "ALL":"off" } } } 需要注意的是:
配置示例: custom_op.parameter_map["fusion_switch_file"].s = tf.compat.as_bytes("/home/test/fusion_switch.cfg") |
训练/在线推理 |
op_compiler_cache_mode |
用于配置算子编译磁盘缓存模式。
使用说明:
配置示例: custom_op.parameter_map["op_compiler_cache_mode"].s = tf.compat.as_bytes("enable") |
训练/在线推理 |
op_compiler_cache_dir |
用于配置算子编译磁盘缓存的目录。 路径支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。 如果参数指定的路径存在且有效,则在指定的路径下自动创建子目录kernel_cache;如果指定的路径不存在但路径有效,则先自动创建目录,然后在该路径下自动创建子目录kernel_cache。 默认值:$HOME/atc_data 配置示例: custom_op.parameter_map["op_compiler_cache_dir"].s = tf.compat.as_bytes("/home/test/kernel_cache") |
训练/在线推理 |
debug_dir |
用于配置保存算子编译生成的调试相关的过程文件的路径,包括算子.o/.json/.cce等文件。 默认生成在当前脚本执行路径下。 配置示例: custom_op.parameter_map["debug_dir"].s = tf.compat.as_bytes("/home/test") |
训练/在线推理 |
dynamic_input |
当前网络的输入是否为动态输入,取值包括:
配置示例: custom_op.parameter_map["dynamic_input"].b = True 须知:
当存在不同输入shape的子图时,由于dynamic_inputs_shape_range是针对于单张图的配置属性,因此可能会导致执行异常,建议使用set_graph_exec_config以支持动态输入场景。 |
训练/在线推理 |
dynamic_graph_execute_mode |
对于动态输入场景,需要通过该参数设置执行模式,即dynamic_input为True时该参数生效。取值为: dynamic_execute:动态图编译模式。该模式下获取dynamic_inputs_shape_range中配置的shape范围进行编译。 配置示例: custom_op.parameter_map["dynamic_graph_execute_mode"].s = tf.compat.as_bytes("dynamic_execute") 须知:
当存在不同输入shape的子图时,由于dynamic_inputs_shape_range是针对于单张图的配置属性,因此可能会导致执行异常,建议使用set_graph_exec_config以支持动态输入场景。 |
训练/在线推理 |
dynamic_inputs_shape_range |
动态输入的shape范围。例如全图有3个输入,两个为dataset输入,一个为placeholder输入,则配置示例为: custom_op.parameter_map["dynamic_inputs_shape_range"].s = tf.compat.as_bytes("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编号,用来判断哪个进程是主进程。 配置示例: custom_op.parameter_map["local_rank_id"].i = 0 |
训练/在线推理 |
local_device_list |
该参数配合local_rank_id使用,用来指定主进程给哪些其他进程的Device发送数据。 custom_op.parameter_map["local_device_list"].s = tf.compat.as_bytes("0,1") |
训练/在线推理 |
session_device_id |
当用户需要将不同的模型通过同一个脚本在不同的Device上执行,可以通过该参数指定Device的逻辑ID。 通常可以为不同的图创建不同的Session,并且传入不同的session_device_id,该参数优先级高于ASCEND_DEVICE_ID。 配置示例: config_0 = tf.ConfigProto() custom_op = config_0.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" custom_op.parameter_map["session_device_id"].i = 0 config_0.graph_options.rewrite_options.remapping = RewriterConfig.OFF config_0.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF with tf.Session(config=config_0) as sess_0: sess_0.run(...) config_1 = tf.ConfigProto() custom_op = config_1.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" custom_op.parameter_map["session_device_id"].i = 1 config_1.graph_options.rewrite_options.remapping = RewriterConfig.OFF config_1.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF with tf.Session(config=config_1) as sess_1: sess_1.run(...) config_7 = tf.ConfigProto() custom_op = config_7.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" custom_op.parameter_map["session_device_id"].i = 7 config_7.graph_options.rewrite_options.remapping = RewriterConfig.OFF config_7.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF with tf.Session(config=config_7) as sess_7: sess_7.run(...) |
训练/在线推理 |
in_out_pair_flag |
混合计算场景下,指定in_out_pair中的算子是否下沉到昇腾AI处理器,取值:
配置示例: custom_op.parameter_map['in_out_pair_flag'].b = False |
在线推理 |
in_out_pair |
混合计算场景下,配置下沉/不下沉部分的首尾算子名。 配置示例: # 开启混合计算
custom_op.parameter_map["mix_compile_mode"].b = True
# 如下配置,将in_nodes, out_nodes范围内的算子全部下沉到昇腾AI处理器执行
in_nodes.append('import/conv2d_1/convolution')
out_nodes.append('import/conv2d_59/BiasAdd')
out_nodes.append('import/conv2d_67/BiasAdd')
out_nodes.append('import/conv2d_75/BiasAdd')
all_graph_iop.append([in_nodes, out_nodes])
custom_op.parameter_map['in_out_pair'].s = tf.compat.as_bytes(str(all_graph_iop))
# 或者通过如下配置,将in_nodes, out_nodes范围内的算子不下沉,全部留在前端框架执行
in_nodes.append('import/conv2d_1/convolution')
out_nodes.append('import/conv2d_59/BiasAdd')
out_nodes.append('import/conv2d_67/BiasAdd')
out_nodes.append('import/conv2d_75/BiasAdd')
all_graph_iop.append([in_nodes, out_nodes])
custom_op.parameter_map['in_out_pair_flag'].b = False
custom_op.parameter_map['in_out_pair'].s = tf.compat.as_bytes(str(all_graph_iop)) |
在线推理 |
modify_mixlist |
配置混合精度黑白灰名单,配置为路径以及文件名,文件为json格式。 allow_mix_precision混合精度模式下,针对全网中float32数据类型的算子,按照内置的优化策略,自动将部分float32的算子降低精度到float16,从而在精度损失很小的情况下提升系统性能并减少内存使用。用户可以在内置优化策略基础上进行调整,自行指定哪些算子允许降精度,哪些算子不允许降精度。
配置示例:
custom_op.parameter_map["modify_mixlist"].s = tf.compat.as_bytes("/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文件调整某个具体算子的精度模式。 配置示例: custom_op.parameter_map["op_precision_mode"].s = tf.compat.as_bytes("/home/test/op_precision.ini") |
训练/在线推理 |
device_type |
当前版本暂不支持。 |
NA |
hccl_timeout |
集合通信超时时间,单位为s。 配置示例: custom_op.parameter_map["hccl_timeout"].i = 600 |
训练 |
op_wait_timeout |
算子等待超时时间,单位为s。 配置示例: custom_op.parameter_map["op_wait_timeout"].i = 120 |
训练 |
op_execute_timeout |
当前版本暂不支持。 |
训练 |
import tensorflow as tf from npu_bridge.npu_init import * config = tf.ConfigProto() custom_op = config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" custom_op.parameter_map["use_off_line"].b = True config.graph_options.rewrite_options.remapping = RewriterConfig.OFF config.graph_options.rewrite_options.memory_optimization = RewriterConfig.OFF with tf.Session(config=config) as sess: sess.run(cost)