高级功能
功能配置选项
--out_nodes
功能说明
指定输出节点。
如果不指定输出节点(算子名称),则模型的输出默认为最后一层的算子信息,如果指定,则以指定的为准。
某些情况下,用户想要查看某层算子参数是否合适,则需要将该层算子的参数输出,既可以在模型转换时通过该参数指定输出某层算子,模型转换后,在相应.om模型文件最后即可以看到指定输出算子的参数信息,如果通过.om模型文件无法查看,则可以将.om模型文件转换成json格式后查看。
关联参数
无。
参数取值
参数值:
- 网络模型中的节点(node_name)名称
指定的输出节点必须放在双引号中,节点中间使用英文分号分隔。node_name必须是模型转换前的网络模型中的节点名称,冒号后的数字表示第几个输出,例如node_name1:0,表示节点名称为node_name1的第1个输出。
- 某层输出节点的topname(该场景仅支持Caffe网络模型)
指定的输出节点必须放在双引号中,节点中间使用英文分号分隔。topname必须是模型编译前的Caffe网络模型中layer的某个top名称;若几个layer有相同的topname,则以最后一个layer的topname为准。
参数值约束:
- 参数值中的两种方式,使用时只能取其一,两者不能同时存在。
- 参数值取值为某层输出节点的topname,该种方式仅限于Caffe网络模型。
- 如果模型转换过程中该算子被融合掉,则该算子不能作为输出节点。
推荐配置及收益
无。
示例
- 参数值取网络模型中的节点(node_name)名称
--out_nodes="node_name1:0;node_name1:1;node_name2:0"
- 参数值取某层输出节点的topname
--out_nodes="topname0;topname1;topname2"
依赖约束
无。
--input_fp16_nodes
功能说明
指定输入数据类型为FP16的输入节点名称。
关联参数
若配置了该参数,则不能对同一个输入节点同时使用--insert_op_conf参数。
参数取值
参数值:数据类型为FP16的输入节点名称。
参数值约束:指定的节点必须放在双引号中,节点中间使用英文分号分隔。
推荐配置及收益
无。
示例
--input_fp16_nodes="node_name1;node_name2"
依赖约束
无。
--insert_op_conf
功能说明
插入算子的配置文件路径与文件名,例如aipp预处理算子。
关联参数
若配置了该参数,则不能对同一个输入节点同时使用--input_fp16_nodes参数。
参数取值
参数值:插入算子的配置文件路径与文件名。
参数值格式:路径和文件名:支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。
推荐配置及收益
无。
示例
下面以插入AIPP预处理算子为例进行说明,配置文件内容示例如下(文件名为举例为:insert_op.cfg),关于AIPP预处理配置文件的详细配置说明,请查看AIPP配置章节。
aipp_op { aipp_mode:static input_format:YUV420SP_U8 csc_switch:true var_reci_chn_0:0.00392157 var_reci_chn_1:0.00392157 var_reci_chn_2:0.00392157 }
将配置好的insert_op.cfg文件上传到ATC工具所在服务器任意目录,例如上传到/home/Davinci/,使用示例如下:
--insert_op_conf=/home/Davinci/insert_op.cfg
依赖约束
无。
--op_name_map
功能说明
扩展算子(非标准算子)映射配置文件路径和文件名,不同的网络中某扩展算子的功能不同,可以指定该扩展算子到具体网络中实际运行的扩展算子的映射。
关联参数
无。
参数取值
参数值:扩展算子映射配置文件路径和文件名。
参数值格式:路径和文件名:支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。
推荐配置及收益
无。
示例
扩展算子映射配置文件内容示例如下(文件名举例为:opname_map.cfg):
OpA:Network1OpA
将配置好的opname_map.cfg上传到ATC工具所在服务器任意目录,例如上传到/home/Davinci/,使用示例如下:
--op_name_map=/home/Davinci/opname_map.cfg
依赖约束
无。
--is_input_adjust_hw_layout
功能说明
用于指定网络输入数据类型是否为FP16,数据格式是否为NC1HWC0。
关联参数
该参数需要与--input_fp16_nodes配合使用。
若--is_input_adjust_hw_layout参数设置为true,对应--input_fp16_nodes节点的输入数据类型为FP16,输入数据格式为NC1HWC0。
参数取值
参数值:false或true
参数默认值:false
推荐配置及收益
无。
示例
atc --model=$HOME/test/resnet50.prototxt --weight=$HOME/test/resnet50.caffemodel --framework=0 --output=$HOME/test/out/caffe_resnet50 --is_input_adjust_hw_layout=true --input_fp16_nodes="data" --soc_version=${soc_version}
依赖约束
无。
--is_output_adjust_hw_layout
功能说明
用于指定网络输出的数据类型是否为FP16,数据格式是否为NC1HWC0。
关联参数
该参数需要与--out_nodes配合使用。
若--is_output_adjust_hw_layout参数设置为true,对应--out_nodes中输出节点的输出数据类型为FP16,数据格式为NC1HWC0。
参数取值
参数值:false或true
参数默认值:false
推荐配置及收益
无。
示例
atc --model=$HOME/test/resnet50.prototxt --weight=$HOME/test/resnet50.caffemodel --framework=0 --output=$HOME/test/out/caffe_resnet50 --is_output_adjust_hw_layout=true --out_nodes="prob:0" --soc_version=${soc_version}
依赖约束
无。
模型调优选项
--disable_reuse_memory
功能说明
内存复用开关。
关联参数
无。
参数取值
参数值:
- 1:关闭内存复用。
- 0:开启内存复用。
参数默认值:0
参数值约束:如果网络模型较大,关闭内存复用开关,模型转换时可能会造成内存不足,导致模型转换失败。
推荐配置及收益
无。
示例
--disable_reuse_memory=0
依赖约束
在内存复用场景下(默认开启内存复用),支持基于指定算子(节点名称/算子类型)单独分配内存。通过OP_NO_REUSE_MEM环境变量指定要单独分配的一个或多个节点,支持混合配置。配置多个节点时,中间通过逗号(“,”)隔开。
- 基于节点名称配置
export OP_NO_REUSE_MEM=gradients/logits/semantic/kernel/Regularizer/l2_regularizer_grad/Mul_1,resnet_v1_50/conv1_1/BatchNorm/AssignMovingAvg2
- 基于算子类型配置
export OP_NO_REUSE_MEM=FusedMulAddN,BatchNorm
- 混合配置
export OP_NO_REUSE_MEM=FusedMulAddN, resnet_v1_50/conv1_1/BatchNorm/AssignMovingAvg
--fusion_switch_file
功能说明
融合开关配置文件路径以及文件名。
关联参数
无。
参数取值
参数值:配置文件路径以及文件名。
参数值格式:路径和文件名:支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。
参数值约束:如果用户想使用经过昇腾模型压缩工具量化后的模型,进行精度比对,则该参数必填。通过配置该文件,关闭融合功能。
推荐配置及收益
无。
示例
配置文件样例如下(文件名举例为fusion_switch.cfg,配置文件详细介绍请参见融合规则配置):
RequantFusionPass:off TbeConvDequantVaddReluQuantFusionPass:off TbeConvDequantQuantFusionPass:off TbePool2dQuantFusionPass:off
将配置好的fusion_switch.cfg文件上传到ATC工具所在服务器任意目录,例如上传到/home/Davinci/,使用示例如下:
--fusion_switch_file=/home/Davinci/fusion_switch.cfg
依赖约束
使用约束:若网络模型中Convolution算子的“group”属性取值==模型文件prototxt中“num_output”属性的取值,则上述配置文件中“RequantFusionPass”必须打开。
--enable_scope_fusion_passes
功能说明
指定编译时需要生效的融合规则列表。
融合规则分类如下:
- 华为提供的内置融合规则:
- General:各网络通用的scope融合规则;默认生效,不支持用户指定失效。
- Non-General:特定网络适用的scope融合规则;默认不生效,用户可以通过--enable_scope_fusion_passes参数指定生效的融合规则列表。
- 用户自定义的融合规则:
- General:加载后默认生效,暂不提供用户指定失效的功能。
- Non-General:加载后默认不生效,用户可以通过--enable_scope_fusion_passes参数指定生效的融合规则列表。
关联参数
无。
参数取值
参数值:注册的融合规则名称。
参数值约束:允许传入多个,中间使用英文逗号分隔,例如ScopePass1,ScopePass2,...。
推荐配置及收益
无。
示例
--enable_scope_fusion_passes=ScopePass1,ScopePass2
依赖约束
使用约束:该参数只适用于TensorFlow网络模型。如果要查看模型转换过程中融合规则相关的日志信息,则--log至少要设置为warning级别。
--enable_small_channel
功能说明
是否使能small channel的优化,使能后在channel<=4的卷积层会有性能收益。
建议用户在推理场景下打开此开关。
关联参数
无。
参数取值
参数值:
- 0:关闭。
- 1:使能。
参数默认值:0
参数值约束:该参数使能后,当前只在Resnet50、Resnet101、Resnet152、GoogleNet网络模型能获得性能收益。其他网络模型性能可能会下降,用户根据实际情况决定是否使能该参数。
推荐配置及收益
无。
示例
--enable_small_channel=1
依赖约束
使用约束:该参数使能后,建议与AIPP参数--insert_op_conf同时使用,否则可能没有收益。
算子调优选项
--precision_mode
功能说明
选择算子精度模式。
关联参数
无。
参数取值
参数值:
- force_fp16:表示算子支持fp16和fp32时,强制选择fp16。
- allow_fp32_to_fp16:如果算子支持fp32,则保留原始精度fp32;如果算子不支持fp32,则选择fp16。
- must_keep_origin_dtype:表示保持原图精度:如果网络模型中存在部分算子,并且该算子实现不支持fp32,比如Conv2D卷积算子,则不能使用该参数。
- allow_mix_precision:表示使用混合精度模式:
若配置了该种模式,则可以在OPP软件包安装路径${install_path}/opp/op_impl/built-in/ai_core/tbe/config/${soc_version}/aic-${soc_version}-ops-info.json文件中查看“precision_reduce”参数的取值:
- 若该参数取值为true,则表示相应算子使用fp16精度。
- 若该参数取值为false,则表示相应算子使用fp32精度。
- 若算子没有配置该参数,则表示跟随前一个算子的精度。
参数默认值:force_fp16
推荐配置及收益
所配置的精度模式不同,网络模型精度以及性能有所不同,具体为:
精度高低排序:must_keep_origin_dtype>allow_fp32_to_fp16>allow_mix_precision>force_fp16
性能优劣排序:force_fp16>=allow_mix_precision>allow_fp32_to_fp16>must_keep_origin_dtype
示例
--precision_mode=force_fp16
依赖约束
无。
--auto_tune_mode
功能说明
设置算子的自动调优模式:控制TBE算子编译时,是否对算子进行调优,以便在昇腾AI处理器上寻找最好的性能配置。
关于auto tune工具的原理,支持调优的算子以及详细使用请参见Auto Tune工具使用指南。
关联参数
无。
参数取值
参数值:
- GA(Genetic Algorithm):遗传算法,用于设置Cube算子的调优性能。
- RL(Reinforcement Learning):强化学习,用于设置Vector算子的调优性能。
参数值格式:支持配置多种模式,多种模式放在双引号中,中间用英文逗号分隔,例如"RL,GA"。
推荐配置及收益
无。
示例
--auto_tune_mode="RL,GA"
- GA调优:
- 内置知识库以及cost model路径:
${install_path}/opp/data/tiling/${soc_version}/built-in/:负责存储常用shape调优后的知识库和cost model,如果网络模型中某个shape没有命中内置知识库,则会发起调优。
- 自定义知识库默认路径:
${install_path}/atc/data/tiling/${soc_version}/custom/:用于存放调优过程中生成的知识库。如果该路径已经有知识库,则对该知识库进行追加;如果当前路径没有知识库,则新建知识库。
该路径为默认路径,用户也可以通过设置“TUNE_BANK_PATH”环境变量,指定调优后自定义知识库的存储路径。
- 内置知识库以及cost model路径:
- RL调优:
- 内置知识库路径:
${install_path}/opp/data/rl/${soc_version}/built-in/:负责存储常用shape调优后的知识库。
- 自定义知识库默认路径:
${install_path}/atc/data/rl/${soc_version}/custom/:用于存放调优过程中调优性能优于built-in或built-in中没有的知识库。
该路径为默认路径,用户也可以通过设置“TUNE_BANK_PATH”环境变量,指定调优后自定义知识库的存储路径。
- 内置知识库路径:
使用约束
- 环境变量设置:使用该功能时,只支持开发环境和运行环境合设的场景,使用该参数进行调优时,需要额外设置如下环境变量:
export LD_LIBRARY_PATH=${install_path}/acllib/lib64:${install_path}/atc/lib64:$LD_LIBRARY_PATH
- 指定调优后自定义知识库的存储路径:可以通过设置如下环境变量实现:
export TUNE_BANK_PATH=$HOME/custom_tune_bank
若配置此环境变量,则:
- GA调优后的策略存储在配置路径的${soc_version}/ga目录下,调优脚本会自动在配置的TUNE_BANK_PATH路径下创建${soc_version}/ga两级目录。
例如TUNE_BANK_PATH=$HOME/custom_tune_bank,则GA调优后的最优策略存入$HOME/custom_tune_bank/${soc_version}/ga目录中。
- RL调优后的策略存储在配置路径的${soc_version}/rl目录下,调优脚本会自动在配置的TUNE_BANK_PATH路径下创建${soc_version}/rl两级目录。
例如TUNE_BANK_PATH=$HOME/custom_tune_bank,则RL调优后的最优策略存入$HOME/custom_tune_bank/${soc_version}/rl目录中。
路径支持绝对路径或相对于执行Auto Tune工具所在路径的相对路径,配置的路径需要为已存在的目录,且执行用户具有读、写、可执行权限。
若调优时指定了自定义知识库路径,后续进行模型转换时,若想直接使用指定的自定义知识库,也需要配置上此环境变量。
例如指定调优后自定义知识库存储路径为$HOME/custom_tune_bank/${soc_version}/ga,则使用ATC工具进行模型转换前需要配置如下环境变量(该场景下用户无需再次开启Auto Tune功能):
export TUNE_BANK_PATH=$HOME/custom_tune_bank
- GA调优后的策略存储在配置路径的${soc_version}/ga目录下,调优脚本会自动在配置的TUNE_BANK_PATH路径下创建${soc_version}/ga两级目录。
- 强制调优:如果custom路径已经有用户调优过的知识库,由于某种原因导致算子逻辑变更,例如GEMM算子新增支持的ND输入,该情况下需要设置如下环境变量后, 重新发起调优。
export REPEAT_TUNE=True
- 指定层调优:使用ATC工具进行Auto Tune在线调优时(基于DUMP数据离线调优不支持该场景),可以通过设置如下环境变量,对指定层进行调优。
export TUNE_OPS_NAME=conv_layers/Pad_1
某些场景下,例如在对网络进行Profiling性能分析后,发现某个算子性能较低,则可以通过设置上述环境变量,对性能较低的算子单独进行调优。
OPS_NAME配置为网络模型中需要调优的节点的name,可配置为原始网络模型中的OP Name或者配置为经过GE/FE处理过的适配昇腾AI处理器的网络模型中的节点的OP Name(此OP Name可从Profiling调优数据中获取,详细可参见 )。若指定多个节点,则使用英文逗号分隔。
如果指定算子已经调优过,即在custom路径已经有调优过的知识库,用户想重新发起该算子的调优,则需要同时设置如下两个环境变量:
export REPEAT_TUNE=True export TUNE_OPS_NAME=conv_layers/Pad_1
- 开启Auto Tune时,由于上板评估需要申请内存,内存占用相比ATC工具要大,额外的内存占用大小与同时使用的device设备数有关,可近似估算为:2*device数量*输入数据大小。如果内存超过ATC运行内存大小,则会导致调优失败。
- 使用Auto Tune工具进行GA模式调优时,需要独占Device资源,不可以进行需要使用Device资源的其他操作,请将其他进程停止后,重新进行调优。如果Host有编译业务执行,则会影响调优时长。
--op_select_implmode
功能说明
选择算子是高精度实现还是高性能实现。
高精度是指在fp16输入的情况下,通过泰勒展开/牛顿迭代等手段进一步提升算子的精度;高性能是指在fp16输入的情况下,不影响网络精度前提的最优性能实现。
关联参数
无。
参数取值
参数值:
- high_precision:表示算子选择高精度实现。
- high_performance:表示算子选择高性能实现。
参数默认值:high_performance
推荐配置及收益
无。
示例
--op_select_implmode=high_precision
依赖约束
使用约束:
--op_select_implmode参数表示设置所有算子的高精度或高性能模式,如果算子实现了高精度和高性能,则运行时选择--op_select_implmode参数指定的模式;如果算子只实现了一种,则按照算子实现的方式运行,例如:
某个算子当前只支持高精度,而--op_select_implmode设置为高性能,则--op_select_implmode参数对于该算子不生效,使用该算子当前实现的高精度方式运行。
--optypelist_for_implmode
功能说明
列举算子optype的列表。
关联参数
该参数需要与--op_select_implmode参数配合使用。
推荐配置及收益
无。
示例
--op_select_implmode=high_precision --optypelist_for_implmode=pooling
依赖约束
无。
--op_debug_level
功能说明
TBE算子编译debug功能开关。
关联参数
无。
参数取值
参数值:
- 0:不开启算子debug功能。
- 1:生成TBE指令映射文件(在执行atc命令当前路径kernel_meta文件夹中生成算子cce文件*.cce和python-cce映射文件*_loc.json),用于后续工具进行AICore Error问题定位。
- 2:生成TBE指令映射文件(在执行atc命令当前路径kernel_meta文件夹中生成算子cce文件*.cce和python-cce映射文件*_loc.json),并关闭编译优化开关(开启ccec编译器-O0-g),用于后续工具进行AICore Error问题定位。
- 3:不开启算子debug功能,在执行atc命令当前路径kernel_meta文件夹中保留.o(算子二进制文件)和.json文件(算子描述文件)。
参数默认值:0
参数值约束:进行模型转换时,建议配置为0或3。如果需要定位AICore Error问题,则需要将参数值设置为1或2。设置为1或2后,由于加入了调试功能,会导致网络性能下降。
推荐配置及收益
无。
示例
--op_debug_level=1
依赖约束
无。
调试选项
--dump_mode
功能说明
是否将原始模型文件转换成带shape信息的json文件。
关联参数
该参数需要与--json、--mode=1、--framework、--om参数(需要为原始模型文件,如果为Caffe框架模型文件,还需要增加--weight参数)配合使用。
参数取值
参数值:
- 0:不使能。
- 1:使能。
参数默认值:0
推荐配置及收益
无。
示例
atc --mode=1 --om=$HOME/test/resnet18.prototxt --json=$HOME/test/out/resnet18.json --framework=0 --weight=$HOME/test/resnet18.caffemodel --dump_mode=1
依赖约束
无。
--log
功能说明
设置ATC模型转换过程中日志的级别。
关联参数
无。
参数取值
参数值:
- debug:输出debug/info/warning/error/event级别的运行信息。
- info:输出info/warning/error/event级别的运行信息。
- warning:输出warning/error/event级别的运行信息。
- error:输出/error/event级别的运行信息。
- null:不输出日志。默认为null。
参数默认值:null
推荐配置及收益
无。
示例
--log=debug
依赖约束
- 如果当前环境没有slog进程,日志默认直接打屏显示,通过设置--log=xx参数可以看到显示相应的日志级别。
- 如果当前环境有slog进程(可使用ps -ef | grep slog命令查看),日志默认生成并记录在日志文件中,如需日志打屏显示,则请在执行atc命令的当前窗口设置如下环境变量,然后再执行atc命令(atc命令中通过设置--log=xx参数显示相应的日志级别)。
export SLOG_PRINT_TO_STDOUT=1