NPURunConfig配置参数说明

基础功能

参数名

描述

graph_run_mode

图执行模式,取值:

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

配置示例:

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

是否开启确定性计算,开启确定性开关后,算子在相同的硬件和输入下,多次执行将产生相同的输出。

此配置项有以下两种取值:

  • 0:默认值,不开启确定性计算。
  • 1:开启确定性计算

默认情况下,无需开启确定性计算。因为开启确定性计算后,算子执行时间会变慢,导致性能下降。在不开启确定性计算的场景下,多次执行的结果可能不同。这个差异的来源,一般是因为在算子实现中,存在异步的多线程执行,会导致浮点数累加的顺序变化。

但当发现模型执行多次结果不同,或者精度调优时,可以通过此配置开启确定性计算辅助进行调试调优。需要注意,如果希望有完全确定的结果,在训练脚本中需要设置确定的随机数种子,保证程序中产生的随机数也都是确定的。

配置示例:

config = NPURunConfig(deterministic=1)

内存管理

参数名

描述

memory_config

用于配置系统内存使用方式,用户在创建NPURunConfig之前,可以实例化一个MemoryConfig类进行功能配置。MemoryConfig类的构造函数,请参见MemoryConfig构造函数

external_weight

若网络中的weight占用内存较大,且模型加载环境内存受限时,建议通过此配置项将网络中Const/Constant节点的权重外置,防止由于内存不足导致模型编译加载出错。

  • False:权重不外置,保存在图中,默认为False。
  • True:权重外置,将网络中所有Const/Constant节点的权重落盘至临时目录“tmp_weight”下,并将其类型转换为FileConstant;模型卸载时,自动卸载“tmp_weight”目录下的权重文件。

说明:一般场景下不需要配置此参数,针对模型加载环境有内存限制的场景,可以将权重外置。

配置示例:
config = NPURunConfig(external_weight=True)

混合计算

参数名

描述

mix_compile_mode

是否开启混合计算模式。

  • True:开启混合计算模式。
  • False:关闭混合计算模式(默认),即为全下沉模式。

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

配置示例:

config = NPURunConfig(mix_compile_mode=True)

功能调试

参数名

描述

enable_exception_dump

是否Dump异常算子的输入和输出信息,dump信息生成在当前脚本执行目录。

  • 0:关闭,默认为0。
  • 1:开启。

配置示例:

config = NPURunConfig(enable_exception_dump=1)

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,此编译选项相对于-O0,会生成优化调试信息

配置示例:

config = NPURunConfig(op_debug_config="/root/test0.cfg") 

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

op_debug_config = ccec_O0,ccec_g,oom
说明:
  • 开启ccec编译选项的场景下(即ccec_O0、ccec_g选项),会增大算子Kernel(*.o文件)的大小。动态shape场景下,由于算子编译时会遍历可能存在的所有场景,最终可能会导致由于算子Kernel文件过大而无法进行编译的情况,此种场景下,建议不要开启ccec编译选项。

    由于算子kernel文件过大而无法编译的日志显示如下:

    message:link error ld.lld: error: InputSection too large for range extension thunk ./kernel_meta_xxxxx.o:(xxxx)
  • 此参数取值为“dump_bin”、“dump_cce”、“dump_loc”时,可通过“debug_dir”参数指定调试相关过程文件的存放路径。

debug_dir

用于配置保存算子编译生成的调试相关的过程文件的路径,包括算子.o/.json/.cce等文件。

默认生成在当前脚本执行路径下。

配置示例:
config = NPURunConfig(debug_dir="/home/test")

精度调优

参数名

描述

precision_mode

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

  • allow_fp32_to_fp16:对于矩阵类算子,使用float16;对于矢量类算子,优先保持原图精度,如果网络模型中算子支持float32,则保留原始精度float32,如果网络模型中算子不支持float32,则直接降低精度到float16。
  • force_fp16:算子既支持float16又支持float32数据类型时,强制选择float16。
  • cube_fp16in_fp32out/force_fp32:算子既支持float16又支持float32数据类型时,系统内部根据算子类型的不同,选择合适的处理方式。配置为force_fp32或cube_fp16in_fp32out,效果等同,cube_fp16in_fp32out为新版本中新增配置,对于矩阵计算类算子,该选项语义更清晰。
    • 对于矩阵计算类算子,系统内部会按算子实现的支持情况处理:
      1. 优先选择输入数据类型为float16且输出数据类型为float32。
      2. 如果1中的场景不支持,则选择输入数据类型为float32且输出数据类型为float32。
      3. 如果2中的场景不支持,则选择输入数据类型为float16且输出数据类型为float16。
      4. 如果以上场景都不支持,则报错。
    • 对于矢量计算类算子,如果网络模型中算子同时支持float16和float32,强制选择float32,若原图精度为float16,也会强制转为float32。如果网络模型中存在部分算子,并且该算子实现不支持float32,比如某算子仅支持float16类型,则该参数不生效,仍然使用支持的float16;如果该算子不支持float32,且又配置了混合精度黑名单(precision_reduce = false),则会使用float32的AI CPU算子。
  • must_keep_origin_dtype:保持原图精度。如果原图中某算子精度为float16,但NPU中该算子实现不支持float16、仅支持float32,则系统内部自动采用高精度float32;如果原图中某算子精度为float32,但NPU中该算子实现不支持float32、仅支持float16,此场景下不能使用此参数值,系统不支持使用低精度。
  • allow_mix_precision_fp16/allow_mix_precision:开启自动混合精度功能,表示混合使用float16和float32数据类型来处理神经网络的过程。

    配置为allow_mix_precision或allow_mix_precision_fp16,效果等同,其中allow_mix_precision_fp16为新版本中新增配置,语义更清晰,便于理解。针对全网中float32数据类型的算子,系统会按照内置优化策略自动将部分float32的算子降低精度到float16,从而在精度损失很小的情况下提升系统性能并减少内存使用。开启该功能开关后,用户可以同时使能Loss Scaling,从而补偿降低精度带来的精度损失。

针对Atlas 训练系列产品,默认配置项为“allow_fp32_to_fp16”。

针对Atlas A2训练系列产品,默认配置项为“must_keep_origin_dtype”。

开启自动混合精度的场景下,用户可参考修改混合精度黑白灰名单修改网络中某算子的精度转换规则。

配置示例:

config = NPURunConfig(precision_mode="allow_mix_precision")
说明:
  • 该参数不能与“precision_mode_v2”参数同时使用,建议使用“precision_mode_v2”参数。
  • 在使用此参数设置整个网络的精度模式时,可能会存在个别算子存在精度问题,此种场景下,建议通过keep_dtype_scope接口设置某些算子保持原图精度。

precision_mode_v2

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

  • fp16:算子既支持float16又支持float32数据类型时,强制选择float16。
  • origin:保持原图精度。如果原图中某算子精度为float16,但NPU中该算子实现不支持float16、仅支持float32,则系统内部自动采用高精度float32;如果原图中某算子精度为float32,但NPU中该算子实现不支持float32、仅支持float16,此场景下不能使用此参数值,系统不支持使用低精度。
  • cube_fp16in_fp32out:算子既支持float16又支持float32数据类型时,系统内部根据算子类型的不同,选择合适的处理方式。
    • 对于矩阵计算类算子,系统内部会按算子实现的支持情况处理:
      1. 优先选择输入数据类型为float16且输出数据类型为float32。
      2. 如果1中的场景不支持,则选择输入数据类型为float32且输出数据类型为float32。
      3. 如果2中的场景不支持,则选择输入数据类型为float16且输出数据类型为float16。
      4. 如果以上场景都不支持,则报错。
    • 对于矢量计算类算子,如果网络模型中算子同时支持float16和float32,强制选择float32,若原图精度为float16,也会强制转为float32。如果网络模型中存在部分算子,并且该算子实现不支持float32,比如某算子仅支持float16类型,则该参数不生效,仍然使用支持的float16;如果该算子不支持float32,且又配置了混合精度黑名单(precision_reduce = false),则会使用float32的AI CPU算子。
  • mixed_float16:开启自动混合精度功能,表示混合使用float16和float32数据类型来处理神经网络的过程。

    针对网络中float32数据类型的算子,系统会按照内置优化策略自动将部分float32的算子降低精度到float16,从而在精度损失很小的情况下提升系统性能并减少内存使用。开启该功能开关后,用户可以同时使能Loss Scaling,从而补偿降低精度带来的精度损失。

针对Atlas 训练系列产品,该配置项无默认取值,以“precision_mode”参数的默认值为准,即“allow_fp32_to_fp16”。

针对Atlas A2训练系列产品,该配置项默认值为“origin”。

开启自动混合精度的场景下,用户可参考修改混合精度黑白灰名单修改网络中某算子的精度转换规则。

配置示例:

config = NPURunConfig(precision_mode_v2="origin")
说明:
  • 该参数不能与“precision_mode”参数同时使用,建议使用“precision_mode_v2”参数。
  • 在使用此参数设置整个网络的精度模式时,可能会存在个别算子存在精度问题,此种场景下,建议通过keep_dtype_scope接口设置某些算子保持原图精度。

modify_mixlist

开启混合精度的场景下,开发者可通过此参数指定混合精度黑白灰名单的路径以及文件名,自行指定哪些算子允许降精度,哪些算子不允许降精度。

用户可以在脚本中通过配置“precision_mode”参数或者“precision_mode_v2”参数开启混合精度。例如:
  • precision_mode参数配置为allow_mix_precision_fp16/allow_mix_precision。
  • precision_mode_v2参数配置为mixed_float16。
说明:

“precision_mode”参数与precision_mode_v2参数不能同时使用,建议使用“precision_mode_v2”参数。

黑白灰名单存储文件为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"
     ]
  }
}

说明:上述配置文件样例中展示的算子仅作为参考,请基于实际硬件环境和具体的算子内置优化策略进行配置。

混合精度场景下算子的内置优化策略可在“OPP安装目录/opp/built-in/op_impl/ai_core/tbe/config/<soc_version>/aic-<soc_version>-ops-info.json”文件中查询,例如:

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

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
说明:
  • 算子具体支持的计算精度可以从算子信息库中查看,默认存储路径为CANN软件安装后文件存储路径的:opp/built-in/op_impl/ai_core/tbe/config/${soc_version}/aic-${soc_version}-ops-info.json。
  • 通过该参数指定的优先级高,因此可能会导致精度/性能的下降,如果指定的dtype不支持,会导致编译失败。
  • 若通过算子名称进行配置,由于模型编译过程中会进行融合、拆分等优化操作,可能会导致算子名称发生变化,进而导致配置不生效,未达到精度提升的目的。此种场景下,可进一步通过获取日志进行问题定位,关于日志的详细说明请参见日志参考

精度比对

参数名

描述

dump_config

dump开关,用户在创建NPURunConfig之前,可以实例化一个DumpConfig类进行dump的配置。DumpConfig类的构造函数,请参见DumpConfig构造函数

配置示例:

config = NPURunConfig(dump_config=dump_config)

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

需要注意的是:

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

buffer_optimize

当前版本暂不支持。

性能调优

Profiling

参数名

描述

profiling_config

profiling开关,用户在创建NPURunConfig之前,可以实例化一个ProfilingConfig类进行profiling的配置。ProfilingConfig类的构造函数,请参见ProfilingConfig构造函数

配置示例:

config = NPURunConfig(profiling_config=profiling_config)

AOE

参数名

描述

aoe_mode

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

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

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

说明:

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

配置示例:

config = NPURunConfig(aoe_mode=2)

work_path

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

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

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

配置示例:

config = NPURunConfig(work_path="/home/HwHiAiUser/output")

aoe_config_file

通过AOE工具进行调优时,若仅针对网络中某些性能较低的算子进行调优,可通过此参数进行设置。该参数配置为包含算子信息的配置文件路径及文件名,例如:/home/test/cfg/tuning_config.cfg。

配置示例:

config = NPURunConfig(aoe_config_file="/home/test/cfg/tuning_config.cfg")

配置文件中配置的是需要进行调优的算子信息,文件内容格式如下:

{
       "tune_ops_name":["bert/embeddings/addbert/embeddings/add_1","loss/MatMul"],
       "tune_ops_type":["Add", "Mul"]
       "tune_optimization_level":"O1",
       "feature":["deeper_opat"]
}
  • tune_ops_name:指定的算子名称,当前实现是支持全字匹配,可以指定一个,也可以指定多个,指定多个时需要用英文逗号分隔。此处配置的算子名称需要为经过图编译器处理过的网络模型的节点名称,可从Profiling调优数据中获取,详细可参见性能分析工具使用指南
  • tune_ops_type:指定的算子类型,当前实现是支持全字匹配,可以指定一个,也可以指定多个,指定多个时需要用英文逗号分隔。如果有融合算子包括了该算子类型,则该融合算子也会被调优。
  • tune_optimization_level:调优模式,取值为O1表示高性能调优模式,取值为O2表示正常模式。默认值为O2。
  • feature:调优功能特性开关,可以取值为deeper_opat或者nonhomo_split,取值为deeper_opat时,表示开启算子深度调优,aoe_mode需要配置为2;取值为nonhomo_split时,表示开启子图非均匀切分,aoe_mode需要配置为1。
说明:

如上配置文件中,tune_ops_type和tune_ops_name可以同时存在,同时存在时取并集,也可以只存在某一个。

算子编译

参数名

描述

op_compiler_cache_mode

用于配置算子编译磁盘缓存模式。默认值为enable。

  • enable:启用算子编译缓存功能。启用后,算子编译信息缓存至磁盘,相同编译参数的算子无需重复编译,直接使用缓存内容,从而提升编译速度。
  • disable:禁用算子编译缓存功能。
  • force:启用算子编译缓存功能,区别于enable模式,force模式下会强制刷新缓存,即先删除已有缓存,再重新编译并加入缓存。比如当用户的python或者依赖库等发生变化时,需要指定为force用于清理已有的缓存。
    说明:

    配置为force模式完成编译后,建议后续编译修改为enable模式,以避免每次编译时都强制刷新缓存。

使用说明:

  • 该参数和op_compiler_cache_dir配合使用。
  • 由于force选项会先删除已有缓存,所以不建议在程序并行编译时设置,否则可能会导致其他模型因使用的缓存内容被清除而编译失败。
  • 建议模型最终发布时设置编译缓存选项为disable或者force。
  • 如果算子调优后知识库变更,则需要通过设置为force来刷新缓存,否则无法应用新的调优知识库,从而导致调优应用执行失败。
  • 注意,调试开关打开的场景下,即op_debug_level非0值或者op_debug_config配置非空时,会忽略算子编译磁盘缓存模式的配置,不启用算子编译缓存。主要基于以下两点考虑:
    • 启用算子编译缓存功能(enable或force模式)后,相同编译参数的算子无需重复编译,编译过程日志无法完整记录。
    • 受限于缓存空间大小,对调试场景的编译结果不做缓存。
  • 启用算子编译缓存功能时,可以通过以下方式来配置来设置缓存文件夹的磁盘空间大小:
    1. 通过配置文件op_cache.ini设置。

      算子编译完成后,会在op_compiler_cache_dir指定的目录下自动生成op_cache.ini文件,开发者可通过该配置文件进行缓存磁盘空间大小的配置。若op_cache.ini文件不存在,可手动创建。

      在“op_cache.ini”文件中,增加如下信息:

      #配置文件格式,必须包含,自动生成的文件中默认包括如下信息,手动创建时,需要输入
      [op_compiler_cache]
      #限制某个芯片下缓存文件夹的磁盘空间的大小,单位为MB
      ascend_max_op_cache_size=500
      #设置需要保留缓存的空间大小比例,取值范围:[1,100],单位为百分比;例如80表示缓存空间不足时,删除缓存,保留80%
      ascend_remain_cache_size_ratio=80    
      • 上述文件中的ascend_max_op_cache_size和ascend_remain_cache_size_ratio参数取值都有效时,op_cache.ini文件才会生效。
      • 若多个使用者使用相同的缓存路径,该配置文件会影响所有使用者。
    2. 通过环境变量ASCEND_MAX_OP_CACHE_SIZE设置。

      开发者可以通过环境变量ASCEND_MAX_OP_CACHE_SIZE来限制某个芯片下缓存文件夹的磁盘空间的大小,当编译缓存空间大小达到ASCEND_MAX_OP_CACHE_SIZE设置的取值,且需要删除旧的kernel文件时,可以通过环境变量ASCEND_REMAIN_CACHE_SIZE_RATIO设置需要保留缓存的空间大小比例。

    若同时配置了op_cache.ini文件和环境变量,则优先读取op_cache.ini文件中的配置项,若op_cache.ini文件和环境变量都未设置,则读取系统默认值:默认磁盘空间大小500M,默认保留缓存的空间50%。

配置示例:
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")

数据增强

参数名

描述

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,默认值1800s。

当默认时长不满足需求时(例如出现通信失败的错误),可通过此配置项延长超时时间。

  • 针对Atlas 训练系列产品,单位为s,取值范围为:(0, 17340],默认值为1800。

    需要注意:针对Atlas 训练系列产品,系统实际设置的超时时间 = 环境变量的取值先整除“68”,然后再乘以“68”,单位s。如果环境变量的取值小于68,则默认按照68s进行处理。

    例如,假设HCCL_EXEC_TIMEOUT = 600,则系统实际设置的超时时间为:600整除68乘以68 = 8*68 = 544s。

  • 针对Atlas A2训练系列产品,单位为s,取值范围为:[0, 2147483647],默认值为1800,当配置为0时代表永不超时。

配置示例:

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)

量化压缩

参数名

描述

enable_compress_weight

当前版本暂不支持。

compress_weight_conf

当前版本暂不支持。

实验参数

参数名

描述

jit_compile

模型编译时,选择是优先在线编译算子,还是优先使用已编译好的算子二进制文件。

  • auto:针对静态shape网络,在线编译算子;针对动态shape网络,优先查找系统中已编译好的算子二进制,如果查找不到对应的二进制,再编译算子。
  • true:在线编译算子,系统根据得到的图信息进行融合及优化,从而编译出运行性能更优的算子。
  • false:优先查找系统中已编译好的算子二进制文件,如果能查找到,则不再编译算子,编译性能更优;如果查找不到,则再编译算子。

默认值:auto。

配置示例:

config = NPURunConfig(jit_compile="auto")

后续版本废弃配置

如下配置在后续版本即将废弃,请不要使用如下配置。

参数名

描述

enable_data_pre_proc

性能调优相关配置。

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

  • True:下沉,默认为True。getnext算子下沉的前提是必须使用TensorFlow Dataset方式读数据。
  • False:不下沉。

配置示例:

config = NPURunConfig(enable_data_pre_proc=True)

variable_format_optimize

性能调优相关配置。

是否开启变量格式优化。

  • True:开启。
  • False:关闭。

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

默认值为空,代表不使能此配置。

配置示例:

config = NPURunConfig(variable_format_optimize=True)

op_debug_level

算子debug功能开关,取值:

  • 0:不开启算子debug功能。
  • 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,是因为加入了调试功能会导致网络性能下降。
    • 配置为2,即开启ccec编译选项的场景下,会增大算子Kernel(*.o文件)的大小。动态shape场景下,由于算子编译时会遍历可能存在的所有场景,最终可能会导致由于算子Kernel文件过大而无法进行编译的情况,此种场景下,建议不要配置为2。

      由于算子kernel文件过大而无法编译的日志显示如下:

      message:link error ld.lld: error: InputSection too large for range extension thunk ./kernel_meta_xxxxx.o:(xxxx)
    • 当该参数取值不为0时,可通过功能调试中的“debug_dir”参数指定调试相关过程文件的存放路径。

默认值为空,代表不使能此配置。

配置示例:

config = NPURunConfig(op_debug_level=1)

op_select_implmode

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

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

默认值为空,代表不使能此配置。

配置示例:
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

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

  • True:动态输入。
  • False:固定输入,默认False。
配置示例:
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]")

使用注意事项:

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

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

graph_memory_max_size

历史版本,该参数用于指定网络静态内存和最大动态内存的大小。

当前版本,该参数不再生效。系统会根据网络使用的实际内存大小动态申请。

variable_memory_max_size

历史版本,该参数用于指定变量内存的大小。

当前版本,该参数不再生效。系统会根据网络使用的实际内存大小动态申请。