---
title: session配置参数说明
description: "| 参数名 | 说明 | 使用场景 |"
url: https://www.hiascend.com/document/detail/zh/TensorFlowCommercial/latest/migration/tfmigr1/tfmigr1_tfadapi_0020.html
sourcePath: /source/zh/TensorFlowCommercial/900/migration/tfmigr1/tfmigr1_tfadapi_0020.html
indexId: e95e4f202f90c52d10f2b24c58450e0afc191bfb7ee9bc4848954c882f6ad25979
---
# session配置参数说明

#### 基础功能

| 参数名 | 说明 | 使用场景 |
| --- | --- | --- |
| graph\_run\_mode | 图执行模式，取值： 0：在线推理场景下，请配置为0。 1：训练场景下，请配置为1，默认为1。 配置示例： custom\_op.parameter\_map["graph\_run\_mode"].i = 1 | 训练/在线推理 |
| session\_device\_id | 当用户需要将不同的模型通过同一个脚本在不同的Device上执行，可以通过该参数指定Device的逻辑ID。 通常可以为不同的图创建不同的Session，并且传入不同的session\_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(...) | 训练/在线推理 |
| deterministic | 是否开启确定性计算，开启确定性开关后，算子在相同的硬件和输入下，多次执行将产生相同的输出。 此配置项有以下两种取值： 0：默认值，不开启确定性计算。 1：开启确定性计算。 默认情况下，无需开启确定性计算。因为开启确定性计算后，算子执行时间会变慢，导致性能下降。在不开启确定性计算的场景下，多次执行的结果可能不同。这个差异的来源，一般是因为在算子实现中，存在异步的多线程执行，会导致浮点数累加的顺序变化。 但当发现模型执行多次结果不同，或者精度调试时，可以通过此配置开启确定性计算辅助进行调试调优。需要注意，如果希望有完全确定的结果，在训练脚本中需要设置确定的随机数种子，保证程序中产生的随机数也都是确定的。 配置示例： custom\_op.parameter\_map["deterministic"].i = 1 | 训练/在线推理 |


#### 内存管理

| 参数名 | 说明 | 使用场景 |
| --- | --- | --- |
| atomic\_clean\_policy | 是否集中清理网络中所有memset算子占用的内存（含有memset属性的算子都是memset算子），取值包括： 0（默认值）：集中清理。 1：单独清理，对网络每一个memset算子进行单独清理。当网络中memset算子内存过大时可尝试此种清理方式，但可能会导致一定的性能损耗。 配置示例： custom\_op.parameter\_map["atomic\_clean\_policy"].i = 1 | 训练/在线推理 |
| static\_memory\_policy | 网络运行时使用的内存分配方式。 0（默认值）：动态分配内存，即按照实际大小动态分配。 2：静态shape支持内存动态扩展。网络运行时，可以通过此取值实现同一session中多张图之间的内存复用，即以最大图所需内存进行分配。例如，假设当前执行图所需内存超过前一张图的内存时，直接释放前一张图的内存，按照当前图所需内存重新分配。 3：动态shape支持内存动态扩展，解决内存动态分配时的碎片问题，降低动态shape网络内存占用。 4：静态shape和动态shape同时支持内存动态扩展。 配置示例： custom\_op.parameter\_map["static\_memory\_policy"].i = 0 说明： 多张图并发执行时，不支持配置为“2”和“4”。 为兼容历史版本配置，配置为“1”的场景下，系统会按照“2”的方式进行处理。 配置为“3”和“4”的场景下，将带来内存收益，但可能导致性能损失。 | 训练/在线推理 |
| variable\_use\_1g\_huge\_page | 在推荐模型中，嵌入层(Embedding层)在TensorFlow中使用的是变量，当嵌入层作为索引类算子(Gather、ScatterNd等)的输入或输出地址时，若内存较大会存在大范围的离散访问，可能会出现算子性能下降问题。此时可尝试通过配置此参数，为变量和常量使用1G大页申请内存，从而提升访存性能。 该参数取值包括： 0（默认值）：使用系统默认的4K或者2M页申请内存。 1：使用1G大页申请内存，如果申请失败立即打印ERROR日志，并终止业务执行。 2：使用1G大页申请内存，如果申请失败会打印ERROR日志，但不终止业务执行，而是转为使用2M页申请内存，如果尝试申请成功，则业务继续执行。如果尝试申请失败，则终止业务执行。 使用1G大页申请内存，可以有效降低页表数量，有效扩大TLB（Translation Lookaside Buffer）缓存的地址范围，从而提升离散访问的性能。TLB是昇腾AI处理器中用于高速缓存的硬件模块，用于存储最近使用的虚拟地址到物理地址的映射。 配置示例： custom\_op.parameter\_map["variable\_use\_1g\_huge\_page"].i = 2 说明： 此参数仅支持以下产品： Atlas 350 加速卡 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | 训练/在线推理 |
| 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>”目录。 说明：一般场景下不需要配置此参数，针对模型加载环境有内存限制的场景，可以将权重外置。 配置示例： custom\_op.parameter\_map["external\_weight"].b = 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图生效。 配置示例： custom\_op.parameter\_map["input\_fusion\_size"].i = 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个输入由于不满足批量拷贝的输入个数，则不会执行批量拷贝。 配置示例： custom\_op.parameter\_map["input\_batch\_cpy"].b = True | 训练/在线推理 |


#### 动态shape

请注意动态分档场景下，“input_shape”、“dynamic_dims”与“dynamic_node_type”三个参数需要配合使用。

| 参数名 | 说明 | 使用场景 |
| --- | --- | --- |
| 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设置动态档位参数。 配置注意事项： input\_shape中输入的name需要与实际data节点的name的字母顺序保持一致，例如有三个输入，顺序为：data、label、mask，则input\_shape输入顺序应该为data、label、mask。 如果网络即有dataset输入也有placeholder输入，由于当前仅支持一种输入为动态的场景（例如dataset输入为动态），此时仅需填写dataset所有输入的shape信息。 如果输入中包含标量，则需要填写为0。 通过此参数设置的shape范围必须有效。 | 在线推理 |
| 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) 需要注意： 针对如下产品，档位数取值范围为(1,100]，即必须设置至少2个档位，最多支持100档配置。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 Atlas 推理系列产品 Atlas 训练系列产品 针对Atlas 350 加速卡，档位数取值范围为(1, 256]，即必须设置至少2个档位，最多支持256档配置。 | 在线推理 |
| dynamic\_node\_type | 此参数仅适用于在线推理场景，用于指定动态输入的节点类型。 0：dataset输入为动态输入。 1：placeholder输入为动态输入。 当前不支持dataset和placeholder输入同时为动态输入。 配置示例： custom\_op.parameter\_map["dynamic\_node\_type"].i = 0 | 在线推理 |
| compile\_hybrid\_mode | 此参数仅适用于在线推理场景，用于配置是否开启动态分档与动态shape混合编译执行功能。 1：开启，将图分别编译为动态分档图和动态shape图。执行时解析输入shape范围，若shape在分档范围内，则选择分档图执行；否则选择动态shape图执行。 0（默认值）：关闭此功能。 注意： 该参数必须与动态分档相关参数（“input\_shape”、“dynamic\_dims”和“dynamic\_node\_type”）同时使用，且当前仅支持“dynamic\_node\_type=1”的场景，即placeholder输入为动态输入的场景。 “compile\_hybrid\_mode”设置为“1”时，若未通过“external\_weight”开启Const/Constant节点的权重外置，系统将默认启用该功能，实现权重文件共享，从而降低内存占用。 配置示例： custom\_op.parameter\_map["compile\_hybrid\_mode"].i = 1 | 在线推理 |
| ac\_parallel\_enable | 动态shape图中，是否允许AI CPU算子和AI Core算子并行运行。 动态shape图中，开关开启时，系统自动识别图中可以和AI Core并发的AI CPU算子，不同引擎的算子下发到不同流上，实现多引擎间的并行，从而提升资源利用效率和动态shape执行性能。 1：允许AI CPU和AI Core算子间的并行运行。 0（默认值）：AI CPU算子不会单独分流。 配置示例： custom\_op.parameter\_map["ac\_parallel\_enable"].s = tf.compat.as\_bytes("1") | 训练/在线推理 |
| compile\_dynamic\_mode | 是否需要泛化图中所有的输入shape。 True：将所有的输入shape泛化为\-1，如果是静态shape图，则会泛化为动态shape图。 False（默认值）：不泛化输入shape。 配置示例： custom\_op.parameter\_map["compile\_dynamic\_mode"].b = True 注意：此参数不能与动态分档相关参数同时使用，即不能与“input\_shape”、“dynamic\_dims”与“dynamic\_node\_type”三个参数同时使用。 | 训练/在线推理 |
| all\_tensor\_not\_empty | 动态shape计算图场景，为避免将空tensor节点下发到device，执行图通常会插入控制节点用于判断当前节点是否为空。如果用户确认计算图中不存在空tensor，可通过开启此配置移除这些控制节点，从而提升图执行性能。 True：移除执行图中用于空tensor判断的控制节点。仅在确认计算图中不存在空tensor节点时开启，否则可能导致部分算子执行出错。 False（默认值）：保留执行图中用于空tensor判断的控制节点。 配置示例： custom\_op.parameter\_map["all\_tensor\_not\_empty"].b = True | 训练/在线推理 |


#### 混合计算

| 参数名 | 说明 | 使用场景 |
| --- | --- | --- |
| mix\_compile\_mode | 是否开启混合计算模式。 True：开启。 False：关闭，默认关闭。 计算全下沉模式即所有的计算类算子全部在Device侧执行，混合计算模式作为计算全下沉模式的补充，将部分不可离线编译下沉执行的算子留在前端框架中在线执行，提升AI处理器支持TensorFlow的适配灵活性。 配置示例： custom\_op.parameter\_map["mix\_compile\_mode"].b = True | 训练/在线推理 |
| in\_out\_pair\_flag | 此参数仅适用于在线推理场景，用于混合计算场景下，配置是否将in\_out\_pair中指定的算子下沉到AI处理器执行，取值： True：下沉，默认为True。 False：不下沉。 配置示例： custom\_op.parameter\_map['in\_out\_pair\_flag'].b = False | 在线推理 |
| in\_out\_pair | 此参数仅适用于在线推理场景，用于在混合计算场景下配置下沉/不下沉部分的首尾算子名。 需要注意，此参数仅支持配置一个[in\_nodes,out\_nodes]范围段内的算子，不支持配置多个[in\_nodes,out\_nodes]范围段。 配置示例： \# 开启混合计算 custom\_op.parameter\_map["mix\_compile\_mode"].b = True \# 如下配置，将in\_nodes, out\_nodes范围内的算子全部下沉到NPU执行，其余算子留在前端框架执行。 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范围内的算子不下沉，全部留在前端框架执行，其余算子下沉到NPU执行。 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)) | 在线推理 |


#### 功能调试

| 参数名 | 说明 | 使用场景 |
| --- | --- | --- |
| 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)》。 配置示例： custom\_op.parameter\_map["enable\_exception\_dump"].i = 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.... 配置示例： custom\_op.parameter\_map["op\_debug\_config"].s = tf.compat.as\_bytes("/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选项不可同时开启，会导致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)》。 配置示例： custom\_op.parameter\_map["debug\_dir"].s = tf.compat.as\_bytes("/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中呈现。 配置示例： custom\_op.parameter\_map["export\_compile\_stat"].i = 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”。 配置示例： custom\_op.parameter\_map["precision\_mode\_v2"].s = tf.compat.as\_bytes("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”。 在线推理场景下，默认值为“force\_fp16”。 配置示例： custom\_op.parameter\_map["precision\_mode"].s = tf.compat.as\_bytes("allow\_mix\_precision") 说明： 该参数不能与“precision\_mode\_v2”参数同时使用，建议使用“precision\_mode\_v2”参数。 在使用此参数设置整个网络的精度模式时，可能会存在个别算子存在精度问题。 训练场景下，建议通过keep\_dtype\_scope接口设置某些算子保持原图精度。 推理场景下，建议通过keep\_tensors\_dtypes接口设置某些算子保持原图精度。 混合精度场景下算子的内置优化策略可参见“modify\_mixlist”参数的详细说明。 bfloat16数据类型不支持以下产品： Atlas 训练系列产品 Atlas 推理系列产品 | 训练/在线推理 |
| modify\_mixlist | 开启混合精度的场景下，开发者可通过此参数指定混合精度黑白灰名单的路径以及文件名，自行指定哪些算子允许降精度，哪些算子不允许降精度。 用户可以在脚本中通过配置“precision\_mode\_v2”（推荐）参数或者“precision\_mode”参数开启混合精度。 黑白灰名单存储文件为JSON格式，配置示例如下： custom\_op.parameter\_map["modify\_mixlist"].s = tf.compat.as\_bytes("/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（黑名单）：表示混合精度模式下，不允许当前算子降低精度。 不配置（灰名单）：表示当前算子的混合精度处理机制和前一个算子保持一致，即如果前一个算子支持降精度处理，当前算子也支持降精度；如果前一个算子不允许降精度，当前算子也不支持降精度。 | 训练/在线推理 |
| 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。 配置示例： 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/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)》。 | 在线推理/训练 |


#### 精度比对

| 参数名 | 说明 | 使用场景 |
| --- | --- | --- |
| enable\_dump | 是否开启Data Dump功能 True：开启Data Dump功能，从dump\_path读取Dump文件保存路径，dump\_path为None时会产生异常。 False（默认值）：关闭Data Dump功能。 说明： 不能同时开启Data Dump与溢出数据采集功能，即不同时将enable\_dump和enable\_dump\_debug参数配置为“True”。 若“enable\_dump/enable\_dump\_debug（二选一）”参数配置为“True”，同时“enable\_exception\_dump”配置为了“1”（即开启普通异常算子dump）。此时，针对动态shape网络，仅“enable\_exception\_dump”生效；针对静态shape网络，“enable\_exception\_dump”与“enable\_dump/enable\_dump\_debug（二选一）”都生效。 配置示例： custom\_op.parameter\_map["enable\_dump"].b = True | 训练/在线推理 |
| dump\_mode | Data Dump模式，用于指定dump算子输入还是输出数据。取值如下： input：仅Dump算子输入数据 output：仅Dump算子输出数据，默认取值为output。 all：Dump算子输入和输出数据 说明： 配置为all时，由于部分算子在执行过程中会修改输入数据，例如集合通信类算子HcomAllGather、HcomAllReduce等，因此系统在进行dump时，会在算子执行前dump算子输入，在算子执行后dump算子输出，这样，针对同一个算子，算子输入、输出的dump数据是分开落盘，会出现多个dump文件，在解析dump文件后，用户可通过文件内容判断是输入还是输出。 配置示例： custom\_op.parameter\_map["dump\_mode"].s = tf.compat.as\_bytes("all") | 训练/在线推理 |
| enable\_dump\_debug | 溢出检测场景下，是否开启溢出数据采集功能，默认值：False。 True：开启采集溢出数据的功能，从dump\_path读取Dump文件保存路径，dump\_path为None时会产生异常。 False：关闭采集溢出数据的功能。 说明： 不能同时开启Data Dump与溢出数据采集功能，即不同时将enable\_dump和enable\_dump\_debug参数配置为“True”。 若“enable\_dump/enable\_dump\_debug（二选一）”参数配置为“True”，同时“enable\_exception\_dump”配置为了“1”（即开启普通异常算子dump）。此时，针对动态shape网络，仅“enable\_exception\_dump”生效；针对静态shape网络，“enable\_exception\_dump”与“enable\_dump/enable\_dump\_debug（二选一）”都生效。 配置示例： custom\_op.parameter\_map["enable\_dump\_debug"].b = True | 训练 |
| dump\_debug\_mode | 溢出检测模式，取值如下： aicore\_overflow：AI Core算子溢出检测，检测在算子输入数据正常的情况下，输出是否不正常的极大值（如float16下65500,38400,51200这些值）。一旦检测出这类问题，需要根据网络实际需求和算子逻辑来分析溢出原因并修改算子实现。 atomic\_overflow：Atomic Add溢出检测模式，在AI Core计算完，由UB搬运到OUT时，产生的Atomic Add溢出问题。 all：同时进行AI Core算子溢出检测和Atomic Add溢出检测。默认值为“all”。 说明： 针对Atlas 350 加速卡， Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ， Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ，仅支持配置为默认值“all”。 配置示例： custom\_op.parameter\_map["dump\_debug\_mode"].s = tf.compat.as\_bytes("all") | 训练 |
| dump\_path | Dump文件保存路径。enable\_dump或enable\_dump\_debug为True时，该参数必须配置。 该参数指定的目录需要在启动训练的环境上（容器或Host侧）提前创建且确保安装时配置的运行用户具有读写权限，支持配置绝对路径或相对路径（相对执行命令行时的当前路径）。 绝对路径配置以“/”开头，例如：/home/test/output。 相对路径配置直接以目录名开始，例如：output。 配置示例： custom\_op.parameter\_map["dump\_path"].s = tf.compat.as\_bytes("/home/test/output") | 训练/在线推理 |
| dump\_step | 指定训练场景下采集哪些迭代的Data Dump数据。 多个迭代用“\|”分割，例如：0\|5\|10；也可以用"\-"指定迭代范围，例如：0\|3\-5\|10。 若不配置该参数，表示采集所有迭代的dump数据。 配置示例： custom\_op.parameter\_map["dump\_step"].s = tf.compat.as\_bytes("0\|5\|10") | 训练 |
| 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全部算子。 若指定的算子其输入涉及data算子，会同时将data算子信息dump出来。 配置示例： custom\_op.parameter\_map["dump\_layer"].s = tf.compat.as\_bytes("nodename1 nodename2 nodename3") | 训练/在线推理 |
| quant\_dumpable | 如果TensorFlow网络是经过AMCT工具量化后的网络，可通过此参数控制是否采集量化前的dump数据。 0（默认值）：图编译过程中可能优化量化前的输入输出，此时无法获取量化前的dump数据。 1：开启此配置后，可确保能够采集量化前的dump数据。 配置示例： custom\_op.parameter\_map["quant\_dumpable"].s = tf.compat.as\_bytes("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融合。 配置示例： custom\_op.parameter\_map["fusion\_switch\_file"].s = tf.compat.as\_bytes("/home/test/fusion\_switch.cfg") 配置文件样例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" } } } 需要注意的是： 由于关闭某些融合规则可能会导致功能问题，因此此处的一键式关闭仅关闭系统部分融合规则，而不是全部融合规则。 一键式关闭融合规则时，可以同时开启部分融合规则（即配置文件中针对单个融合规则配置的优先级高于“ALL”）： { "Switch":{ "GraphFusion":{ "ALL":"off", "SoftmaxFusionPass":"on" }, "UBFusion":{ "ALL":"off", "TbePool2dQuantFusionPass":"on" } } } | 训练/在线推理 |
| buffer\_optimize | 高级开关，是否开启buffer优化，仅适用于在线推理场景。 l2\_optimize：表示开启buffer优化，默认为l2\_optimize。 off\_optimize：表示关闭buffer优化。 配置示例： custom\_op.parameter\_map["buffer\_optimize"].s = tf.compat.as\_bytes("l2\_optimize") | 在线推理 |
| use\_off\_line | 是否在AI处理器执行训练。 True：在AI处理器执行训练，默认为True。 False：在Host侧的CPU执行训练。 配置示例： custom\_op.parameter\_map["use\_off\_line"].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 | 训练 |


- 高级配置| 参数名 | 说明 | 使用场景 |
| --- | --- | --- |
| hcom\_parallel | 分布式训练场景下，可通过此开关控制是否启用Allreduce梯度更新和前后向并行执行。 True：开启Allreduce并行。 False：关闭Allreduce并行。 默认值为“True”，针对小网络（例如：ResNet18），建议配置为False。 配置示例： custom\_op.parameter\_map["hcom\_parallel"].b = True | 训练 |
| enable\_small\_channel | 是否使能small channel的优化，使能后在channel<=4的卷积层会有性能收益。 0：关闭。训练（graph\_run\_mode为1）场景下默认关闭，且训练场景下不建议用户开启。 1：使能。在线推理（graph\_run\_mode为0）场景下不支持用户配置，默认使能。 说明： 该参数使能后，当前只在ResNet50、ResNet101、ResNet152网络模型能获得性能收益。其他网络模型性能可能会下降，用户需要根据实际情况决定是否使能该参数。 配置示例： custom\_op.parameter\_map["enable\_small\_channel"].i = 1 | 在线推理/训练 |
| 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文件调整某个具体算子的精度模式。 配置示例： custom\_op.parameter\_map["op\_precision\_mode"].s = tf.compat.as\_bytes("/home/test/op\_precision.ini") | 训练/在线推理 |
| 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") | 训练/在线推理 |
| stream\_max\_parallel\_num | 此配置项仅适用于NMT网络。 用于指定AI CPU/AI Core引擎的并行度，从而实现AI CPU/AI Core算子间的并行执行。 DNN\_VM\_AICPU为AI CPU引擎名称，本示例指定了AI CPU引擎的并发数为10； AIcoreEngine为AI Core引擎名称，本示例指定了AI Core引擎的并发数为1。 AI CPU/AI Core引擎的并行度默认为1，取值不能超过AI Core的最大核数。 配置示例： custom\_op.parameter\_map["stream\_max\_parallel\_num"].s = tf.compat.as\_bytes("DNN\_VM\_AICPU:10,AIcoreEngine:1") | 训练/在线推理 |
| is\_tailing\_optimization | 此配置项仅适用于BERT网络。 分布式训练场景下，是否开启通信拖尾优化，用于提升训练性能。通信拖尾优化即，通过计算依赖关系的改变，将不依赖于最后一个AR（梯度聚合分片）的计算操作调度到和最后一个AR并行进行，以达到优化通信拖尾时间的目的。取值： True：开启通信拖尾优化。 False：不开启通信拖尾优化，默认为False。 必须和NPUOptimizer配合使用，且要求和NPUOptimizer中的is\_tailing\_optimization值保持一致。 配置示例： custom\_op.parameter\_map["is\_tailing\_optimization"].b = True | 训练 |
| variable\_placement | 若网络的权重较大，Device侧可能存在内存不足导致网络执行失败的场景，此种情况下可通过此配置将variable的部署位置调整到Host，以降低Device的内存占用。 Device：Variable部署在Device。 Host：Variable部署在Host。 默认值为：Device 约束说明： 如果此配置项取值为“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() 配置示例： custom\_op.parameter\_map["variable\_placement"].s = tf.compat.as\_bytes("Device") | 训练/在线推理 |
| frozen\_variable | 在线推理场景下，当开发者需要将权重保存为checkpoint时，可通过此配置将variable转换为const，以减少Host到Device之间的数据拷贝，从而提升推理性能。 True：开启variable到const的转换 False：不进行variable到const的转换 默认值为：False 配置示例： custom\_op.parameter\_map["frozen\_variable"].b = True | 在线推理 |
| graph\_max\_parallel\_model\_num | 在线推理场景下，可通过此参数设置图执行时的最大并行次数。当此参数大于1时，图执行时会启动对应数量的线程并行执行，从而提升图的整体执行流水效率。 需要配置为整数，取值范围为[1,INT32\_MAX]，默认值为1，其中INT32\_MAX是INT32类型的最大值，为“2147483647”。 配置示例： custom\_op.parameter\_map["graph\_max\_parallel\_model\_num"].i = 4 | 在线推理 |


#### Profiling

| 参数名 | 说明 | 使用场景 |
| --- | --- | --- |
| profiling\_mode | 是否开启Profiling功能。 True：开启Profiling功能，从profiling\_options读取Profiling的采集选项。 False：关闭Profiling功能，默认关闭。 配置示例： custom\_op.parameter\_map["profiling\_mode"].b = True 说明：此配置项的优先级高于环境变量PROFILING\_MODE，关于环境变量的详细说明可参见《环境变量参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/envvar/envref\_07\_0001.html)》中的“性能数据采集”章节。 | 训练/在线推理 |
| profiling\_options | Profiling配置选项。 output：Profiling采集结果文件保存路径。支持配置绝对路径或相对路径（相对执行命令行时的当前路径）。路径中不能包含特殊字符："\n"、"\f"、"\r"、"\b"、"\t"、"\v"、"\u007F"。 绝对路径配置以“/”开头，例如：/home/output。 相对路径配置直接以目录名开始，例如：output。 该参数优先级高于ASCEND\_WORK\_PATH。 该路径无需用户提前创建，采集过程中会自动创建。 storage\_limit：指定落盘目录允许存放的最大文件容量。当Profiling数据文件在磁盘中即将占满本参数设置的最大存储空间或剩余磁盘总空间即将被占满时（总空间剩余<=20MB），则将磁盘内最早的文件进行老化删除处理。 范围[200, 4294967295]，单位为MB，设置该参数时必须带单位，例如200MB。 未配置本参数时，采集前，如果磁盘可用空间小于20MB时，则不落盘数据。 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。 ge\_api：采集动态shape算子在Host调度阶段的耗时数据。取值： off：关闭，默认为off。 l0：采集动态shape算子在Host调度主要阶段的耗时数据，可更精准统计相关耗时数据。 l1：采集动态shape算子在Host调度阶段更细粒度的耗时数据，提供更全面的性能分析数据。 hccl：控制通信数据采集开关，可选on或off，默认为off。 说明： 此开关后续版本会废弃，请使用task\_time开关控制相关数据采集。 aicpu：采集AICPU算子的详细信息，如：算子执行时间、数据拷贝时间等。取值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性能指标采集项，取值如下： ArithmeticUtilization：各种计算类指标占比统计。 PipeUtilization：计算单元和搬运单元耗时占比，该项为默认值。 Memory：外部内存读写类指令占比。 MemoryL0：内部L0内存读写类指令占比。 MemoryUB：内部UB内存读写类指令占比。 ResourceConflictRatio：流水线队列类指令占比。 L2Cache：读写L2 Cache命中次数和缺失后重新分配次数。 Atlas 推理系列产品 不支持该参数。 Atlas 训练系列产品 不支持该参数。 MemoryAccess：算子在核上访存的带宽数据量。 Atlas 推理系列产品 不支持该参数。 Atlas 训练系列产品 不支持该参数。 Atlas 350 加速卡：不支持该参数。 说明： 支持自定义需要采集的寄存器，例如："aic\_metrics":"Custom:0x49,0x8,0x15,0x1b,0x64,0x10"。 Custom字段表示自定义类型，配置为具体的寄存器值，范围[0x1, 0x6E]。 配置的寄存器数最多不能超过8个，寄存器通过“,”区分开。 寄存器的值支持十六进制或十进制。 l2：控制L2 Cache和TLB页表缓存命中率的开关，可选on或off，默认为off。 Atlas 推理系列产品 ：支持采集L2 Cache的命中率 Atlas 训练系列产品 ：支持采集L2 Cache的命中率 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ：支持采集L2 Cache和TLB页表缓存的命中率；分析AI Core命中L2次数推荐使用aic\-metrics=L2Cache。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ：支持采集L2 Cache和TLB页表缓存的命中率；分析AI Core命中L2次数推荐使用aic\-metrics=L2Cache。 Atlas 350 加速卡：支持采集L2 Cache和TLB页表缓存的命中率；分析AI Core命中L2次数推荐使用aic\-metrics=L2Cache。 msproftx：控制msproftx用户和上层框架程序输出性能数据的开关，可选on或off，默认值为off。 需要先在应用程序脚本中添加如下mstx API或msproftx API，推荐使用mstx API。 runtime\_api：控制runtime API性能数据采集开关，可选on或off，默认为off。可采集runtime API性能数据，包括Host与Device之间、Device间的同步异步内存复制时延等。 sys\_hardware\_mem\_freq：片上内存、QoS传输带宽、LLC三级缓存带宽、加速器带宽、SoC传输带宽、组件内存占用等的采集开关。不同产品的采集内容略有差异，请以实际结果为准。范围[1,100]，单位Hz。 Atlas 350 加速卡，Qos和SoC支持的采集频率最大支持配置10000，其他采集项支持的最大采集频率仍为100，若配置超出范围，其他采集项则按照最大采集频率100进行采集。 已知在安装有glibc<2.34的环境上采集memory数据，可能触发glibc的一个已知Bug 19329(https://sourceware.org/bugzilla/show\_bug.cgi?id=19329)，通过升级环境的glibc版本可解决此问题。 对于以下型号，采集任务结束后，不建议用户增大采集频率，否则可能导致SoC传输带宽数据丢失。 Atlas 200I/500 A2 推理产品 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 llc\_profiling：LLC Profiling采集事件，可以设置为： read：读事件，三级缓存读速率，默认为read。 write：写事件，三级缓存写速率。 sys\_io\_sampling\_freq：NIC、ROCE、UB带宽数据采集频率。范围[1,100]，单位Hz。 Atlas 推理系列产品 ：不支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ：支持采集NIC、ROCE Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ：支持采集NIC、ROCE Atlas 350 加速卡：支持采集UB带宽数据 sys\_interconnection\_freq：集合通信带宽数据（HCCS）、集合通信硬件加速单元（CCU）带宽数据、SIO数据、PCIe数据、UB带宽数据采集频率以及片间传输带宽信息采集频率。范围[1,50]，单位Hz。 Atlas 训练系列产品 ：支持采集HCCS、PCIe数据。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ：支持采集HCCS、PCIe数据、片间传输带宽信息。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ：支持采集HCCS、PCIe数据、片间传输带宽信息、SIO数据。 Atlas 350 加速卡：支持采集PCIe数据、片间传输带宽信息、CCU带宽数据、SIO数据、UB带宽数据。 dvpp\_freq：DVPP采集频率。范围[1,100]，单位Hz。 instr\_profiling：AI Core和AI Vector的带宽和延时采集开关。取值on/off，默认为off。 Atlas 训练系列产品 ：不支持该功能。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ：不支持该开关，通过instr\_profiling\_freq控制该功能。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ：不支持该开关，通过instr\_profiling\_freq控制该功能。 Atlas 350 加速卡：支持，但可能会因最后一段指令的统计时间超长导致统计不准确，建议使用msprof op方式采集。 instr\_profiling\_freq：AI Core和AI Vector的带宽和延时采集开关，配置了采集频率即开启相关采集能力。范围[300,30000]，单位Hz。 Atlas 训练系列产品 ：不支持该功能。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ：支持，但instr\_profiling\_freq与training\_trace、task\_trace、hccl、aicpu、fp\_point、bp\_point、aic\_metrics、l2、task\_time、runtime\_api互斥，无法同时执行。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ：支持，但instr\_profiling\_freq与training\_trace、task\_trace、hccl、aicpu、fp\_point、bp\_point、aic\_metrics、l2、task\_time、runtime\_api互斥，无法同时执行。 Atlas 350 加速卡：不支持该开关，通过instr\_profiling控制该功能。 host\_sys：Host侧性能数据采集开关。取值如下，可选其中的一项或多项，选多项时用英文逗号隔开，例如"host\_sys": "cpu,mem"。 cpu：进程级别的CPU利用率。 mem：进程级别的内存利用率。 disk：进程级别的磁盘I/O利用率。采集Host侧disk性能数据需要安装第三方开源工具iotop，采集osrt性能数据需要安装第三方开源工具perf和ltrace。 network：系统级别的网络I/O利用率。 osrt：进程级别的syscall和pthreadcall。 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。 配置示例： custom\_op.parameter\_map["profiling\_options"].s = tf.compat.as\_bytes('{"output":"/tmp/profiling","training\_trace":"on","fp\_point":"","bp\_point":""}') | 训练/在线推理 |


#### 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 推理系列产品 ，不支持子图调优。 配置示例： custom\_op.parameter\_map["aoe\_mode"].s = tf.compat.as\_bytes("2") | 训练 |
| work\_path | AOE工具调优工作目录，存放调优配置文件和调优结果文件，默认生成在训练当前目录下。 该参数类型为字符串，指定的目录需要在启动训练的环境上（容器或Host侧）提前创建且确保安装时配置的运行用户具有读写权限，支持配置绝对路径或相对路径（相对执行命令行时的当前路径）。 绝对路径配置以“/”开头，例如：/home/test/output。 相对路径配置直接以目录名开始，例如：output。 配置示例： custom\_op.parameter\_map["work\_path"].s = tf.compat.as\_bytes("/home/test/output") | 训练 |
| aoe\_config\_file | 通过AOE工具进行调优时，若仅针对网络中某些性能较低的算子进行调优，可通过此参数进行设置。该参数配置为包含算子信息的配置文件路径及文件名，例如：/home/test/cfg/tuning\_config.cfg。 配置示例： custom\_op.parameter\_map["aoe\_config\_file"].s=tf.compat.as\_bytes("/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（默认值）：启用算子编译缓存功能。启用后，算子编译信息缓存至磁盘，相同编译参数的算子无需重复编译，直接使用缓存内容，从而提升编译速度。 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%。 配置示例： 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。 算子编译缓存文件存储优先级为： 配置参数“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)》中的“安装配置相关”章节。 配置示例： custom\_op.parameter\_map["op\_compiler\_cache\_dir"].s = tf.compat.as\_bytes("/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”参数不生效。 配置示例： custom\_op.parameter\_map["aicore\_num"].s = tf.compat.as\_bytes("2\|4") | 训练/在线推理 |
| oo\_constant\_folding | 常量折叠功能开启与关闭开关。 常量折叠，是指在图编译阶段直接计算并替换常量表达式的值，从而降低内存占用。一般情况下，建议保持默认值启用常量折叠功能。但有些网络编译运行过程中需要较多的内存，而常量内存在图的整个生命周期会一直占用，若存在常量折叠后会增加总内存的场景，可考虑通过此参数关闭常量折叠功能。 True（默认值）：启用常量折叠功能。 此配置下，若用户在脚本中通过TensorFlow图优化器Grappler的“\_grappler\_do\_not\_remove”属性设置了某个节点a不被折叠，则图编译过程中节点a不会被折叠，但其他满足折叠条件的节点仍会被折叠。 False：关闭常量折叠功能。 配置示例： custom\_op.parameter\_map["oo\_constant\_folding"].b = 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编号，用来判断哪个进程是主进程。 配置示例： 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") | 训练/在线推理 |


#### 异常补救

| 参数名 | 说明 | 使用场景 |
| --- | --- | --- |
| 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)》。 配置示例： custom\_op.parameter\_map["hccl\_timeout"].i = 1800 | 训练/在线推理 |
| op\_wait\_timeout | 算子等待超时时间，单位为s，默认值为120s。 当默认时长不满足需求时，可通过此配置项延长超时时间。 配置示例： custom\_op.parameter\_map["op\_wait\_timeout"].i = 120 | 训练/在线推理 |
| op\_execute\_timeout | 算子执行超时时间，单位为s。 配置示例： custom\_op.parameter\_map["op\_execute\_timeout"].i = 90 | 训练/在线推理 |
| stream\_sync\_timeout | 图执行时，stream同步等待超时时间，超过配置时间时报同步失败。单位：ms 默认值\-1，表示无等待时间，出现同步失败不报错。 说明：集群场景下，此配置的值（即stream同步等待超时时间）需要大于集合通信超时时间，即“hccl\_timeout”配置项的值或者环境变量“HCCL\_EXEC\_TIMEOUT”的值。 配置示例： custom\_op.parameter\_map["stream\_sync\_timeout"].i = 60000 | 训练/在线推理 |
| event\_sync\_timeout | 图执行时，event同步等待超时时间，超过配置时间时报同步失败。单位：ms 默认值\-1，表示无等待时间，出现同步失败不报错。 配置示例： custom\_op.parameter\_map["event\_sync\_timeout"].i = 60000 | 训练/在线推理 |


#### 试验参数

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

| 参数名 | 说明 | 使用场景 |
| --- | --- | --- |
| graph\_compiler\_cache\_dir | 该参数用于配置图编译磁盘缓存目录，当该参数配置为非空时，图编译磁盘缓存功能生效。 图编译缓存功能支持将图编译结果进行磁盘持久化，当再次执行图编译运行时，可直接加载磁盘上缓存的编译结果，从而减少图编译时长。 需要注意： 配置的缓存目录必须存在，否则会导致编译失败。 图编译时，会根据此参数的值确定缓存文件，若缓存文件不存在则保存缓存，若缓存文件存在则直接加载缓存。 图发生变化后，原来的缓存文件不可用，用户需要手动删除缓存目录中的缓存文件，然后重新编译生成缓存文件。 缓存不保证跨版本的兼容性，如果版本升级，需要清理缓存目录重新编译生成缓存。 该功能当前不支持带资源类算子的模型。 配置示例： custom\_op.parameter\_map["graph\_compiler\_cache\_dir"].s = tf.compat.as\_bytes("/root/build\_cache\_dir") | 训练/在线推理 |
| jit\_compile | 模型编译时，选择是优先在线编译算子，还是优先使用已编译好的算子二进制文件。 auto（默认值）：针对静态shape网络，在线编译算子；针对动态shape网络，优先查找系统中已编译好的算子二进制，如果查找不到对应的二进制，再编译算子。 true：在线编译算子，系统根据得到的图信息进行融合及优化，从而编译出运行性能更优的算子。 false：优先查找系统中已编译好的算子二进制文件，如果能查找到，则不再编译算子，编译性能更优；如果查找不到，则再编译算子。 须知： 该参数仅限于大型推荐类型网络使用。 配置示例： custom\_op.parameter\_map["jit\_compile"].s = tf.compat.as\_bytes( "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的配置将不生效。 配置示例： custom\_op.parameter\_map["shape\_generalization\_mode"].s = tf.compat.as\_bytes( "FULL") | 训练/在线推理 |
| experimental\_accelerate\_train\_mode | 针对超过1小时以上的训练场景，开发者可以通过此配置触发训练加速，提升训练性能。 软件内部会根据开发者配置的加速类型、加速触发模式以及低精度训练流程占比，对相应比例的训练流程降精度编译运行，剩余的训练流程仍按照原始精度编译运行。 该配置项取值类型为字符串，由“\|”符号分割为三个字段，例如：fast\|step\|0.9。 第一个字段代表加速类型，支持“fast”与“fast1”两种取值。 “fast”表示降精度时，按照float16的数据类型编译执行。 “fast1”表示降精度时，按照bf16的数据类型编译执行。 第二个字段支持“step”和“loss”两种取值，分别表示根据step值或者loss值来分割整个训练流程为低精度训练和高精度训练。 第三个字段代表低精度训练流程在总step或总loss中的占比。 当第二个字段取值为“step”时，此字段的合法取值范围为“0.2 ~ 0.9”，默认值为“0.9”。 当第二个字段的取值为“loss”时，此字段的合法取值范围为“1.01 ~ 1.5”，默认值为“1.05”。 配置示例： 按照step触发加速 custom\_op.parameter\_map["experimental\_accelerate\_train\_mode"].s = tf.compat.as\_bytes("fast\|step\|0.9") 按照loss触发加速 custom\_op.parameter\_map["experimental\_accelerate\_train\_mode"].s = tf.compat.as\_bytes("fast\|loss\|1.05") 需要注意： 若需要通过此配置项触发训练加速，需要确保网络脚本能够正常收敛。 针对网络脚本训练耗时较短的场景，若开启此配置项，端到端性能耗时不一定能够产生正向收益。 此配置项的功能与网络脚本中配置的精度模式有关： 当通过“precision\_mode”参数配置精度模式时，仅支持取值为"allow\_fp32\_to\_fp16"， “must\_keep\_origin\_dtype”或者“空”的场景下开启此配置。 当通过“precision\_mode\_v2”参数配置精度模式时，仅支持取值为“origin”或者“空”的场景下开启此配置。 此配置项功能与小循环次数有关，开启小循环的场景下可能不能准确按照指定的步数或者loss值分割整个训练流程，最终可能对loss和精度产生影响。 开启此配置项时，开发者需要按照如下规则适配修改网络脚本。 如果是step分割，需要设置"STEP\_NOW"和"TOTAL\_STEP"的环境变量，告知底层每次run的step值和总共的step数。 如果是loss分割，则需要设置"LOSS\_NOW"和"TARGET\_LOSS"环境变量，告知底层每次run的loss值和目标loss值。 step分割方式的网络脚本修改示例如下： \# 设置环境变量STEP\_NOW的初始值为“0” os.environ['STEP\_NOW'] = "0" \# 设置环境变量TOTAL\_STEP为总step数 os.environ['TOTAL\_STEP'] = str(epoch) for i in range(epoch): \# 执行训练操作 \_, step = sess.run([train\_op, global\_step]) \# 更新环境变量STEP\_NOW的值为当前执行的step os.environ['STEP\_NOW'] = str(step) loss分割方式的网络脚本修改示例如下： \# 设置环境变量LOSS\_NOW的初始值为网络初始loss值，以下配置值仅为示例 os.environ['LOSS\_NOW'] = "7.0" \# 设置环境变量TARGET\_LOSS的值为目标loss值，以下配置值仅为示例 os.environ['TARGET\_LOSS'] = "3.0" for i in range(epoch): \# 执行训练操作 \_, step = sess.run([train\_op, global\_step]) \# 更新环境变量LOSS\_NOW的值为当前执行的loss值 os.environ['LOSS\_NOW'] = str(loss) | 训练 |
| 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)》。 配置示例： custom\_op.parameter\_map["auto\_multistream\_parallel\_mode"].s = tf.compat.as\_bytes("cv") | 训练 |


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

以下参数在后续版本将废弃，建议开发者不再使用。

| 参数名 | 说明 | 使用场景 |
| --- | --- | --- |
| 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 默认值为空，代表不使能此配置。 配置示例： custom\_op.parameter\_map["op\_debug\_level"].i = 0 | 训练/在线推理 |
| enable\_data\_pre\_proc | 性能调优配置项。 GetNext算子是否下沉到AI处理器侧执行，GetNext算子下沉是使能训练迭代循环下沉的必要条件。 True：下沉，GetNext算子下沉的前提是必须使用TensorFlow Dataset方式读数据。 False：不下沉，默认为False。 配置示例： custom\_op.parameter\_map["enable\_data\_pre\_proc"].b = True | 训练 |
| variable\_format\_optimize | 性能调优配置项。 是否开启变量格式优化。 True：开启。 False：关闭。 为了提高训练效率，在网络执行的变量初始化过程中，将变量转换成更适合在NPU上运行的数据格式，例如进行NCHW到NC1HWC0的数据格式转换。但在用户特殊要求场景下，可以选择关闭该功能开关。 默认值为空，代表不使能此配置。 配置示例： custom\_op.parameter\_map["variable\_format\_optimize"].b = True | 训练 |
| op\_select\_implmode | 性能调优配置项。 NPU内置算子有高精度和高性能实现方式，用户可以通过该参数配置模型编译时选择哪种算子。取值包括： high\_precision：表示算子选择高精度实现。高精度实现算子是指在fp16输入的情况下，通过泰勒展开/牛顿迭代等手段进一步提升算子的精度。 high\_performance：表示算子选择高性能实现。高性能实现算子是指在fp16输入的情况下，不影响网络精度前提的最优性能实现。 默认值为空，代表不使能此配置。 配置示例： 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") | 训练/在线推理 |
| dynamic\_input | 当前网络的输入是否为动态输入，取值包括： True：动态输入。 False：固定输入，默认False。 配置示例： custom\_op.parameter\_map["dynamic\_input"].b = True | 训练/在线推理 |
| 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") | 训练/在线推理 |
| 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范围，表示方法为：[]，"[]"前不允许有空格。 若网络中有多个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中时，需要保持顺序关系，即 custom\_op.parameter\_map["dynamic\_inputs\_shape\_range"].s = tf.compat.as\_bytes("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中时，需要保持顺序关系，即 custom\_op.parameter\_map["dynamic\_inputs\_shape\_range"].s = tf.compat.as\_bytes("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中时，需要保持顺序关系，即 custom\_op.parameter\_map["dynamic\_inputs\_shape\_range"].s = tf.compat.as\_bytes("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 | 历史版本，该参数用于指定变量内存的大小。 当前版本，该参数不再生效。系统会根据网络使用的实际内存大小动态申请。 | 训练/在线推理 |
