下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

配置参数说明

基础功能

参数名

描述

graph_run_mode

图执行模式,取值:

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

配置示例:

npu.global_options().graph_run_mode=1

deterministic

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

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

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

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

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

配置示例:

npu.global_options().deterministic=1

内存管理

参数名

描述

memory_config.atomic_clean_policy

是否集中清理网络中所有memset算子占用的内存(含有memset属性的算子都是memset算子),取值包括:
  • 0:集中清理,默认为0。
  • 1:单独清理,对网络每一个memset算子进行单独清理。当网络中memset算子内存过大时可尝试此种清理方式,但可能会导致一定的性能损耗。

配置示例:

npu.global_options().memory_config.atomic_clean_policy=1

external_weight

同一个session内同时加载多个模型时,如果多个模型间的权重能够复用,建议通过此配置项将网络中Const/Constant节点的权重外置,实现多个模型间的权重复用,从而减少权重的内存占用。

  • False:权重不外置,保存在图中,默认为False。
  • True:权重外置,将网络中所有Const/Constant节点的权重文件落盘,并将Const/Constant类型转换为FileConstant。权重文件以“weight_<hash值>”命名。

    若环境中未配置环境变量ASCEND_WORK_PATH,则权重文件落盘至当前执行目录“tmp_weight_<pid>_<sessionid>”下。

    若环境中配置了环境变量ASCEND_WORK_PATH,则权重文件会落盘至${ASCEND_WORK_PATH}/tmp_weight_<pid>_<sessionid>目录下,关于ASCEND_WORK_PATH的详细说明,可参见环境变量参考中的“安装配置相关 > 落盘文件配置”章节。

    模型卸载时,会自动删除“tmp_weight_<pid>_<sessionid>”目录。

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

配置示例:
npu.global_options().external_weight=True

memory_config.static_memory_policy

网络运行时使用的内存分配方式。
  • 0:动态分配内存,即按照实际大小动态分配。
  • 2:静态shape支持内存动态扩展。训练与在线推理场景下,可以通过此取值实现同一session中多张图之间的内存复用,即以最大图所需内存进行分配。例如,假设当前执行图所需内存超过前一张图的内存时,直接释放前一张图的内存,按照当前图所需内存重新分配。
  • 3:动态shape支持内存动态扩展,解决内存动态分配时的碎片问题,降低动态shape网络内存占用。
  • 4:静态shape和动态shape同时支持内存动态扩展。

默认值是0,配置示例:

npu.global_options().memory_config.static_memory_policy=0
说明:
  • 多张图并发执行时,不支持配置为“2”和“4”。
  • 为兼容历史版本配置,配置为“1”的场景下,系统会按照“2”的方式进行处理。

input_fusion_size

Host侧输入数据搬运到Device侧时,将用户离散多个输入数据合并拷贝的阈值。单位为Byte,最小值为0 Byte,最大值为33554432 Byte(32MB),默认值为131072 Byte(128KB)。若:
  • 输入数据大小<=阈值,则合并输入,然后从Host搬运到Device。
  • 输入数据大小>阈值,或者阈值=0(功能关闭),则不合并,直接从Host搬运到Device。
例如用户有10个输入,有2个输入数据大小为100KB,2个输入数据大小为50KB,其余输入大于100KB,若设置:
  • input_fusion_size=100KB,则上述4个输入合并为300KB,执行搬运;其他6个输入,直接从Host搬运到Device。
  • input_fusion_size=0KB,则该功能关闭,不进行输入合并,即10个输入直接从Host搬运到Device。

配置示例:

npu.global_options().input_fusion_size=25600

动态shape

参数名

描述

ac_parallel_enable

动态shape图中,是否允许AI CPU算子和AI Core算子并行运行。

动态shape图中,开关开启时,系统自动识别图中可以和AI Core并发的AI CPU算子,不同引擎的算子下发到不同流上,实现多引擎间的并行,从而提升资源利用效率和动态shape执行性能。
  • 1:允许AI CPU和AI Core算子间的并行运行。
  • 0:AI CPU算子不会单独分流。默认为0。

配置示例:

npu.global_options().ac_parallel_enable="1"

compile_dynamic_mode

是否需要泛化图中所有的输入shape。
  • True: 将所有的输入shape泛化为-1,如果是静态shape图,则会泛化为动态shape图。
  • False:不泛化输入shape。默认值为False。

配置示例:

npu.global_options().compile_dynamic_mode=True

功能调试

参数名

描述

op_debug_config

Global Memory内存检测功能开关。

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

  • oom:在算子执行过程中,检测Global Memory是否内存越界。

    算子编译时会在当前执行路径下的kernel_meta文件夹中保留.o(算子二进制文件)和.json文件(算子描述文件),并加入如下检测逻辑:

    inline __aicore__ void  CheckInvalidAccessOfDDR(xxx) {
        if (access_offset < 0 || access_offset + access_extent > ddr_size) {
            if (read_or_write == 1) {
                trap(0X5A5A0001);
            } else {
                trap(0X5A5A0002);
            }
        }
    }

    用户可配合使用dump_cce参数,在生成的.cce文件中查看上述代码。

    编译过程中,若存在内存越界,会抛出“EZ9999”错误码。

  • dump_bin:算子编译时,在当前执行路径下的kernel_meta文件夹中保留.o和.json文件
  • dump_cce:算子编译时,在当前执行路径下的kernel_meta文件夹中保留算子的cce文件*.cce,以及.o(算子二进制文件)和.json文件(算子描述文件)。
  • dump_loc:算子编译时,在当前执行路径下的kernel_meta文件夹中保留python-cce映射文件*_loc.json
  • ccec_O0:算子编译时,开启ccec编译器的默认编译选项-O0,此编译选项针对调试信息不会执行任何优化操作
  • ccec_g :算子编译时,开启ccec编译器的编译选项-g,此编译选项相对于-O0,会生成优化调试信息
  • check_flag:算子执行时,检测算子内部流水线同步信号是否匹配。

    算子编译时,在生成的kernel_meta文件夹中保留.o(算子二进制文件)和.json文件(算子描述文件),并加入如下检测逻辑:

      set_flag(PIPE_MTE3, PIPE_MTE2, EVENT_ID0);
      set_flag(PIPE_MTE3, PIPE_MTE2, EVENT_ID1);
      set_flag(PIPE_MTE3, PIPE_MTE2, EVENT_ID2);
      set_flag(PIPE_MTE3, PIPE_MTE2, EVENT_ID3);
      ....
      pipe_barrier(PIPE_MTE3);
      pipe_barrier(PIPE_MTE2);
      pipe_barrier(PIPE_M);
      pipe_barrier(PIPE_V);
      pipe_barrier(PIPE_MTE1);
      pipe_barrier(PIPE_ALL);
      wait_flag(PIPE_MTE3, PIPE_MTE2, EVENT_ID0);
      wait_flag(PIPE_MTE3, PIPE_MTE2, EVENT_ID1);
      wait_flag(PIPE_MTE3, PIPE_MTE2, EVENT_ID2);
      wait_flag(PIPE_MTE3, PIPE_MTE2, EVENT_ID3);
      ...

    用户可配合使用dump_cce参数,在生成的.cce文件中查看上述代码。

    编译过程中,若存在算子内部流水线同步信号不匹配的情况,会在有问题的算子处超时报错,报错信息示例为:

    Aicore kernel execute failed, ..., fault kernel_name=算子名,...
    rtStreamSynchronizeWithTimeout execute failed....

配置示例:

npu.global_options().op_debug_config="/root/test0.cfg"

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

op_debug_config=ccec_g,oom

使用约束:

算子编译时,如果用户不想编译所有AI Core算子,而是指定某些AI Core算子进行编译,则需要在上述test0.cfg配置文件中新增op_debug_list字段,算子编译时,只编译该列表指定的算子,并按照op_debug_config配置的选项进行编译。op_debug_list字段要求如下:
  • 支持指定算子名称或者算子类型。
  • 算子之间使用英文逗号分隔,若为算子类型,则以“OpType::typeName”格式进行配置,支持算子类型和算子名称混合配置。
  • 要编译的算子,必须放在op_debug_config参数指定的配置文件中。

test0.cfg文件配置示例如下:

op_debug_config= ccec_g,oom
op_debug_list=GatherV2,opType::ReduceSum

模型编译时,GatherV2、ReduceSum算子按照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)
  • ccec编译选项ccec_O0和oom选项不可同时开启,会导致AICore Error报错,报错信息示例如下:
    ...there is an aivec error exception, core id is 49, error code = 0x4 ...
  • 此参数取值为“dump_bin”、“dump_cce”、“dump_loc”时,可通过“debug_dir”参数指定调试相关过程文件的存放路径。

enable_exception_dump

是否dump异常算子数据。
  • 0:关闭异常算子数据dump功能。
  • 1:开启普通ExceptionDump,dump异常算子的输入输出数据、tensor描述信息(shape、dtype、format等)以及workspace信息。

    此模式下,dump数据默认存储在当前脚本执行路径下。

  • 2:开启LiteExecptionDump,dump异常算子的输入输出数据、workspace信息、Tiling信息。默认值为2。

    此模式下,dump数据默认存储在当前脚本执行路径的/extra-info/data-dump/<device_id>目录下;若配置了环境变量ASCEND_WORK_PATH,则dump数据存储在ASCEND_WORK_PATH/extra-info/data-dump/<device_id>目录下。

说明:

若配置了环境变量NPU_COLLECT_PATH,不论配置项“enable_exception_dump”的取值如何,都同时dump异常算子的输入数据和输出数据,且dump数据存储在环境变量NPU_COLLECT_PATH的指定目录下。

关于环境变量的详细说明可参见环境变量参考

配置示例:

npu.global_options().enable_exception_dump=1

debug_dir

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

算子编译生成的调试文件存储优先级为:

配置参数“debug_dir” > 环境变量ASCEND_WORK_PATH > 默认存储路径(当前脚本执行路径)。

关于环境变量ASCEND_WORK_PATH的详细说明可参见环境变量参考

配置示例:
npu.global_options().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和bfloat16,则系统内部自动采用高精度float32。
    • 如果原图中某算子精度为float16,AI Core中该算子的实现不支持float16,仅支持bfloat16,则会使用float16的AI CPU算子;如果AI CPU算子也不支持,则执行报错。
    • 如果原图中某算子精度为float32,AI Core中该算子实现不支持float32,仅支持float16,则会使用float32的AI CPU算子;如果AI CPU算子也不支持,则执行报错。
  • 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,从而补偿降低精度带来的精度损失。

  • allow_mix_precision_bf16:开启自动混合精度功能,表示混合使用bfloat16和float32数据类型来处理神经网络的过程。针对网络模型中float32数据类型的算子,按照内置的优化策略,自动将部分float32的算子降低精度到bfloat16,从而在精度损失很小的情况下提升系统性能并减少内存使用。如果算子不支持bfloat16和float32,则使用AI CPU算子进行计算,如果AI CPU算子也不支持,则执行报错。

    说明:仅Atlas A2 训练系列产品,支持此配置。

  • allow_fp32_to_bf16:对于矩阵计算类算子,使用bfloat16;对于矢量计算类算子,优先保持原图精度,如果网络模型中算子支持float32,则保留原始精度float32,如果网络模型中算子不支持float32,则直接降低精度到bfloat16,如果算子不支持bfloat16和float32,则使用AI CPU算子进行计算,如果AI CPU算子也不支持,则执行报错。

    说明:仅Atlas A2 训练系列产品,支持此配置。

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

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

配置示例:

npu.global_options().precision_mode="allow_mix_precision"
说明:
  • 该参数不能与“precision_mode_v2”参数同时使用,建议使用“precision_mode_v2”参数。
  • 在使用此参数设置整个网络的精度模式时,可能会存在个别算子存在精度问题,此种场景下,建议通过npu.keep_dtype_scope接口设置某些算子保持原图精度。
  • 混合精度场景下算子的内置优化策略可参见“modify_mixlist”参数的详细说明。

precision_mode_v2

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

  • fp16:算子既支持float16又支持float32数据类型时,强制选择float16数据类型。
  • origin:保持原图精度。
    • 如果原图中某算子精度为float16,但NPU中该算子实现不支持float16,仅支持float32和bfloat16,则系统内部自动采用高精度float32。
    • 如果原图中某算子精度为float16,AI Core中该算子的实现不支持float16,仅支持bfloat16,则会使用float16的AI CPU算子;如果AI CPU算子也不支持,则执行报错。
    • 如果原图中某算子精度为float32,AI Core中该算子实现不支持float32,仅支持float16,则会使用float32的AI CPU算子;如果AI CPU算子也不支持,则执行报错。
  • 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,从而补偿降低精度带来的精度损失。

  • mixed_bfloat16:开启自动混合精度功能,表示混合使用bfloat16和float32数据类型来处理神经网络。针对网络模型中float32数据类型的算子,按照内置的优化策略,自动将部分float32的算子降低精度到bfloat16,从而在精度损失很小的情况下提升系统性能并减少内存使用。如果算子不支持bfloat16和float32,则使用AI CPU算子进行计算,如果AI CPU算子也不支持,则执行报错。

    说明:仅Atlas A2 训练系列产品,支持此配置。

默认值:

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

配置示例:

npu.global_options().precision_mode_v2="origin"
说明:
  • 该参数不能与“precision_mode”参数同时使用,建议使用“precision_mode_v2”参数。
  • 在使用此参数设置整个网络的精度模式时,可能会存在个别算子存在精度问题,此种场景下,建议通过npu.keep_dtype_scope接口设置某些算子保持原图精度。
  • 混合精度场景下算子的内置优化策略可参见“modify_mixlist”参数的详细说明。

modify_mixlist

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

用户可以在脚本中通过配置“precision_mode_v2”参数或者“precision_mode”参数开启混合精度。

黑白灰名单存储文件为json格式,配置示例如下:
npu.global_options().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"
     ]
  }
}

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

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

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

customize_dtypes

使用precision_mode参数设置整个网络的精度模式时,可能会存在个别算子存在精度问题,此种场景下,可以使用customize_dtypes参数配置个别算子的精度模式,而模型中的其他算子仍以precision_mode指定的精度模式进行编译。需要注意,当precision_mode取值为“must_keep_origin_dtype”时,customize_dtypes参数不生效。

该参数需要配置为配置文件路径及文件名,例如:/home/test/customize_dtypes.cfg。

配置示例:

npu.global_options().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不支持,会导致编译失败。
  • 若通过算子名称进行配置,由于模型编译过程中会进行融合、拆分等优化操作,可能会导致算子名称发生变化,进而导致配置不生效,未达到精度提升的目的。此种场景下,可进一步通过获取日志进行问题定位,关于日志的详细说明请参见日志参考

精度比对

参数名

描述

fusion_switch_file

融合开关配置文件路径以及文件名。

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

系统内置了一些图融合和UB融合规则,均为默认开启,可以根据需要关闭指定的融合规则。

配置示例:
npu.global_options().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"
            }
        }
    }

dump_config.enable_dump

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

  • True:开启Data Dump功能,从dump_path读取Dump文件保存路径。
  • False:关闭Data Dump功能。
    说明:
    • 不能同时开启Data Dump与溢出数据采集功能,即不同时将dump_config.enable_dump和dump_config.enable_dump_debug参数配置为“True”。
    • 若“dump_config.enable_dump/dump_config.enable_dump_debug(二选一)”参数配置为“True”,同时“enable_exception_dump”配置为了“1”(即开启普通ExceptionDump)。此时,针对动态shape网络,仅“enable_exception_dump”生效;针对静态shape网络,“enable_exception_dump”与“dump_config.enable_dump/dump_config.enable_dump_debug(二选一)”都生效。
配置示例:
npu.global_options().dump_config.enable_dump=True

dump_config.dump_path

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

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

  • 绝对路径配置以“/”开头,例如:/home/HwHiAiUser/output。
  • 相对路径配置直接以目录名开始,例如:output。
配置示例:
npu.global_options().dump_config.dump_path = "/home/HwHiAiUser/output"

dump_config.dump_step

指定采集哪些迭代的Data Dump数据。

多个迭代用“|”分割,例如:0|5|10;也可以用"-"指定迭代范围,例如:0|3-5|10。

若不配置该参数,表示采集所有迭代的dump数据。

配置示例:
npu.global_options().dump_config.dump_step="0|5"

dump_config.dump_mode

Data Dump模式,用于指定dump算子输入还是输出数据,默认为output。取值如下:

  • input:仅dump算子输入数据
  • output:仅dump算子输出数据
  • all:dump算子输入和输出数据
说明:

配置为all时,由于部分算子在执行过程中会修改输入数据,例如集合通信类算子HcomAllGather、HcomAllReduce等,因此系统在进行dump时,会在算子执行前dump算子输入,在算子执行后dump算子输出,这样,针对同一个算子,算子输入、输出的dump数据是分开落盘,会出现多个dump文件,在解析dump文件后,用户可通过文件内容判断是输入还是输出。

配置示例:
npu.global_options().dump_config.dump_mode="all"

dump_config.dump_data

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

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

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

配置示例:

npu.global_options().dump_config.dump_data = "stats"

dump_config.dump_layer

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

若指定的算子其输入涉及data算子,会同时将data算子信息dump出来。

配置示例:

npu.global_options().dump_config.dump_layer = "nodename1 nodename2 nodename3"

dump_config.enable_dump_debug

溢出检测场景下,是否开启溢出数据采集功能,默认值:False。
  • True:开启采集溢出数据的功能,从dump_path读取Dump文件保存路径,dump_path为None时会产生异常。
  • False:关闭采集溢出数据的功能。
说明:
  • 不能同时开启Data Dump与溢出数据采集功能,即不同时将dump_config.enable_dump和dump_config.enable_dump_debug参数配置为“True”。
  • 若“dump_config.enable_dump/dump_config.enable_dump_debug(二选一)”参数配置为“True”,同时“enable_exception_dump”配置为了“1”(即开启普通ExceptionDump)。此时,针对动态shape网络,仅“enable_exception_dump”生效;针对静态shape网络,“enable_exception_dump”与“dump_config.enable_dump/dump_config.enable_dump_debug(二选一)”都生效。
配置示例:
npu.global_options().dump_config.enable_dump_debug=True

dump_config.dump_debug_mode

溢出检测模式,取值如下:
  • aicore_overflow:AI Core算子溢出检测,检测在算子输入数据正常的情况下,输出是否不正常的极大值(如float16下65500,38400,51200这些值)。一旦检测出这类问题,需要根据网络实际需求和算子逻辑来分析溢出原因并修改算子实现。
  • atomic_overflow:Atomic Add溢出检测模式,在AICore计算完,由UB搬运到OUT时,产生的Atomic Add溢出问题。
  • all:同时进行AI Core算子溢出检测和Atomic Add溢出检测。默认值为“all”。
    说明:

    针对Atlas A2 训练系列产品,仅支持配置为默认值“all”。

配置示例:
npu.global_options().dump_config.dump_debug_mode="aicore_overflow"

quant_dumpable

如果TensorFlow网络是经过AMCT工具量化后的网络,可通过此参数控制是否采集量化前的dump数据,默认值为“0”。
  • 0:图编译过程中可能优化量化前的输入输出,此时无法获取量化前的dump数据。
  • 1:开启此配置后,可确保能够采集量化前的dump数据。

配置示例:

npu.global_options().quant_dumpable="1"
说明:

此参数仅适用于在线推理场景下使用。

开启Data Dump的场景下,可通过将此配置项配置为“1”,确保可以采集量化前的dump数据。

性能调优

参数名

描述

hcom_parallel

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

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

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

npu.global_options().hcom_parallel=True

针对小网络(例如:Resnet18),建议配置为False。

enable_small_channel

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

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

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

配置示例:

npu.global_options().enable_small_channel=1

op_precision_mode

设置具体某个算子的高精度或高性能模式,通过该参数传入自定义的模式配置文件op_precision.ini,可以为不同的算子设置不同的模式。

支持按照算子类型或者按照节点名称设置,按节点名称设置的优先级高于算子类型,样例如下:

[ByOpType]
optype1=high_precision
optype2=high_performance
optype3=support_out_of_bound_index
[ByNodeName]
nodename1=high_precision
nodename2=high_performance
nodename3=support_out_of_bound_index
  • high_precision:表示高精度。
  • high_performance:表示高性能。
  • support_out_of_bound_index:表示对gather、scatter和segment类算子的indices输入进行越界校验, 校验会降低算子的执行性能。

具体某个算子支持配置的精度/性能模式取值,可通过CANN软件安装后文件存储路径的“opp/built-in/op_impl/ai_core/tbe/impl_mode/all_ops_impl_mode.ini”文件查看。

该参数不能与op_select_implmode、optypelist_for_implmode参数同时使用,若三个参数同时配置,则只有op_precision_mode参数指定的模式生效。

一般场景下该参数无需配置。若使用高性能或者高精度模式,网络性能或者精度不是最优,则可以使用该参数,通过配置ini文件调整某个具体算子的精度模式。

配置示例:

npu.global_options().op_precision_mode="/home/test/op_precision.ini"

stream_max_parallel_num

此参数仅适用于NMT网络。

指定AICPU/AICORE引擎的并行度,从而实现AICPU/AICORE算子间的并行执行。

DNN_VM_AICPU为AICPU引擎名称,本示例指定了AICPU引擎的并发数为10;

AIcoreEngine为AICORE引擎名称,本示例指定了AICORE引擎的并发数为1。

AICPU/AICORE引擎的并行度默认为1,取值范围为:[1,13]。

配置示例:

npu.global_options().stream_max_parallel_num="DNN_VM_AICPU:10,AIcoreEngine:1"

is_tailing_optimization

此参数仅适用于Bert网络。

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

  • True。
  • False:默认为False。

配置示例:

npu.global_options().is_tailing_optimization=True

enable_scope_fusion_passes

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

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

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

配置示例:

npu.global_options().enable_scope_fusion_passes="ScopeLayerNormPass,ScopeClipBoxesPass"

Profiling

参数名

描述

profiling_config.enable_profiling

是否开启Profiling功能,默认关闭。

  • True:开启Profiling功能,从profiling_options读取Profiling的采集选项。
  • False:关闭Profiling功能。
配置示例:
npu.global_options().profiling_config.enable_profiling=True

说明:此配置项的优先级高于环境变量PROFILING_MODE,关于环境变量的详细说明可参见环境变量参考中的“辅助功能 > 性能数据采集”章节。

profiling_config.profiling_options

Profiling配置选项。

  • output:Profiling采集结果文件保存路径。支持配置绝对路径或相对路径(相对执行命令行时的当前路径)。路径中不能包含特殊字符:"\n"、"\f"、"\r"、"\b"、"\t"、"\v"、"\u007F"。
    • 绝对路径配置以“/”开头,例如:/home/HwHiAiUser/output。
    • 相对路径配置直接以目录名开始,例如:output。
    • 该参数优先级高于ASCEND_WORK_PATH。
    • 该路径无需用户提前创建,采集过程中会自动创建。
  • storage_limit:指定落盘目录允许存放的最大文件容量。当Profiling数据文件在磁盘中即将占满本参数设置的最大存储空间或剩余磁盘总空间即将被占满时(总空间剩余<=20MB),则将磁盘内最早的文件进行老化删除处理。

    取值范围为[200, 4294967295],单位为MB,设置该参数时必须带单位,例如200MB。

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

  • training_trace:采集迭代轨迹数据开关,即训练任务及AI软件栈的软件信息,实现对训练任务的性能分析,重点关注前后向计算和梯度聚合更新等相关数据。当采集正向和反向算子数据时该参数必须配置为on。
  • task_trace、task_time:控制采集算子下发耗时和算子执行耗时的开关。涉及在task_time、op_summary、op_statistic等文件中输出相关耗时数据。配置值:
    • on:开启,默认值,和配置为l1的效果一样。
    • off:关闭。
    • l0:采集算子下发耗时、算子执行耗时数据。与l1相比,由于不采集算子基本信息数据,采集时性能开销较小,可更精准统计相关耗时数据。
    • l1:采集算子下发耗时、算子执行耗时数据以及算子基本信息数据,提供更全面的性能分析数据。

    当训练profiling mode开启即采集训练Profiling数据时,配置task_trace为on的同时training_trace也必须配置为on。

  • hccl:控制hccl数据采集开关,可选on或off,默认为off。
    说明:

    此开关后续版本会废弃,请使用task_trace、task_time开关控制相关数据采集。

  • aicpu:采集AICPU算子的详细信息,如:算子执行时间、数据拷贝时间等。取值on/off,默认为off。如果将该参数配置为“on”和“off”之外的任意值,则按配置为“off”处理。
  • fp_point:指定训练网络迭代轨迹正向算子的开始位置,用于记录前向计算开始时间戳。配置值为指定的正向第一个算子名字。用户可以在训练脚本中,通过tf.io.write_graph将graph保存成.pbtxt文件,并获取文件中的name名称填入;也可直接配置为空,由系统自动识别正向算子的开始位置,例如"fp_point":""。
  • bp_point:指定训练网络迭代轨迹反向算子的结束位置,记录后向计算结束时间戳,BP_POINT和FP_POINT可以计算出正反向时间。配置值为指定的反向最后一个算子名字。用户可以在训练脚本中,通过tf.io.write_graph将graph保存成.pbtxt文件,并获取文件中的name名称填入;也可直接配置为空,由系统自动识别反向算子的结束位置,例如"bp_point":""。
  • aic_metrics:AI Core和AI Vector Core的硬件信息,取值如下:
    • ArithmeticUtilization:各种计算类指标占比统计。
    • PipeUtilization: 计算单元和搬运单元耗时占比,该项为默认值。
    • Memory:外部内存读写类指令占比。
    • MemoryL0:内部内存读写类指令占比。
    • MemoryUB:内部内存读写指令占比。
    • ResourceConflictRatio:流水线队列类指令占比。
    • L2Cache:读写L2 Cache命中次数和缺失后重新分配次数。

    Atlas 训练系列产品:支持AI Core采集,不支持AI Vector Core,不支持L2 Cache参数。

    Atlas A2 训练系列产品:支持AI Core和AI Vector Core采集。

    说明:
    支持自定义需要采集的寄存器,例如:"aic_metrics":"Custom:0x49,0x8,0x15,0x1b,0x64,0x10"。
    • Custom字段表示自定义类型,配置为具体的寄存器值,取值范围为[0x1, 0x6E]。
    • 配置的寄存器数最多不能超过8个,寄存器通过“,”区分开。
    • 寄存器的值支持十六进制或十进制。
  • l2:控制L2 Cache采样数据的开关,可选on或off,默认为off。
  • msproftx:控制msproftx用户和上层框架程序输出性能数据的开关,可选on或off,默认值为off。
  • runtime_api:控制runtime api性能数据采集开关,可选on或off,默认为off。可采集runtime-api性能数据,包括Host与Device之间、Device间的同步异步内存复制时延等。
  • sys_hardware_mem_freq:片上内存、QoS的带宽及内存信息采集频率、LLC的读写带宽数据采集频率、Acc PMU数据和SOC传输带宽信息采集频率、组件内存采集频率,取值范围为[1,100],单位hz。

    不同产品支持情况不同,请以实际实现为准。

    说明:

    已知在安装有glibc<2.34的环境上采集memory数据,可能触发glibc的一个已知Bug 19329,通过升级环境的glibc版本可解决此问题。

  • llc_profiling:LLC Profiling采集事件,可以设置为:
    • Atlas 训练系列产品,可选read(读事件,三级缓存读速率)或write(写事件,三级缓存写速率),默认为read。
    • Atlas A2 训练系列产品,可选read(读事件,三级缓存读速率)或write(写事件,三级缓存写速率),默认为read。
  • sys_io_sampling_freq:NIC、ROCE采集频率。取值范围为[1,100],单位hz。
    • Atlas 训练系列产品:支持采集NIC和ROCE。
    • Atlas A2 训练系列产品:支持采集NIC和ROCE。
  • sys_interconnection_freq:集合通信带宽数据(HCCS)、PCIe数据采集频率以及片间传输带宽信息采集频率。取值范围为[1,50],单位hz。
    • Atlas 训练系列产品:支持采集HCCS、PCIe数据。
    • Atlas A2 训练系列产品:支持采集HCCS、PCIe数据、片间传输带宽信息。
  • dvpp_freq:DVPP采集频率。取值范围为[1,100],单位hz。
  • instr_profiling_freq:AI Core和AI Vector的带宽和延时采集频率。取值范围[300,30000],单位cycle。(Atlas A2 训练系列产品
    说明:

    instr_profiling_freq与training_trace、task_trace、hccl、aicpu、fp_point、bp_point、aic_metrics、l2、task_time、runtime_api互斥,无法同时执行。

  • host_sys:Host侧性能数据采集开关。取值如下,可选其中的一项或多项,选多项时用英文逗号隔开,例如"host_sys": "cpu,mem"。
    • cpu:进程级别的CPU利用率。
    • mem:进程级别的内存利用率。
  • host_sys_usage:采集Host侧系统及所有进程的CPU和内存数据。取值包括cpu和mem,可选其中的一项或多项,选多项时用英文逗号隔开。
  • host_sys_usage_freq:配置Host侧系统和所有进程CPU、内存数据的采集频率。取值范围为[1,50],默认值50,单位hz。
说明:
  • 除动态shape场景外的其他场景,fp_point、bp_point为自动配置项,无需用户手动配置。动态shape场景不支持自动配置fp/bp,需要用户手动设置。
  • 在线推理支持task_trace和aicpu,不支持training_trace。
配置示例:
npu.global_options().profiling_config.profiling_options = '{"output":"/tmp/profiling","training_trace":"on","fp_point":"resnet_model/conv2d/Conv2Dresnet_model/batch_normalization/FusedBatchNormV3_Reduce","bp_point":"gradients/AddN_70"}'

AOE

参数名

描述

aoe_config.aoe_mode

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

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

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

说明:
  • 通过修改训练脚本和AOE_MODE环境变量都可配置调优模式,同时配置的情况下,通过修改训练脚本方式优先生效。
  • 针对Atlas A2 训练系列产品,不支持子图调优。

配置示例:

npu.global_options().aoe_config.aoe_mode="1"

aoe_config.work_path

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

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

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

配置示例:

npu.global_options().aoe_config.work_path = "/home/HwHiAiUser/output"

aoe_config.aoe_config_file

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

配置示例:

npu.global_options().aoe_config.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:启用算子编译缓存功能。启用后,算子编译信息缓存至磁盘,相同编译参数的算子无需重复编译,直接使用缓存内容,从而提升编译速度。
  • force:启用算子编译缓存功能,区别于enable模式,force模式下会先删除已有缓存,再重新编译并加入缓存。比如当用户的python变更、依赖库变更、算子调优后知识库变更时,需要先指定为force用于先清理已有的缓存,后续再修改为enable模式,避免每次编译时都强制刷新缓存。需要注意,force选项不建议在程序并行编译时设置,否则可能会导致其他模型因使用的缓存内容被清除而编译失败。
  • disable:禁用算子编译缓存功能。

使用说明:

  • 启动算子编译缓存功能时,可通过op_compiler_cache_dir配置算子编译缓存文件存储路径。
  • 建议模型最终发布时设置编译缓存选项为disable或者force。
  • op_debug_level配置非0值,会忽略op_compiler_cache_mode的配置,不启用算子编译缓存功能,算子全部重新编译。
  • op_debug_config配置非空,且配置文件中未配置op_debug_list字段,会忽略op_compiler_cache_mode的配置,不启用算子编译缓存功能,算子全部重新编译。
  • op_debug_config配置非空,且配置文件中配置了op_debug_list字段,当op_compiler_cache_mode配置为enable或force时,列表中的算子会重新编译,列表外的算子会启用算子编译缓存,不再重新编译。
  • 启用算子编译缓存功能时,默认使用的缓存文件磁盘空间大小是500M,磁盘空间不足时,默认保留50%的缓存文件,开发者也可以通过以下方式自定义存储缓存文件的磁盘空间大小与保留缓存空间比例:
    1. 通过配置文件op_cache.ini设置。

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

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

      #配置文件格式,必须包含,自动生成的文件中默认包括如下信息,手动创建时,需要输入
      [op_compiler_cache]
      #限制某个昇腾AI处理器下缓存文件的磁盘空间的大小,整数,单位为MB
      max_op_cache_size=500
      #当磁盘空间不足时,设置需要保留的缓存空间比例,取值范围:[1,100],单位为百分比;例如80表示磁盘空间不足时,会保留80%的缓存文件,其余删除
      remain_cache_size_ratio=80
      • 上述文件中的max_op_cache_size和remain_cache_size_ratio参数取值都有效时,op_cache.ini文件才会生效。
      • 当编译缓存文件大小超过“max_op_cache_size”的设置值,且超过半小时缓存文件未被访问时,缓存文件就会老化(算子编译时,不会因为编译缓存文件大小超过设置值而中断,所以当“max_op_cache_size”设置过小时,会出现实际编译缓存文件大小超过此设置值的情况)。
      • 若需要关闭编译缓存老化功能,可将“max_op_cache_size”设置为“-1”,此时访问算子缓存时不会更新访问时间,算子编译缓存不会老化,磁盘空间使用默认大小500M。
      • 若多个使用者使用相同的缓存路径,该配置文件会影响所有使用者。
    2. 通过环境变量ASCEND_MAX_OP_CACHE_SIZE设置。

      开发者可以通过环境变量ASCEND_MAX_OP_CACHE_SIZE来限制某个昇腾AI处理器下缓存文件的磁盘空间的大小,当编译缓存空间大小达到ASCEND_MAX_OP_CACHE_SIZE设置的取值,且超过半个小时缓存文件未被访问时,缓存文件就会老化。可通过环境变量ASCEND_REMAIN_CACHE_SIZE_RATIO设置需要保留缓存的空间大小比例。关于环境变量的详细说明可参见环境变量参考中的“编译相关 > 算子编译”章节。

      若需要关闭编译缓存老化功能,可将环境变量“ASCEND_MAX_OP_CACHE_SIZE”设置为-1。

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

配置示例:
npu.global_options().op_compiler_cache_mode="enable"

op_compiler_cache_dir

用于配置算子编译磁盘缓存的目录。

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

如果参数指定的路径存在且有效,则在指定的路径下自动创建子目录kernel_cache;如果指定的路径不存在但路径有效,则先自动创建目录,然后在该路径下自动创建子目录kernel_cache。

算子编译缓存文件存储优先级为:

配置参数“op_compiler_cache_dir” > ${ASCEND_CACHE_PATH}/kernel_cache_host标识 > 默认路径($HOME/atc_data)。

关于环境变量ASCEND_CACHE_PATH的详细说明可参见环境变量参考

配置示例:
npu.global_options().op_compiler_cache_dir="/home/test/kernel_cache"

异常补救

参数名

描述

stream_sync_timeout

图执行时,stream同步等待超时时间,超过配置时间时报同步失败。单位:ms

默认值-1,表示无等待时间,出现同步失败不报错。

说明:集群训练场景下,此配置的值(即stream同步等待超时时间)需要大于集合通信超时时间,即环境变量HCCL_EXEC_TIMEOUT的值。HCCL_EXEC_TIMEOUT的详细说明可参见环境变量参考“执行相关 > 集合通信”章节。

配置示例:

npu.global_options().stream_sync_timeout=600000

event_sync_timeout

图执行时,event同步等待超时时间,超过配置时间时报同步失败。单位:ms

默认值-1,表示无等待时间,出现同步失败不报错。

配置示例:

npu.global_options().event_sync_timeout=600000

试验参数

试验参数为调试功能扩展参数,后续版本可能会存在变更,不支持应用于商用产品中。

参数名

描述

jit_compile

模型编译时是否优先在线编译。

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

默认值:auto。

配置示例:

npu.global_options().jit_compile = "auto"
须知:

该参数仅受限于大型推荐类型网络使用。

后续版本废弃配置

参数名

描述

op_select_implmode

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

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

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

配置示例:
npu.global_options().op_select_implmode="high_precision"

optypelist_for_implmode

列举算子optype的列表,该列表中的算子使用op_select_implmode参数指定的模式,当前支持的算子为Pooling、SoftmaxV2、LRN、ROIAlign,多个算子以“,”分隔。

该参数需要与op_select_implmode参数配合使用,配置示例:

npu.global_options().op_select_implmode="high_precision"
npu.global_options().optypelist_for_implmode="Pooling,SoftmaxV2"

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

variable_format_optimize

是否开启变量格式优化。

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

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

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

配置示例:

npu.global_options().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时,同时又配置了功能调试中的“op_debug_config”参数,则训练执行时,仍会在当前执行路径下生成算子编译目录kernel_meta,目录中生成的内容以“op_debug_config”配置为准。
    • 训练执行时,建议配置为0或3。如果需要进行问题定位,再选择调试开关选项1和2,是因为加入了调试功能会导致网络性能下降。
    • 配置为2(即开启ccec编译选项)的场景下,不能与op_debug_config中的“oom”同时使用,会导致AI Core Error报错,报错信息示例如下。
      ...there is an aivec error exception, core id is 49, error code = 0x4 ...
    • 配置为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”参数指定调试相关过程文件的存放路径。

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

配置示例:

npu.global_options().op_debug_level=0

graph_memory_max_size

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

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

variable_memory_max_size

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

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

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词