---
title: NPURunConfig配置参数说明
description: "| 参数名 | 描述 |"
url: https://www.hiascend.com/document/detail/zh/TensorFlowCommercial/latest/migration/tfmigr1/tfmigr1_tfadapi_0040.html
sourcePath: /source/zh/TensorFlowCommercial/900/migration/tfmigr1/tfmigr1_tfadapi_0040.html
indexId: 1d6858f3921f5bcf108ba7aa5b99a73f442460f448ced1c3dd0d74826d05ea0579
---
# 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 | 同一个session内同时加载多个模型时，如果多个模型间的权重能够复用，建议通过此配置项将网络中Const/Constant节点的权重外置，实现多个模型间的权重复用，从而减少权重的内存占用。 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的详细说明，可参见《环境变量参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/envvar/envref\_07\_0001.html)》中的“安装配置相关”章节。 模型卸载时，会自动删除“tmp\_weight\_<pid>\_<sessionid>”目录。 说明：一般场景下不需要配置此参数，针对模型加载环境有内存限制的场景，可以将权重外置。 配置示例： config = NPURunConfig(external\_weight=True) |
| 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。 说明：该参数仅针对静态shape图生效。 配置示例： config = NPURunConfig(input\_fusion\_size=25600) |
| input\_batch\_cpy | Host侧输入数据搬运到Device时，是否开启批量内存拷贝功能。 True：开启批量内存拷贝功能。该配置仅在用户输入个数大于1时生效。 False（默认值）：关闭批量内存拷贝功能。 说明： 该参数仅支持以下产品： Atlas 350 加速卡 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 该参数可以提升Host到Device的数据搬运性能，适用于需要频繁搬运数据且PCIe带宽利用率较低的场景。通过该参数使能批量拷贝功能后，可提升带宽利用率。 若网络初始输入个数仅有1个，即使配置了批量拷贝功能也不会生效。 当同时配置了“input\_fusion\_size”参数以启用合并拷贝功能和“input\_batch\_cpy”参数以启用批量拷贝功能时，合并拷贝的阈值可能会影响批量拷贝功能。 例如，如果用户有5个输入，其中有4个输入数据小于合并拷贝阈值，满足数据合并条件，那么这4个输入会执行合并拷贝，剩余的1个输入由于不满足批量拷贝的输入个数，则不会执行批量拷贝。 配置示例： config = NPURunConfig(input\_batch\_cpy=True) |


#### 动态shape

| 参数名 | 描述 |
| --- | --- |
| ac\_parallel\_enable | 动态shape图中，是否允许AI CPU算子和AI Core算子并行运行。 动态shape图中，开关开启时，系统自动识别图中可以和AI Core并发的AI CPU算子，不同引擎的算子下发到不同流上，实现多引擎间的并行，从而提升资源利用效率和动态shape执行性能。 1：允许AI CPU和AI Core算子间的并行运行。 0（默认值）：AI CPU算子不会单独分流。 配置示例： config = NPURunConfig(ac\_parallel\_enable="1") |
| compile\_dynamic\_mode | 是否需要泛化图中所有的输入shape。 True：将所有的输入shape泛化为\-1，如果是静态shape图，则会泛化为动态shape图。 False（默认值）：不泛化输入shape。 配置示例： config = NPURunConfig(compile\_dynamic\_mode=True) |
| all\_tensor\_not\_empty | 动态shape计算图场景，为避免将空tensor节点下发到device，执行图通常会插入控制节点用于判断当前节点是否为空。如果用户确认计算图中不存在空tensor，可通过开启此配置移除这些控制节点，从而提升图执行性能。 True：移除执行图中用于空tensor判断的控制节点。仅在确认计算图中不存在空tensor节点时开启，否则可能导致部分算子执行出错。 False（默认值）：保留执行图中用于空tensor判断的控制节点。 配置示例： config = NPURunConfig(all\_tensor\_not\_empty=True) |


#### 混合计算

| 参数名 | 描述 |
| --- | --- |
| mix\_compile\_mode | 是否开启混合计算模式。 True：开启混合计算模式。 False：关闭混合计算模式（默认），即为全下沉模式。 计算全下沉模式即所有的计算类算子全部在Device侧执行，混合计算模式作为计算全下沉模式的补充，将部分不可离线编译下沉执行的算子留在前端框架中在线执行，提升AI处理器支持TensorFlow的适配灵活性。 配置示例： config = NPURunConfig(mix\_compile\_mode=True) |


#### 功能调试

| 参数名 | 描述 |
| --- | --- |
| enable\_exception\_dump | 是否dump异常算子数据。 0：关闭异常算子数据dump功能。 1：开启普通ExceptionDump，dump异常算子的输入输出数据、tensor描述信息（shape、dtype、format等）以及workspace信息。 dump数据存储路径优先级为：环境变量NPU\_COLLECT\_PATH > 环境变量ASCEND\_WORK\_PATH > 默认路径（当前脚本执行路径下的extra\-info目录）。 2（默认值）：开启LiteExceptionDump，dump异常算子的输入输出数据、workspace信息、Tiling信息等，导出的数据用于分析AI Core Error问题（关于AI Core Error问题的信息收集及定位，详细说明请参见《故障处理(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/troubleshooting/troubleshooting\_0001.html)》手册中的“典型故障专题 > AI Core Error问题定位专题”）。 dump数据存储路径优先级为：环境变量ASCEND\_WORK\_PATH > 默认路径（指当前脚本执行路径下的extra\-info/data\-dump/<device\_id>目录）。 说明： 若配置了环境变量NPU\_COLLECT\_PATH，不论配置项“enable\_exception\_dump”的取值如何，都按照“1：普通ExceptionDump”进行异常算子数据dump，且dump数据存储在环境变量NPU\_COLLECT\_PATH的指定目录下。 关于环境变量的详细说明可参见《环境变量参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/envvar/envref\_07\_0001.html)》。 配置示例： config = NPURunConfig(enable\_exception\_dump=1) |
| 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\_cce：算子编译时，在当前执行路径下的kernel\_meta文件夹中保留算子的cce文件\*.cce，算子二进制文件\*.o，以及算子描述文件\*.json。 dump\_loc：算子编译时，在当前执行路径下的kernel\_meta文件夹中保留算子的cce文件\*.cce，算子二进制文件\*.o，算子描述文件\*.json，以及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.... 配置示例： config = NPURunConfig(op\_debug\_config="/root/test0.cfg") 其中，test0.cfg文件信息为： op\_debug\_config = ccec\_O0,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选项不可同时开启，会导致AI Core Error报错，报错信息示例如下： ...there is an aivec error exception, core id is 49, error code = 0x4 ... 此参数取值为dump\_cce、dump\_loc时，可通过“debug\_dir”参数指定调试相关过程文件的存放路径。 配置编译选项oom、dump\_cce、dump\_loc时，若模型中含有如下通算融合算子，算子编译目录kernel\_meta中，不会生成下述算子的\*.o、\*.json、\*.cce文件。 MatMulAllReduce MatMulAllReduceAddRmsNorm AllGatherMatMul MatMulReduceScatter AlltoAllAllGatherBatchMatMul BatchMatMulReduceScatterAlltoAll 若配置了NPU\_COLLECT\_PATH环境变量，不支持打开“检测Global Memory是否内存越界”的开关，即不支持将此参数指定的配置文件中配置“oom”，否则编译出来的模型文件或算子kernel包在使用时会报错。 |
| debug\_dir | 用于配置保存算子编译生成的调试相关的过程文件的路径，包括算子.o/.json/.cce等文件。 算子编译生成的调试文件存储优先级为： 配置参数“debug\_dir” > 环境变量ASCEND\_WORK\_PATH > 默认存储路径（当前脚本执行路径）。 关于环境变量ASCEND\_WORK\_PATH的详细说明可参见《环境变量参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/envvar/envref\_07\_0001.html)》。 配置示例： config = NPURunConfig(debug\_dir="/home/test") |
| export\_compile\_stat | 用户配置图编译过程中是否生成算子融合信息的结果文件fusion\_result.json，支持如下取值： 0：不生成算子融合信息结果文件。 1（默认值）：程序运行正常退出时生成算子融合信息结果文件。 2：图编译完成时即生成算子融合信息结果文件，即如果图编译已完成，后续程序中断，也会生成算子融合信息结果文件。 fusion\_result.json文件于记录图编译过程中使用的融合规则，文件中关键字段含义如下： session\_and\_graph\_id\_xx\_xx：表示融合结果所属线程和图编号。 graph\_fusion：表示图融合。 ub\_fusion：表示UB融合，Atlas 350 加速卡不支持UB融合，不会生成该信息。 match\_times：表示图编译过程中匹配到的融合规则次数。 effect\_times：表示实际生效的次数。 repository\_hit\_times：优化UB融合知识库命中的次数，Atlas 350 加速卡不支持UB融合，不会生成该信息。 说明： 若环境中未配置环境变量ASCEND\_WORK\_PATH，算子融合信息结果保存至当前执行目录的fusion\_result.json文件；若环境中配置了环境变量ASCEND\_WORK\_PATH，则保存至$ASCEND\_WORK\_PATH/FE/${进程号}/fusion\_result.json文件。关于环境变量的详细说明可参见《环境变量参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/envvar/envref\_07\_0001.html)》。 通过“fusion\_switch\_file”参数关闭的融合规则不会在fusion\_result.json中呈现。 配置示例： config = NPURunConfig(export\_compile\_stat=1) |


#### 精度调优

| 参数名 | 描述 |
| --- | --- |
| precision\_mode\_v2 | 算子精度模式，配置要求为string类型。 fp16： 表示原图中算子精度为float16、bfloat16或float32时，强制选择float16。 origin： 保持原图精度。 如果原图中某算子精度为float16，AI Core中该算子的实现不支持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： AI Core中该算子既支持float32又支持float16数据类型时，系统内部根据算子类型不同，选择不同的处理方式。 对于矩阵计算类算子，系统内部会按算子实现的支持情况处理： 优先选择输入数据类型为float16且输出数据类型为float32； 如果1中的场景不支持，则选择输入数据类型为float32且输出数据类型为float32； 如果2中的场景不支持，则选择输入数据类型为float16且输出数据类型为float16； 如果3中的场景不支持，则报错。 对于矢量计算类算子，表示原图中算子精度为float16或bfloat16，强制选择float32。 如果原图中存在部分算子，在AI Core中该算子的实现不支持float32，比如某算子仅支持float16类型，则该参数不生效，仍然使用支持的float16；如果在AI Core中该算子的实现不支持float32，且又配置了黑名单（precision\_reduce = false），则会使用float32的AI CPU算子；如果AI CPU算子也不支持，则执行报错。 mixed\_float16： 表示使用混合精度float16、bfloat16和float32数据类型来处理神经网络。针对原图中float32和bfloat16数据类型的算子，按照内置的优化策略，自动将部分float32和bfloat16的算子降低精度到float16，从而在精度损失很小的情况下提升系统性能并减少内存使用。 开启该功能开关后，用户可以同时使能Loss Scaling，从而补偿降低精度带来的精度损失。 mixed\_bfloat16： 表示使用混合精度bfloat16和float32数据类型来处理神经网络。针对原图中float32数据类型的算子，按照内置的优化策略，自动将部分float32的算子降低精度到bfloat16，从而在精度损失很小的情况下提升系统性能并减少内存使用；如果算子不支持bfloat16和float32，则使用AI CPU算子进行计算；如果AI CPU算子也不支持，则执行报错。 说明：仅Atlas 350 加速卡， Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ， Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ，支持此配置。 mixed\_hif8： 开启自动混合精度功能，表示混合使用hifloat8（此数据类型介绍可参见Link(https://arxiv.org/abs/2409.16626?context=cs.AR)）、float16、bfloat16和float32数据类型来处理神经网络。针对原图中float16、bfloat16和float32数据类型的算子，按照内置的优化策略，自动将部分float16、bfloat16和float32的算子降低精度到hifloat8，从而在精度损失很小的情况下提升系统性能并减少内存使用。当前版本不支持该选项。 说明：仅Atlas 350 加速卡支持此配置。 cube\_hif8： 表示若原图中的cube算子既支持hifloat8，又支持float16、bfloat16或float32数据类型时，强制选择hifloat8数据类型。当前版本不支持该选项。 说明：仅Atlas 350 加速卡支持此配置。 训练场景下： 针对Atlas 350 加速卡，该配置项默认值为“origin”。 针对 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ，该配置项默认值为“origin”。 针对 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ，该配置项默认值为“origin”。 针对 Atlas 训练系列产品 ，该配置项无默认取值，以“precision\_mode”参数的默认值为准，即“allow\_fp32\_to\_fp16”。 在线推理场景下：该配置项默认值为“fp16”。 配置示例： config = NPURunConfig(precision\_mode\_v2="origin") 说明： 该参数不能与“precision\_mode”参数同时使用，建议使用“precision\_mode\_v2”参数。 在使用此参数设置整个网络的精度模式时，可能会存在个别算子存在精度问题，此种场景下，建议通过keep\_dtype\_scope接口设置某些算子保持原图精度。 混合精度场景下算子的内置优化策略可参见“modify\_mixlist”参数的详细说明。 bfloat16数据类型不支持以下产品： Atlas 训练系列产品 Atlas 推理系列产品 |
| precision\_mode | 算子精度模式，配置要求为string类型。 allow\_fp32\_to\_fp16： 对于矩阵类算子： 如果原图中算子精度为float32，优先降低精度到float16，如果AI Core中算子不支持float16，则继续选择float32，如果AI Core中算子不支持float32，则使用AI CPU算子进行计算；如果AI CPU算子也不支持，则执行报错。 如果原图中算子精度为bfloat16，则优先使用原图精度bfloat16，如果AI Core中算子不支持bfloat16，则选择float32，如果AI Core中算子不支持float32，则直接降低精度到float16；如果AI Core中算子不支持float16，则使用AI CPU算子进行计算；如果AI CPU算子也不支持，则执行报错。 对于矢量类算子，优先保持原图精度： 如果原图中算子精度为float32，则优先使用原图精度float32，如果AI Core中算子不支持float32，则直接降低精度到float16；如果AI Core中算子不支持float16，则使用AI CPU算子进行计算；如果AI CPU算子也不支持，则执行报错。 如果原图中算子精度为bfloat16，则优先使用原图精度bfloat16，如果AI Core中算子不支持bfloat16，则选择float32，如果AI Core中算子不支持float32，则直接降低精度到float16；如果AI Core中算子不支持float16，则使用AI CPU算子进行计算；如果AI CPU算子也不支持，则执行报错。 force\_fp16： 算子同时支持float16、bfloat16和float32数据类型时，强制选择float16数据类型。此参数仅适用于在线推理场景。 force\_fp32/cube\_fp16in\_fp32out： 配置为force\_fp32或cube\_fp16in\_fp32out，效果等同，该选项用来表示AI Core中该算子既支持float32又支持float16数据类型时，系统内部都会根据算子类型不同，选择不同的处理方式。cube\_fp16in\_fp32out为新版本中新增的，对于矩阵计算类算子，该选项语义更清晰。 对于矩阵计算类算子，系统内部会按算子实现的支持情况处理： 优先选择输入数据类型为float16且输出数据类型为float32； 如果1中的场景不支持，则选择输入数据类型为float32且输出数据类型为float32； 如果2中的场景不支持，则选择输入数据类型为float16且输出数据类型为float16； 如果3中的场景不支持，则报错。 对于矢量计算类算子，表示原图中算子精度为float16或bfloat16，强制选择float32。 如果原图中存在部分算子，在AI Core中该算子的实现不支持float32，比如某算子仅支持float16类型，则该参数不生效，仍然使用支持的float16；如果在AI Core中该算子的实现不支持float32，且又配置了黑名单（precision\_reduce = false），则会使用float32的AI CPU算子；如果AI CPU算子也不支持，则执行报错。 must\_keep\_origin\_dtype： 保持原图精度。 如果原图中某算子精度为float16，AI Core中该算子的实现不支持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： 配置为allow\_mix\_precision或allow\_mix\_precision\_fp16，效果等同，均表示使用混合精度float16、bfloat16和float32数据类型来处理神经网络的过程。allow\_mix\_precision\_fp16为新版本中新增的，语义更清晰，便于理解。 针对原始模型中float32和bfloat16数据类型的算子，按照内置的优化策略，自动将部分float32和bfloat16的算子降低精度到float16，从而在精度损失很小的情况下提升系统性能并减少内存使用。 allow\_mix\_precision\_bf16： 表示使用混合精度bfloat16和float32数据类型来处理神经网络的过程。针对原始模型中float32数据类型的算子，按照内置的优化策略，自动将部分float32的算子降低精度到bfloat16，从而在精度损失很小的情况下提升系统性能并减少内存使用；如果AI Core中算子不支持bfloat16和float32，则使用AI CPU算子进行计算；如果AI CPU算子也不支持，则执行报错。 说明：仅Atlas 350 加速卡， Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ， Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ，支持此配置。 allow\_fp32\_to\_bf16： 如果原图中算子精度为float32，则优先使用原图精度float32，如果AI Core中算子不支持float32，则降低精度到bfloat16；如果AI Core中算子不支持bfloat16，则使用AI CPU算子进行计算；如果AI CPU算子也不支持，则执行报错。 如果原图中算子精度为bfloat16，则优先使用原图精度bfloat16，如果AI Core中算子不支持bfloat16，则选择float32，如果AI Core中算子不支持float32，则使用AI CPU算子进行计算；如果AI CPU算子也不支持，则执行报错。 说明：Atlas 350 加速卡， Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ， Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ，支持此配置。 针对Atlas 350 加速卡，默认配置项为“must\_keep\_origin\_dtype”。 针对 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ，默认配置项为“must\_keep\_origin\_dtype”。 针对 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ，默认配置项为“must\_keep\_origin\_dtype”。 针对 Atlas 训练系列产品 ，默认配置项为“allow\_fp32\_to\_fp16”。 配置示例： config = NPURunConfig(precision\_mode="allow\_mix\_precision") 说明： 该参数不能与“precision\_mode\_v2”参数同时使用，建议使用“precision\_mode\_v2”参数。 在使用此参数设置整个网络的精度模式时，可能会存在个别算子存在精度问题，此种场景下，建议通过keep\_dtype\_scope接口设置某些算子保持原图精度。 |
| modify\_mixlist | 开启混合精度的场景下，开发者可通过此参数指定混合精度黑白灰名单的路径以及文件名，自行指定哪些算子允许降精度，哪些算子不允许降精度。 用户可以在脚本中通过配置“precision\_mode\_v2”（推荐）参数或者“precision\_mode”参数开启混合精度。 黑白灰名单存储文件为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" ] } } 说明：上述配置文件样例中展示的算子仅作为参考，请基于实际硬件环境和具体的算子内置优化策略进行配置。 混合精度场景下算子的内置优化策略可在“CANN软件安装目录/opp/built\-in/op\_impl/ai\_core/tbe/config/<soc\_version>/aic\-<soc\_version>\-ops\-info\-<opType>.json”文件中查询，例如： "Conv2D":{ "precision\_reduce":{ "flag":"true" }, ... } true（白名单）：表示混合精度模式下，允许当前算子降低精度。 false（黑名单）：表示混合精度模式下，不允许当前算子降低精度。 不配置（灰名单）：表示当前算子的混合精度处理机制和前一个算子保持一致，即如果前一个算子支持降精度处理，当前算子也支持降精度；如果前一个算子不允许降精度，当前算子也不支持降精度。 |
| enable\_reduce\_precision | 当前版本暂不支持。 |
| customize\_dtypes | 使用precision\_mode\_v2或precision\_mode参数设置整个网络的精度模式时，可能会存在个别算子存在精度问题，此种场景下，可以使用customize\_dtypes参数配置个别算子的精度模式，而模型中的其他算子仍以precision\_mode\_v2或precision\_mode指定的精度模式进行编译。需要注意，当precision\_mode\_v2取值为“origin”或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\-<opType>.json。 通过该参数指定的优先级高，因此可能会导致精度/性能的下降，如果指定的dtype不支持，会导致编译失败。 若通过算子名称进行配置，由于模型编译过程中会进行融合、拆分等优化操作，可能会导致算子名称发生变化，进而导致配置不生效，未达到精度提升的目的。此种场景下，可进一步通过获取日志进行问题定位，关于日志的详细说明请参见《日志参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/logreference/logreference\_0001.html)》。 |


#### 精度比对

| 参数名 | 描述 |
| --- | --- |
| dump\_config | dump开关，用户在创建NPURunConfig之前，可以实例化一个DumpConfig类进行dump的配置。DumpConfig类的构造函数，请参见DumpConfig构造函数。 配置示例： config = NPURunConfig(dump\_config=dump\_config) |
| quant\_dumpable | 如果TensorFlow网络是经过AMCT工具量化后的网络，可通过此参数控制是否采集量化前的dump数据。 0（默认值）：图编译过程中可能优化量化前的输入输出，此时无法获取量化前的dump数据。 1：开启此配置后，可确保能够采集量化前的dump数据。 配置示例： config = NPURunConfig(quant\_dumpable="1") 说明： 此参数仅适用于在线推理场景下使用。 开启Data Dump的场景下，可通过将此配置项配置为“1”，确保可以采集量化前的dump数据。 |
| fusion\_switch\_file | 融合开关配置文件路径以及文件名。 格式要求：支持大小写字母（a\-z，A\-Z）、数字（0\-9）、下划线（\_）、中划线（\-）、句点（.）、中文字符。 系统内置了一些图融合和UB融合规则，均为默认开启，可以根据需要关闭指定的融合规则，当前可以关闭的融合规则请参见《图融合和UB融合规则参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/graphubfusionref/atlasrr\_30\_0003.html)》。 注意：针对Atlas 350 加速卡，不支持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" } } } 需要注意的是： 关闭某些融合规则可能会导致功能问题，因此此处的一键式关闭仅关闭系统部分融合规则，而不是全部融合规则。 一键式关闭融合规则时，可以同时开启部分融合规则（即配置文件中针对单个融合规则配置的优先级高于“ALL”）： { "Switch":{ "GraphFusion":{ "ALL":"off", "SoftmaxFusionPass":"on" }, "UBFusion":{ "ALL":"off", "TbePool2dQuantFusionPass":"on" } } } |
| buffer\_optimize | 高级开关，是否开启buffer优化，仅适用于在线推理场景。 l2\_optimize：表示开启buffer优化，默认为l2\_optimize。 off\_optimize：表示关闭buffer优化。 配置示例： config = NPURunConfig(buffer\_optimize="l2\_optimize") |


#### 性能调优

- 基础配置| 参数名 | 描述 |
| --- | --- |
| iterations\_per\_loop | 针对一次session.run调用，在NPU执行训练迭代的次数，默认为1，且用户设置的训练迭代总次数必须为iterations\_per\_loop的整数倍。NPU会运行iterations\_per\_loop指定迭代次数，然后再返回到Host侧，该参数可以减少Host与Device间的交互次数，缩短训练时长。 混合计算模式（mix\_compile\_mode为True）下，iterations\_per\_loop必须为1。 说明：当iterations\_per\_loop大于1时，由于循环下沉和LossScale溢出等问题，用户设置的训练迭代总次数和实际的迭代总次数可能会有差异。 配置示例： config = NPURunConfig(iterations\_per\_loop=1000) |


- 高级配置| 参数名 | 描述 |
| --- | --- |
| hcom\_parallel | 分布式训练场景下，可通过此开关控制是否启用Allreduce梯度更新和前后向并行执行。 True：开启Allreduce并行。 False：关闭Allreduce并行。 默认值为“True”，针对小网络（例如：ResNet18），建议配置为False。 配置示例： config = NPURunConfig(hcom\_parallel=True) |
| op\_precision\_mode | 设置具体某个算子的高精度或高性能模式，通过该参数传入自定义的模式配置文件op\_precision.ini，可以为不同的算子设置不同的模式。 支持按照算子类型或者按照节点名称设置，按节点名称设置的优先级高于算子类型，配置样例如下： [ByOpType] optype1=high\_precision optype2=high\_performance optype3=enable\_hi\_float\_32\_execution optype4=support\_out\_of\_bound\_index [ByNodeName] nodename1=high\_precision nodename2=high\_performance nodename3=enable\_hi\_float\_32\_execution nodename4=support\_out\_of\_bound\_index high\_precision：表示高精度。 high\_performance：表示高性能。 enable\_float\_32\_execution：算子内部处理时使用FP32数据类型功能，该场景下FP32数据类型不会自动转换为HF32数据类型；若使用HF32计算，精度损失超过预期时，可启用该配置，指定部分算子内部计算时使用FP32，保持精度。 该选项仅在以下产品支持： Atlas 350 加速卡 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 enable\_hi\_float\_32\_execution：算子内部处理时使用HF32数据类型功能，使能后，FP32数据类型自动转换为HF32数据类型；该配置可以降低数据所占空间大小，实现性能提升。当前版本暂不支持此配置。 support\_out\_of\_bound\_index：表示对gather、scatter和segment类算子的indices输入进行越界校验，校验会降低算子的执行性能。 keep\_fp16：算子内部处理时使用FP16数据类型功能，该场景下FP16数据类型不会自动转换为FP32数据类型；若使用FP32计算时性能不满足预期，同时精度要求不高情况下，可以选择keep\_fp16模式，牺牲精度提升性能，不建议使用该低精度模式。 super\_performance：表示超高性能，和高性能相比，在算法计算公式上进行了优化。 具体某个算子支持配置的精度/性能模式取值，可通过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文件调整某个具体算子的精度模式。 配置示例： config = NPURunConfig(op\_precision\_mode="/home/test/op\_precision.ini") |
| enable\_scope\_fusion\_passes | 指定编译时需要生效的融合规则列表。此处传入注册的融合规则名称，允许传入多个，用“,”隔开。 无论是内置还是用户自定义的Scope融合规则，都分为如下两类： 通用融合规则（General）：各网络通用的Scope融合规则；默认生效，不支持用户指定失效。 定制化融合规则（Non\-General）：特定网络适用的Scope融合规则；默认不生效，用户可以通过enable\_scope\_fusion\_passes指定生效的融合规则列表。 配置示例： config = NPURunConfig(enable\_scope\_fusion\_passes="ScopeLayerNormPass,ScopeClipBoxesPass") |
| stream\_max\_parallel\_num | 此配置仅适用于NMT网络。 用于指定AICPU/AICORE引擎的并行度，从而实现AICPU/AICORE算子间的并行执行。 配置示例： config = NPURunConfig(stream\_max\_parallel\_num="DNN\_VM\_AICPU:10,AIcoreEngine:1") DNN\_VM\_AICPU为AICPU引擎名称，本示例指定了AICPU引擎的并发数为10； AIcoreEngine为AICORE引擎名称，本示例指定了AICORE引擎的并发数为1。 AICPU/AICORE引擎的并行度默认为1，取值不能超过AI Core的最大核数。 |
| is\_tailing\_optimization | 此配置仅用于BERT网络。 分布式训练场景下，是否开启通信拖尾优化，用于提升训练性能。通信拖尾优化即，通过计算依赖关系的改变，将不依赖于最后一个AR（梯度聚合分片）的计算操作调度到和最后一个AR并行进行，以达到优化通信拖尾时间的目的。 True：开启通信拖尾 False（默认值）：不开启通信拖尾。 必须和NPUOptimizer构造函数配合使用，且要求和NPUOptimizer构造函数中的is\_tailing\_optimization值保持一致。 配置示例： config = NPURunConfig(is\_tailing\_optimization=True) |
| enable\_small\_channel | 是否使能small channel的优化，使能后在channel<=4的卷积层会有性能收益。 0：关闭。训练（graph\_run\_mode为1）场景下默认关闭，且训练场景下不建议用户开启。 1：使能。在线推理（graph\_run\_mode为0）场景下不支持用户配置，默认使能。 说明： 该参数使能后，当前只在ResNet50、ResNet101、ResNet152网络模型能获得性能收益。其他网络模型性能可能会下降，用户需要根据实际情况决定是否使能该参数。 配置示例： config = NPURunConfig(enable\_small\_channel=0) |
| variable\_placement | 若网络的权重较大，Device侧可能存在内存不足导致网络执行失败的场景，此种情况下可通过此配置将variable的部署位置调整到Host，以降低Device的内存占用。 Device（默认值）：Variable部署在Device。 Host：Variable部署在Host。 约束说明： 如果此配置项取值为“Host”，需要开启混合计算（即mix\_compile\_mode取值为“True”）。 若训练脚本中存在类似tf.case/tf.cond/tf.while\_loop等TensorFlow V1版本控制流算子对应的API，此种场景下，如果将“variable\_placement”配置为“Host”，可能会导致网络运行失败。为避免此问题，需要在训练脚本中添加如下接口，将TensorFlow V1版本的控制流算子转换为V2版本，并启用资源变量。 tf.enable\_control\_flow\_v2() tf.enable\_resource\_variables() 配置示例： config = NPURunConfig(variable\_placement="Device") |
| graph\_max\_parallel\_model\_num | 在线推理场景下，可通过此参数设置图执行时的最大并行次数。当此参数大于1时，图执行时会启动对应数量的线程并行执行，从而提升图的整体执行流水效率。 需要配置为整数，取值范围为[1,INT32\_MAX]，默认值为1，其中INT32\_MAX是INT32类型的最大值，为“2147483647”。 配置示例： config = NPURunConfig(graph\_max\_parallel\_model\_num=4) |


#### Profiling

| 参数名 | 描述 |
| --- | --- |
| profiling\_config | Profiling开关，用户在创建NPURunConfig之前，可以实例化一个ProfilingConfig类进行Profiling的配置。ProfilingConfig类的构造函数，请参见ProfilingConfig构造函数。 配置示例： config = NPURunConfig(profiling\_config=profiling\_config) |


#### AOE

AOE调优特性仅支持如下产品的训练场景：

- Atlas A3 训练系列产品 / Atlas A3 推理系列产品
- Atlas A2 训练系列产品 / Atlas A2 推理系列产品
- Atlas 训练系列产品


| 参数名 | 描述 |
| --- | --- |
| 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 训练系列产品 / Atlas A2 推理系列产品 ，不支持子图调优。 针对 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ，不支持子图调优。 配置示例： config = NPURunConfig(aoe\_mode="2") |
| work\_path | AOE工具调优工作目录，存放调优配置文件和调优结果文件，默认生成在训练当前目录下。 该参数类型为字符串，指定的目录需要在启动训练的环境上（容器或Host侧）提前创建且确保安装时配置的运行用户具有读写权限，支持配置绝对路径或相对路径（相对执行命令行时的当前路径）。 绝对路径配置以“/”开头，例如：/home/test/output。 相对路径配置直接以目录名开始，例如：output。 配置示例： config = NPURunConfig(work\_path="/home/test/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调优数据中获取，详细可参见《性能调优工具(https://www.hiascend.com/document/detail/zh/canncommercial/900/devaids/Profiling/atlasprofiling\_16\_0144.html)》。 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时，列表中的算子会重新编译，列表外的算子会启用算子编译缓存，不再重新编译。 启用算子编译缓存功能时，默认使用的缓存文件磁盘空间大小是500MB，磁盘空间不足时，会删除缓存文件，默认保留50%的缓存空间。开发者也可以通过以下方式自定义存储缓存文件的磁盘空间大小与保留缓存空间比例： 通过配置文件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”，此时访问算子缓存时不会更新访问时间，算子编译缓存不会老化，磁盘空间使用默认大小500MB。 若多个使用者使用相同的缓存路径，该配置文件会影响所有使用者。 通过环境变量ASCEND\_MAX\_OP\_CACHE\_SIZE设置。 开发者可以通过环境变量ASCEND\_MAX\_OP\_CACHE\_SIZE来限制某个AI处理器下缓存文件的磁盘空间的大小，当编译缓存空间大小达到ASCEND\_MAX\_OP\_CACHE\_SIZE设置的取值，且超过半个小时缓存文件未被访问时，缓存文件就会老化。可通过环境变量ASCEND\_REMAIN\_CACHE\_SIZE\_RATIO设置需要保留缓存的空间大小比例。关于环境变量的详细说明可参见《环境变量参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/envvar/envref\_07\_0001.html)》中的“算子编译”章节。 若需要关闭编译缓存老化功能，可将环境变量“ASCEND\_MAX\_OP\_CACHE\_SIZE”设置为\-1。 若同时配置了op\_cache.ini文件和环境变量，则优先读取op\_cache.ini文件中的配置项，若op\_cache.ini文件和环境变量都未设置，则读取系统默认值：默认磁盘空间大小500MB，默认保留缓存的空间50%。 配置示例： config = NPURunConfig(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 > 默认路径（$HOME/atc\_data）。 关于环境变量ASCEND\_CACHE\_PATH的详细说明可参见《环境变量参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/envvar/envref\_07\_0001.html)》。 配置示例： config = NPURunConfig(op\_compiler\_cache\_dir="/home/test/kernel\_cache") |
| aicore\_num | 用于配置算子编译时使用的最大Cube Core数量和Vector Core数量。 配置格式：“整数1\|整数2”，中间使用“\|”分割，整数1表示算子编译时使用的最大Cube Core数量，整数2表示算子编译时使用的最大Vector Core数量，整数1与整数2都需要大于0，小于等于AI处理器包含的Cube Core数量和Vector Core数量。 说明： 该参数支持如下产品： Atlas A3 训练系列产品 / Atlas A3 推理系列产品 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 不同型号的AI处理器包含的最大Cube Core与Vector Core的数量可通过“CANN软件安装目录/<arch>\-linux/data/platform\_config/<soc\_version>.ini”文件查看，如下所示，说明AI处理器上存在24个Cube Core，48个Vector Core。 [SoCInfo] ai\_core\_cnt=24 cube\_core\_cnt=24 vector\_core\_cnt=48 静态shape场景下，如果模型编译时复用了已有算子二进制文件（即“jit\_compile”参数设为“false”），“aicore\_num”参数不生效。 配置示例： config = NPURunConfig(aicore\_num="2\|4") |
| oo\_constant\_folding | 常量折叠功能开启与关闭开关。 常量折叠，是指在图编译阶段直接计算并替换常量表达式的值，从而降低内存占用。一般情况下，建议保持默认值启用常量折叠功能。但有些网络编译运行过程中需要较多的内存，而常量内存在图的整个生命周期会一直占用，若存在常量折叠后会增加总内存的场景，可考虑通过此参数关闭常量折叠功能。 True（默认值）：启用常量折叠功能。 此配置下，若用户在脚本中通过TensorFlow图优化器Grappler的“\_grappler\_do\_not\_remove”属性设置了某个节点a不被折叠，则图编译过程中节点a不会被折叠，但其他满足折叠条件的节点仍会被折叠。 False：关闭常量折叠功能。 config = NPURunConfig(oo\_constant\_folding=True) 说明： 关闭常量折叠功能后，若网络编译运行出错，如下所示： 示例1： debug日志中报错信息如下所示： [ERROR] GE(3469659,python3.7):2025\-02\-25\-05:\*\* [ge\_deleted\_op.cc:21]3470503 Run: ErrorNo: 4294967295(failed) [Delete][Node] Node:HcomAllReduce/input type is ExpandDims, should be deleted by ge. 如上错误信息说明网络中存在图编译时需要被常量折叠的算子“ExpandDims”，所以不支持关闭常量折叠功能。 示例2： 返回错误码“EZ3003”，打屏信息如下所示： Error Message is : EZ3003: [PID: 3482331] 2025\-02\-25\-14:07:19.774.362 No supported Ops kernel and engine are found for [import/conv2d\_1/convolutionimport/batch\_normalization\_1/FusedBatchNorm\_1\_filter\_host], optype [ConvBnFilterHost]. Possible Cause: The operator is not supported by the system. Therefore, no hit is found in any operator information library. 如上错误信息说明网络中存在图编译时需要被常量折叠的算子“ConvBnFilterHost”，所以不支持关闭常量折叠功能。 解决方法： 开发者可以启用常量折叠功能（oo\_constant\_folding配置为True），然后通过TensorFlow图优化器Grappler的“\_grappler\_do\_not\_remove”属性精准关闭某些算子的常量折叠功能。 |


#### 数据增强

| 参数名 | 描述 |
| --- | --- |
| 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。 当默认时长不满足需求时（例如出现通信失败的错误），可通过此配置项延长超时时间。 针对Atlas 350 加速卡，单位为s，取值范围为：[0, 2147483647]，默认值为1836，当配置为0时代表永不超时。 针对 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ，单位为s，取值范围为：[0, 2147483647]，默认值为1836，当配置为0时代表永不超时。 针对 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ，单位为s，取值范围为：[0, 2147483647]，默认值为1836，当配置为0时代表永不超时。 针对 Atlas 训练系列产品 ，单位为s，取值范围为：(0, 17340]，默认值为1836。 需要注意：针对 Atlas 训练系列产品 ，系统实际设置的超时时间 = 参数取值先整除“68”，然后再乘以“68”，单位s。如果参数取值小于68，则默认按照68s进行处理。 例如，假设“hccl\_timeout”配置为600，则系统实际设置的超时时间为：600整除68乘以68 = 8\*68 = 544s。 针对Atlas 300I Duo 推理卡，单位为s，取值范围为：(0, 17340]，默认值为1836。 需要注意：针对Atlas 300I Duo 推理卡，系统实际设置的超时时间 = 参数取值先整除“68”，然后再乘以“68”，单位s。如果参数取值小于68，则默认按照68s进行处理。 例如，假设“hccl\_timeout”配置为600，则系统实际设置的超时时间为：600整除68乘以68 = 8\*68 = 544s。 说明： 参数“hccl\_timeout”的优先级大于环境变量“HCCL\_EXEC\_TIMEOUT”，若同时配置了参数“hccl\_timeout”与环境变量“HCCL\_EXEC\_TIMEOUT”，以参数“hccl\_timeout”的配置值为准。关于环境变量“HCCL\_EXEC\_TIMEOUT”的详细说明可参见《环境变量参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/envvar/envref\_07\_0001.html)》。 配置示例： config = NPURunConfig(hccl\_timeout=1800) |
| op\_wait\_timeout | 算子等待超时时间，单位为s，默认值为120s。 配置示例： 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) |


#### 试验参数

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

| 参数名 | 描述 |
| --- | --- |
| experimental\_config | 功能扩展参数，当前暂不建议使用。用户在创建NPURunConfig之前，可以实例化一个ExperimentalConfig类进行功能配置。ExperimentalConfig类的构造函数，请参见ExperimentalConfig构造函数。 |
| jit\_compile | 模型编译时，选择是优先在线编译算子，还是优先使用已编译好的算子二进制文件。 auto（默认值）：针对静态shape网络，在线编译算子；针对动态shape网络，优先查找系统中已编译好的算子二进制，如果查找不到对应的二进制，再编译算子。 true：在线编译算子，系统根据得到的图信息进行融合及优化，从而编译出运行性能更优的算子。 false：优先查找系统中已编译好的算子二进制文件，如果能查找到，则不再编译算子，编译性能更优；如果查找不到，则再编译算子。 须知： 该参数仅限于大型推荐类型网络使用。 配置示例： config = NPURunConfig(jit\_compile="auto") |
| shape\_generalization\_mode | 当“jit\_compile”参数配置为“true”（即在线编译算子的场景）时，可通过此参数配置输入shape的泛化模式。 STRICT（默认值）：直接使用当前迭代的shape，不进行泛化。 FULL：若两次迭代之间的shape发生变化，则将所有轴的shape泛化为\-1。 ADAPTIVE：若两次迭代之间的shape发生变化，仅将发生变化的轴的shape泛化为\-1。新增泛化的轴会触发模型重新编译，因此该配置下模型可能需要多次编译。 须知： 当compile\_dynamic\_mode配置为True时，首次迭代会将所有输入shape泛化为“\-1”，此时shape\_generalization\_mode的配置将不生效。 配置示例： config = NPURunConfig(shape\_generalization\_mode="FULL") |
| auto\_multistream\_parallel\_mode | 该参数仅适用于静态shape图场景，开发者可通过配置此参数开启Cube算子与Vector算子的并行执行，以提升图执行性能。 cv：代表开启Cube算子与Vector算子的并行执行功能。 None（默认值），即不开启Cube算子与Vector算子的并行执行功能。 须知： 该参数仅限于推荐类型网络的训练场景使用。 Cube算子与Vector算子的并行执行功能不可以与多流并发执行功能（通过环境变量ENABLE\_DYNAMIC\_SHAPE\_MULTI\_STREAM设置）同时启用。 关于环境变量的详细说明可参见《环境变量参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/envvar/envref\_07\_0001.html)》。 配置示例： config = NPURunConfig(auto\_multistream\_parallel\_mode="cv") |


#### 后续版本废弃配置

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

| 参数名 | 描述 |
| --- | --- |
| enable\_data\_pre\_proc | 性能调优相关配置。 GetNext算子是否下沉到NPU侧执行，GetNext算子下沉是使能训练迭代循环下沉的必要条件。 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文件），用于后续工具进行AI Core Error问题定位。 注意：Atlas 350 加速卡不会生成TBE指定映射文件。 2：开启算子debug功能，在训练脚本执行目录下的kernel\_meta文件夹中生成TBE指令映射文件（算子cce文件\*.cce、python\-cce映射文件\*\_loc.json、.o和.json文件），并关闭ccec编译器的编译优化开关且打开ccec调试功能（ccec编译器选项设置为\-O0\-g），用于后续工具进行AI Core Error问题定位。 注意：Atlas 350 加速卡不会生成TBE指定映射文件。 3：不开启算子debug功能，且在训练脚本执行目录下的kernel\_meta文件夹中保留.o和.json文件。 4：不开启算子debug功能，在训练脚本执行目录下的kernel\_meta文件夹中保留.o（算子二进制文件）和.json文件（算子描述文件），生成TBE指令映射文件（算子cce文件\*.cce）和UB融合计算描述文件（{$kernel\_name}\_compute.json）。 注意：Atlas 350 加速卡不会生成TBE指定映射文件和UB融合计算描述文件。 须知： 当该参数取值为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”参数指定调试相关过程文件的存放路径。 该参数取值为0，同时设置了NPU\_COLLECT\_PATH环境变量的场景，执行命令当前路径下仍旧会生成算子编译目录kernel\_meta；若设置了ASCEND\_WORK\_PATH环境变量，则在该环境变量指定路径下生成kernel\_meta。关于环境变量的详细说明，可参见《环境变量参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/envvar/envref\_07\_0001.html)》。 debug功能开关打开场景下，若模型中含有如下通算融合算子，算子编译目录kernel\_meta中，不会生成下述算子的\*.o、\*.json、\*.cce文件。 MatMulAllReduce MatMulAllReduceAddRmsNorm AllGatherMatMul MatMulReduceScatter AlltoAllAllGatherBatchMatMul BatchMatMulReduceScatterAlltoAll 默认值为空，代表不使能此配置。 配置示例： config = NPURunConfig(op\_debug\_level=1) |
| op\_select\_implmode | NPU内置算子有高精度和高性能实现方式，用户可以通过该参数配置模型编译时选择哪种算子。取值包括： 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（默认值）：固定输入。 配置示例： config = NPURunConfig(dynamic\_input=True) |
| dynamic\_graph\_execute\_mode | 对于动态输入场景，需要通过该参数设置执行模式，即dynamic\_input为True时该参数生效。取值为： dynamic\_execute：动态图编译模式。该模式下获取dynamic\_inputs\_shape\_range中配置的shape范围进行编译。 配置示例： config = NPURunConfig(dynamic\_graph\_execute\_mode="dynamic\_execute") |
| 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范围，表示方法为：[]，"[]"前不允许有空格。 若网络中有多个getnext输入，或者多个data输入，需要分别保持顺序关系，例如： 若网络中有多个dataset输入： def func(x): x = x + 1 y = x + 2 return x,y dataset = tf.data.Dataset.range(min\_size, max\_size) dataset = dataset.map(func) 网络的第一个输入是x（假设shape range为：[3~5]），第二个输入是y（假设shape range为：[3~6]），配置到dynamic\_inputs\_shape\_range中时，需要保持顺序关系，即 config = NPURunConfig(dynamic\_inputs\_shape\_range ="getnext:[3~5],[3~6]") 若网络中有多个placeholder输入： 如果不指定placeholder的name，例： x = tf.placeholder(tf.int32) y = tf.placeholder(tf.int32) placeholder的顺序和脚本中定义的位置一致，即网络的第一个输入是x（假设shape range为：[3~5]），第二个输入是y（shape range为：[3~6]），配置到dynamic\_inputs\_shape\_range中时，需要保持顺序关系，即 config = NPURunConfig(dynamic\_inputs\_shape\_range= "data:[3~5],[3~6]") 如果指定了placeholder的name，例： x = tf.placeholder(tf.int32, name='b') y = tf.placeholder(tf.int32, name='a') 则网络输入的顺序按name的字母序排序，即 即网络的第一个输入是y（假设shape range为：[3~6]），第二个输入是x（shape range为：[3~5]），配置到dynamic\_inputs\_shape\_range中时，需要保持顺序关系，即 config = NPURunConfig(dynamic\_inputs\_shape\_range = "data:[3~6],[3~5]") 须知： 当存在不同输入shape的子图时，由于dynamic\_inputs\_shape\_range是针对于单张图的配置属性，因此可能会导致执行异常，建议使用set\_graph\_exec\_config以支持动态输入场景。 若网络脚本中未指定placeholder的name，则placeholder会按照会如下格式命名： xxx\_0, xxx\_1, xxx\_2, …… 其中下划线后为placeholder在网络脚本中的定义顺序索引，placeholder会按照此索引的字母顺序进行排布，所以当placeholder的个数大于10时，则排序为“xxx\_0 \-> xxx\_10 \-> xxx\_2 \-> xxx\_3”，网络脚本中定义索引为10的placeholder排在了索引为2的placeholder前面，导致定义的shape range与实际输入的placeholder不匹配。 为避免此问题，当placeholder的输入个数大于10时，建议在网络脚本中指定placeholder的name，则placeholder会以指定的name进行命名，实现shape range与placeholder name的关联。 该参数不允许与dynamic\_dims同时使用，若同时使用，dynamic\_dims优先级更高，此参数不生效。 |
| graph\_memory\_max\_size | 历史版本，该参数用于指定网络静态内存和最大动态内存的大小。 当前版本，该参数不再生效。系统会根据网络使用的实际内存大小动态申请。 |
| variable\_memory\_max\_size | 历史版本，该参数用于指定变量内存的大小。 当前版本，该参数不再生效。系统会根据网络使用的实际内存大小动态申请。 |
