sess.run模式下的session配置

昇腾AI处理器上通过sess.run模式进行训练或在线推理时,支持如下配置项。

如果表中未列出,表示该参数预留或适用于其他昇腾AI处理器版本,用户无需关注。

表1 session配置项

配置项

说明

使用场景

use_off_line

是否在昇腾AI处理器执行训练。

  • True:在昇腾AI处理器执行训练,默认为True。
  • False:在Host侧的CPU执行训练。

配置示例:

custom_op.parameter_map["use_off_line"].b = True

训练/在线推理

enable_data_pre_proc

getnext算子是否下沉到昇腾AI处理器侧执行,getnext算子下沉是使能训练迭代循环下沉的必要条件。

  • True:下沉,getnext算子下沉的前提是必须使用TF Dataset方式读数据。
  • False:不下沉,默认为False
配置示例:
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功能。

  • True:开启Profiling功能,从profiling_options读取Profiling的采集选项。
  • False:关闭Profiling功能,默认关闭。
配置示例:
custom_op.parameter_map["profiling_mode"].b = True

训练/在线推理

profiling_options

Profiling配置选项。

  • output:Profiling采集结果文件保存路径。该参数指定的目录需要在启动训练的环境上(容器或Host侧)提前创建且确保安装时配置的运行用户具有读写权限,支持配置绝对路径或相对路径(相对执行命令行时的当前路径)。
    • 绝对路径配置以“/”开头,例如:/home/HwHiAiUser/output。
    • 相对路径配置直接以目录名开始,例如:output。
  • storage_limit:用于指定Profiling数据文件保存至磁盘时的存储空间上限。当累计存放的Profiling数据文件大小接近参数设置值(<=20MB)或数据存放目录所在磁盘的可用空间即将不足(<=20MB)时,除特定的Profiling数据文件外,最早保存的Profiling数据文件将被删除,以保证新生成的数据文件可以循环覆盖保存。

    单位为MB,参数值配置格式为数值+单位,例如"storage_limit": "200MB",有效取值范围为[200, 4294967296]。

    未配置本参数时,默认取值为Profiling数据文件存放目录所在磁盘可用空间的90%。

  • training_trace:采集迭代轨迹数据,即训练任务及AI软件栈的软件信息,实现对训练任务的性能分析,重点关注数据增强、前后向计算、梯度聚合更新等相关数据。非必选项配置,用户可不配置,当用户配置时必须设为“on”。
  • task_trace:采集任务轨迹数据,即昇腾AI处理器HWTS,分析任务开始、结束等信息。取值on/off。如果将该参数配置为“on”和“off”之外的任意值,则按配置为“off”处理。
  • hccl:控制hccl数据采集开关,可选on或off,默认为off。
  • aicpu:采集aicpu数据增强的Profiling数据。取值on/off。如果将该参数配置为“on”和“off”之外的任意值,则按配置为“off”处理。
  • fp_point:training_trace为on时需要配置。指定训练网络迭代轨迹正向算子的开始位置,用于记录前向计算开始时间戳。配置值为指定的正向第一个算子名字。用户可以在训练脚本中,通过tf.io.write_graph将graph保存成.pbtxt文件,并获取文件中的name名称填入;也可直接配置为空,由系统自动识别正向算子的开始位置,例如"fp_point":""。
  • bp_point:training_trace为on时需要配置。指定训练网络迭代轨迹反向算子的结束位置,记录后向计算结束时间戳,BP_POINT和FP_POINT可以计算出正反向时间。配置值为指定的反向最后一个算子名字。用户可以在训练脚本中,通过tf.io.write_graph将graph保存成.pbtxt文件,并获取文件中的name名称填入;也可直接配置为空,由系统自动识别反向算子的结束位置,例如"bp_point":""。
  • aic_metrics:AICore的硬件信息,取值如下:

    ArithmeticUtilization:各种计算类指标占比统计

    PipeUtilization: 计算单元和搬运单元耗时占比,该项为默认值

    Memory:外部内存读写类指令占比

    MemoryL0:内部内存读写类指令占比

    ResourceConflictRatio:流水线队列类指令占比

  • l2:控制L2采样数据的开关,可选on或off,默认为off。可选参数。
  • msproftx:控制msproftx用户和上层框架程序输出性能数据的开关,可选on或off,默认值为off。

    Profiling开启msproftx功能之前,需要在程序内调用msproftx相关接口来开启程序的Profiling数据流的输出,详细操作请参见应用软件开发指南 (C&C++)“高级功能>Profiling性能数据采集”章节。

  • task_time:控制任务调度耗时以及算子耗时的开关。涉及在ai_stack_time、task_time、op_summary、op_statistic文件中输出相关耗时数据。可选on或off,默认为on。
  • runtime_api:控制runtime api性能数据采集开关,可选on或off,默认为off。可采集runtime-api性能数据,Host与Device之间、Device间的同步异步内存复制时延runtime-api性能数据。
说明:

在线推理支持task_trace和aicpu,不支持training_trace。

配置示例:

custom_op.parameter_map["profiling_options"].s = tf.compat.as_bytes('{"output":"/tmp/profiling","training_trace":"on","fp_point":"","bp_point":""}')

训练/在线推理

enable_dump

是否开启Data Dump功能,默认值:False。

  • True:开启Data Dump功能,从dump_path读取Dump文件保存路径,dump_path为None时会产生异常。
  • False:关闭Data Dump功能。
配置示例:
custom_op.parameter_map["enable_dump"].b = True

训练/在线推理

dump_path

Dump文件保存路径。enable_dump或enable_dump_debug为true时,该参数必须配置。

该参数指定的目录需要在启动训练的环境上(容器或Host侧)提前创建且确保安装时配置的运行用户具有读写权限,支持配置绝对路径或相对路径(相对执行命令行时的当前路径)。

  • 绝对路径配置以“/”开头,例如:/home/HwHiAiUser/output。
  • 相对路径配置直接以目录名开始,例如:output。

配置示例:

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算子输入还是输出数据。取值如下:

  • input:仅Dump算子输入数据
  • output:仅Dump算子输出数据,默认为output。
  • all:Dump算子输入和输出数据

配置示例:

custom_op.parameter_map["dump_mode"].s = tf.compat.as_bytes("all") 

训练/在线推理

dump_data

指定算子dump内容类型,取值:

  • tensor: dump算子数据,默认为tensor。
  • stats: dump算子统计数据,结果文件为csv格式。

大规模训练场景下,通常dump数据量太大并且耗时长,可以先dump所有算子的统计数据,根据统计数据识别可能异常的算子,然后再指定dump异常算子的input或output数据。

配置示例:

custom_op.parameter_map["dump_data"].s = tf.compat.as_bytes("stats") 

训练/在线推理

dump_layer

指定需要dump的算子。取值为算子名,多个算子名之间使用空格分隔。若不配置此字段,默认dump全部算子。

配置示例:

custom_op.parameter_map["dump_layer"].s = tf.compat.as_bytes("layer1 layer2 layer3") 

训练/在线推理

enable_dump_debug

是否开启溢出检测功能,默认值:False。

  • True:开启溢出检测功能,从dump_path读取Dump文件保存路径,dump_path为None时会产生异常。
  • False:关闭溢出检测功能。

配置示例:

custom_op.parameter_map["enable_dump_debug"].b = True

训练

dump_debug_mode

溢出检测模式,取值如下:

  • aicore_overflow:AI Core算子溢出检测,检测在算子输入数据正常的情况下,输出是否不正常的极大值(如float16下65500,38400,51200这些值)。一旦检测出这类问题,需要根据网络实际需求和算子逻辑来分析溢出原因并修改算子实现。
  • atomic_overflow:Atomic Add溢出检测,即除了AICore之外,还有其他涉及浮点计算的模块,比如SDMA,检测这些部分出现的溢出问题。
  • all:同时进行AI Core算子溢出检测和Atomic Add溢出检测。

配置示例:

custom_op.parameter_map["dump_debug_mode"].s = tf.compat.as_bytes("all") 

训练

precision_mode

算子精度模式,配置要求为string类型。

  • allow_fp32_to_fp16或None:算子不支持float32类型时,直接选择float16。训练场景下,默认选择此种模式。
  • force_fp16:算子既支持float16又支持float32数据类型时,强制选择float16。在线推理场景下,默认选择此种模式。
  • force_fp32:算子既支持float16又支持float32数据类型时,强制选择float32。
  • must_keep_origin_dtype:保持原图精度。
  • allow_mix_precision:开启自动混合精度功能,针对全网中float32数据类型的算子,系统会按照内置优化策略自动将部分float32的算子降低精度到float16,从而在精度损失很小的情况下提升系统性能并减少内存使用。开启该功能开关后,用户可以同时使能Loss Scaling,从而补偿降低精度带来的精度损失。

配置示例:

custom_op.parameter_map["precision_mode"].s = tf.compat.as_bytes("allow_mix_precision")

训练/在线推理

variable_format_optimize

是否开启变量格式优化。

  • True:开启,默认开启。
  • False:关闭。

为了提高训练效率,在网络执行的变量初始化过程中,将变量转换成更适合在昇腾AI处理器上运行的数据格式,例如进行NCHW到NC1HWC0的数据格式转换。但在用户特殊要求场景下,可以选择关闭该功能开关。

配置示例:

custom_op.parameter_map["variable_format_optimize"].b =  True

训练

mix_compile_mode

是否开启混合计算模式。

  • True:开启。
  • False:关闭,默认关闭。

计算全下沉模式即所有的计算类算子全部在Device侧执行,混合计算模式作为计算全下沉模式的补充,将部分不可离线编译下沉执行的算子留在前端框架中在线执行,提升昇腾AI处理器支持Tensorflow的适配灵活性。

配置示例:

custom_op.parameter_map["mix_compile_mode"].b =  True

训练/在线推理

hcom_parallel

是否启用Allreduce梯度更新和前后向并行执行。

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

默认值为“True”,配置示例:

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处理器上寻找最好的性能配置。

若未配置该参数,则自动关闭自动调优功能。

须知:

昇腾AI软件栈提供了功能更强大、调优效率更高的AOE(Ascend Optimization Engine)自动调优工具,涵盖了Auto Tune的算子自动化调优功能,并同步提供了子图调优、梯度调优等功能。

Auto Tune工具在后续版本中会过期,建议用户使用AOE自动调优工具,详细使用方法可参见AOE工具使用指南

关于Auto Tune工具的介绍和使用方法请参见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_AICPU为AICPU引擎名称,本示例指定了AICPU引擎的并发数为10;

AIcoreEngine为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_AICPU:10,AIcoreEngine:1")

训练/在线推理

is_tailing_optimization

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

  • True:开启通信拖尾优化。
  • False:不开启通信拖尾优化,默认为False。

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

配置示例:

custom_op.parameter_map["is_tailing_optimization"].b = True

训练

graph_run_mode

图执行模式,取值:

  • 0:在线推理场景下,请配置为0。
  • 1:训练场景下,请配置为1,默认为1。

配置示例:

custom_op.parameter_map["graph_run_mode"].i = 1

训练/在线推理

op_debug_level

算子debug功能开关,取值:

  • 0:不开启算子debug功能,默认为0。
  • 1:开启算子debug功能,在训练脚本执行目录下的kernel_meta文件夹中生成TBE指令映射文件(算子cce文件*.cce、python-cce映射文件*_loc.json、.o和.json文件),用于后续工具进行AICore Error问题定位。
  • 2:开启算子debug功能,在训练脚本执行目录下的kernel_meta文件夹中生成TBE指令映射文件(算子cce文件*.cce、python-cce映射文件*_loc.json、.o和.json文件),并关闭ccec编译器的编译优化开关且打开ccec调试功能(ccec编译器选项设置为-O0-g),用于后续工具进行AICore Error问题定位。
  • 3:不开启算子debug功能,且在训练脚本执行目录下的kernel_meta文件夹中保留.o和.json文件。
  • 4:不开启算子debug功能,在训练脚本执行目录下的kernel_meta文件夹中保留.o(算子二进制文件)和.json文件(算子描述文件),生成TBE指令映射文件(算子cce文件*.cce)和UB融合计算描述文件({$kernel_name}_compute.json)。
    须知:

    训练执行时,建议配置为0或3。如果需要进行问题定位,再选择调试开关选项1和2,是因为加入了调试功能后,会导致网络性能下降。

配置示例:

custom_op.parameter_map["op_debug_level"].i = 0

训练/在线推理

op_debug_config

Global Memory内存检测功能开关。

取值为.cfg配置文件路径,配置文件内多个选项用英文逗号分隔:

  • oom:在算子执行过程中,检测Global Memory是否内存越界
  • dump_bin:算子编译时,在当前执行路径下的kernel_meta文件夹中保留.o和.json文件
  • dump_cce:算子编译时,在当前执行路径下的kernel_meta文件夹中保留算子cce文件*.cce
  • dump_loc:算子编译时,在当前执行路径下的kernel_meta文件夹中保留python-cce映射文件*_loc.json
  • ccec_O0:算子编译时,开启ccec编译器选项-O0
  • ccec_g :算子编译时,开启ccec编译器选项-g

配置示例:

custom_op.parameter_map["op_debug_config"].s = tf.compat.as_bytes("/root/test0.cfg")

其中,test0.cfg文件信息为:

op_debug_config = ccec_O0,ccec_g,oom

训练/在线推理

enable_scope_fusion_passes

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

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

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

配置示例:

custom_op.parameter_map["enable_scope_fusion_passes"].s = tf.compat.as_bytes("ScopeLayerNormPass,ScopeClipBoxesPass")

训练/在线推理

enable_exception_dump

是否dump异常算子的输入和输出数据。

  • 0:关闭,默认为0。
  • 1:开启,用户可常开,不影响性能。
配置示例:
custom_op.parameter_map["enable_exception_dump"].i = 1

训练

op_select_implmode

昇腾AI处理器部分内置算子有高精度和高性能实现方式,用户可以通过该参数配置模型编译时选择哪种算子。取值包括:

  • high_precision:表示算子选择高精度实现。高精度实现算子是指在fp16输入的情况下,通过泰勒展开/牛顿迭代等手段进一步提升算子的精度。
  • high_performance:表示算子选择高性能实现。高性能实现算子是指在fp16输入的情况下,不影响网络精度前提的最优性能实现。默认为high_performance。

配置示例:

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设置动态档位参数。

配置注意事项:

  • 如果网络即有dataset输入也有placeholder输入,由于当前仅支持一种输入为动态的场景(例如dataset输入为动态),此时仅需填写dataset所有输入的shape信息。
  • 如果输入中包含标量,则需要填写为0。

在线推理

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为:

  • 第0档:data(1,1,40,20),label(1,20),mask(1,1)
  • 第1档:data(1,1,40,40),label(1,40),mask(2,2)
  • 第2档:data(1,1,40,80),label(1,60),mask(4,4)

在线推理

dynamic_node_type

指定动态输入的节点类型。

  • 0:dataset输入为动态输入。
  • 1:placeholder输入为动态输入。

当前不支持dataset和placeholder输入同时为动态输入。

配置示例:
custom_op.parameter_map["dynamic_node_type"].i = 0

在线推理

aoe_mode

通过AOE工具进行调优的调优模式。

  • 1:子图调优。
  • 2:算子调优。
  • 4:梯度切分调优。

    在数据并行的场景下,使用allreduce对梯度进行聚合,梯度的切分方式与分布式训练性能强相关,切分不合理会导致反向计算结束后存在较长的通信拖尾时间,影响集群训练的性能和线性度。用户可以通过集合通信的梯度切分接口(set_split_strategy_by_idx或set_split_strategy_by_size)进行人工调优,但难度较高。因此,可以通过工具实现自动化搜索切分策略,通过在实际环境预跑采集性能数据,搜索不同的切分策略,理论评估出最优策略输出给用户,用户拿到最优策略后通过set_split_strategy_by_idx接口设置到该网络中。

说明:

通过修改训练脚本和AOE_MODE环境变量都可配置调优模式,同时配置的情况下,通过修改训练脚本方式优先生效。

配置示例:

custom_op.parameter_map["aoe_mode"].s = tf.compat.as_bytes("2")

训练

work_path

AOE工具调优工作目录,存放调优配置文件和调优结果文件,默认生成在训练当前目录下。

该参数类型为字符串,指定的目录需要在启动训练的环境上(容器或Host侧)提前创建且确保安装时配置的运行用户具有读写权限,支持配置绝对路径或相对路径(相对执行命令行时的当前路径)。

  • 绝对路径配置以“/”开头,例如:/home/HwHiAiUser/output。
  • 相对路径配置直接以目录名开始,例如:output。

配置示例:

custom_op.parameter_map["work_path"].s = tf.compat.as_bytes("/home/HwHiAiUser/output")

训练

distribute_config

当前版本暂不支持。

训练

buffer_optimize

是否开启buffer优化。

  • l2_optimize:表示开启buffer优化,默认为l2_optimize。
  • off_optimize:表示关闭buffer优化。

配置示例:

custom_op.parameter_map["buffer_optimize"].s = tf.compat.as_bytes("l2_optimize")

在线推理

enable_small_channel

是否使能small channel的优化,使能后在channel<=4的卷积层会有性能收益。

  • 0:关闭。训练(graph_run_mode为1)场景下默认关闭,且训练场景下不建议用户开启。
  • 1:使能。在线推理(graph_run_mode为0)场景下默认开启。
    说明:

    该参数使能后,当前只在Resnet50、Resnet101、Resnet152、GoogleNet网络模型能获得性能收益。其他网络模型性能可能会下降,用户根据实际情况决定是否使能该参数。

配置示例:

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"
         }
    }
}

需要注意的是:

  1. 由于关闭某些融合规则可能会导致功能问题,因此此处的一键式关闭仅关闭系统部分融合规则,而不是全部融合规则。
  2. 一键式关闭融合规则时,可以同时开启部分融合规则:
    {
        "Switch":{
            "GraphFusion":{
                "ALL":"off",
                "SoftmaxFusionPass":"on"
            },
            "UBFusion":{
                "ALL":"off",
                "TbePool2dQuantFusionPass":"on"
            }
        }
    }

配置示例:

custom_op.parameter_map["fusion_switch_file"].s = tf.compat.as_bytes("/home/test/fusion_switch.cfg")

训练/在线推理

enable_compress_weight

使能全局weight压缩。

AICore支持Weight压缩功能,通过该参数,可以对Weight进行数据压缩,在进行算子计算时,对Weight进行解压缩,从而达到减少带宽、提高性能的目的。

该参数不能与compress_weight_conf同时使用。

  • True:表示使能。
  • False:表示关闭。默认为False。

配置示例:

custom_op.parameter_map["enable_compress_weight"].b = True

在线推理

compress_weight_conf

要压缩的node节点列表配置文件路径以及文件名。node节点主要为conv算子、fc算子。

格式要求:支持大小写字母(a-z,A-Z)、数字(0-9)、下划线(_)、中划线(-)、句点(.)、中文字符。

该参数不能与enable_compress_weight参数同时使用。

weight压缩配置文件中的算子列表由昇腾模型压缩工具输出(输出路径为非均匀量化结果路径下记录非均匀量化层名的文件,例如:module/results/calibration_results/module_nuq_layer_record.txt),文件内容即为node名称列表,

配置文件compress_weight_nodes.cfg样例如下所示,node名称之间以“;”间隔开。

conv1;fc1;conv2_2/x1;fc2;conv5_32/x2;fc6

配置示例:

custom_op.parameter_map["compress_weight_conf"].s = tf.compat.as_bytes("/home/test/compress_weight_nodes.cfg")

在线推理

op_compiler_cache_mode

用于配置算子编译磁盘缓存模式。

  • enable:表示启用算子编译缓存。启用后可以避免针对相同编译参数及算子参数的算子重复编译,从而提升编译速度。默认为enable。
  • disable:表示禁用算子编译缓存。
  • force:表示强制刷新缓存,即先删除已有缓存,再重新编译并加入缓存。当用户的python或者依赖库等发生变化时,需要指定为force用于清理已有的缓存。

使用说明:

  • 该参数和op_compiler_cache_dir配合使用,且只有op_debug_level为0或3的情况下才能启用缓存功能。
  • 由于force选项会先删除已有缓存,所以不建议在程序并行编译时设置,否则可能会导致其他模型使用的缓存内容被清除而导致失败。
  • 建议模型最终发布时设置编译缓存选项为disable或者force。
  • 如果算子调优后知识库变更,则需要先通过设置force来清空缓存,然后再设置为enable重新进行编译,以便应用新的调优知识库。

配置示例:

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

当前网络的输入是否为动态输入,取值包括:

  • True:动态输入。
  • False:固定输入,默认False。

配置示例:

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]")

使用注意事项:

  • dataset输入固定标识为“getnext”,placeholder输入固定标识为“data”,不允许用其他表示。
  • 动态维度有shape范围的用波浪号“~”表示,固定维度用固定数字表示,无限定范围的用-1表示。
  • 对于多输入场景,例如有三个dataset输入时,如果只有第二个第三个输入具有shape范围,第一个输入为固定输入时,仍需要将固定输入shape填入:
    custom_op.parameter_map["dynamic_inputs_shape_range"].s = tf.compat.as_bytes("getnext:[3,3,4,10],[-1,3,2~1000,-1],[-1,-1,-1,-1]")
  • 对于标量输入,也需要填入shape范围,表示方法为:[]。
    须知:

    当存在不同输入shape的子图时,由于dynamic_inputs_shape_range是针对于单张图的配置属性,因此可能会导致执行异常,建议使用set_graph_exec_config以支持动态输入场景。

训练/在线推理

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处理器,取值:

  • True:下沉,默认为True。
  • False:不下沉。

配置示例:

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"
},
  • true:(白名单)允许将当前float32类型的算子,降低精度到float16。
  • false:(黑名单)不允许将当前float32类型的算子,降低精度到float16。
  • 不配置:(灰名单)当前算子的混合精度处理机制和前一个算子保持一致,即如果前一个算子支持降精度处理,当前算子也支持降精度;如果前一个算子不允许降精度,当前算子也不支持降精度。

训练/在线推理

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

算子执行超时时间,单位为s。

配置示例:

custom_op.parameter_map["op_execute_timeout"].i = 90

训练

customize_dtypes

通过该参数自定义模型编译时算子的计算精度,模型中其他算子以precision_mode指定的精度模式进行编译。该参数需要配置为配置文件路径及文件名,例如:/home/test/customize_dtypes.cfg。

配置示例:

custom_op.parameter_map["customize_dtypes"].s = tf.compat.as_bytes("/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
说明:
  • 算子具体支持的计算精度可以从算子信息库中查看,默认存储路径为CANN软件安装后文件存储路径的:opp/op_impl/custom/ai_core/tbe/config/${soc_version}/aic-${soc_version}-ops-info.json。
  • 通过该参数指定的优先级高,因此可能会导致精度/性能的下降;如果指定的dtype不支持,会导致编译失败。

在线推理/训练

jit_compile

当前版本暂不支持。

训练/在线推理

atomic_clean_policy

是否集中清理网络中所有atomic算子占用的内存,取值包括:

  • 0:集中清理,默认为0。
  • 1:不集中清理,对网络每一个atomic算子进行单独清零。当网络中内存超限时,可尝试此种清理方式,但可能会导致一定的性能损耗。

配置示例:

custom_op.parameter_map["atomic_clean_policy"].i = 1

训练/在线推理

static_memory_policy

网络运行是否使用内存静态分配方式。

0:不开启内存静态分配方式,采用默认的动态分配方式,默认是0。

1:开启内存静态分配方式。

配置示例:

custom_op.parameter_map["static_memory_policy"].i = 1

训练/在线推理

调用示例

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)