---
title: --op_debug_config
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/devaids/atctool/atlasatcparam_16_0087.html
sourcePath: /source/zh/canncommercial/900/devaids/atctool/atlasatcparam_16_0087.html
indexId: 8be1eed485d16a8e76f9d19c654c4b1b63efd90bab239721fa28a238810afb3372
---
# --op_debug_config

#### 产品支持情况

| 产品 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | √ |
| Atlas A3 训练系列产品 / Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | √ |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | √ |


#### 功能说明

使能Global Memory（DDR）内存检测功能的配置文件路径及文件名。


#### 关联参数

无。


#### 参数取值

参数值：配置文件路径及文件名。

参数值格式：路径和文件名：支持大小写字母（a-z，A-Z）、数字（0-9）、下划线（_）、短横线（-）、句点（.）、中文汉字。

参数值约束：

配置文件中支持配置如下选项，多个选项使用英文逗号分隔。

- oom：算子执行过程中，检测Global Memory是否内存越界。

  - 配置该选项，算子编译时，在当前执行路径算子编译生成的kernel_meta文件夹中保留.o（算子二进制文件）和.json文件（算子描述文件）。
  - 使用该选项后，在算子编译过程中会加入如下的检测逻辑，用户可以通过再使用dump_cce参数，在生成的.cce文件中查看如下的代码。

```
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：算子编译时，在当前执行路径算子编译生成的kernel_meta文件夹中保留算子cce文件*.cce，以及.o（算子二进制文件）和.json文件（算子描述文件）。
- dump_loc：算子编译时，在当前执行路径算子编译生成的kernel_meta文件夹中保留python-cce映射文件*_loc.json，以及.o（算子二进制文件）和.json文件（算子描述文件）。
- ccec_O0：算子编译时，开启ccec编译器选项-O0，配置该选项不会对调试信息执行优化操作，用于后续分析AI Core Error问题。
- ccec_g：算子编译时，开启ccec编译器选项-g，配置该选项会对调试信息执行优化操作，用于后续分析AI Core Error问题。
- check_flag：算子执行时，检测算子内部流水线同步信号是否匹配。

  - 配置该选项，算子编译时，在当前执行路径算子编译生成的kernel_meta文件夹中保留.o（算子二进制文件）和.json文件（算子描述文件）。
  - 使用该选项后，在算子编译过程中会加入如下的检测逻辑，用户可以通过再使用dump_cce参数，在生成的.cce文件中查看如下的代码。

```
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);
```


    实际执行推理过程中，如果确实存在算子内部流水线同步信号不匹配，则最终会在有问题的算子处超时报错，并终止程序，报错信息示例为：

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


- 配置ccec编译选项（即ccec_O0、ccec_g选项）时，会导致算子Kernel（*.o文件）大小增大。动态Shape场景下，由于算子编译时会遍历可能的Shape场景，因此可能会导致算子Kernel文件过大而无法进行编译，此种场景下，建议不要配置ccec编译选项。
  由于算子Kernel文件过大而无法编译的报错日志示例如下：

```
message:link error ld.lld:
error: InputSection too large for range extension thunk
./kernel_meta_xxxxx.o:
```


- ccec编译器选项ccec_O0和oom不能同时开启，可能会导致AICore Error报错，报错信息示例如下：

```
...there is an aivec error exception, core id is 49, error code = 0x4 ...
```


- 若配置NPU_COLLECT_PATH环境变量，不支持打开“检测Global Memory是否内存越界”的开关（--op_debug_config指定的配置文件配置为oom），否则编译出来的模型文件或算子kernel包在使用时会报错。
- 配置编译选项oom、dump_cce、dump_loc时，若模型中含有如下通算融合算子，算子编译目录kernel_meta中，不会生成下述算子的*.o、*.json、*.cce文件。
  MatMulAllReduce

  MatMulAllReduceAddRmsNorm

  AllGatherMatMul

  MatMulReduceScatter

  AlltoAllAllGatherBatchMatMul

  BatchMatMulReduceScatterAlltoAll


#### 推荐配置及收益

无。


#### 示例

假设使能Global Memory内存检测功能的配置文件名称为gm_debug.cfg，文件内容配置示例如下：

```
op_debug_config=ccec_g,oom
```

将该文件上传到ATC工具所在服务器，例如上传到$HOME/module，使用示例如下：

```
--op_debug_config=
$HOME/module
/gm_debug.cfg
```


#### 使用约束

算子编译时，如果用户不想编译所有AI Core算子，而是指定某些AI Core算子进行编译，则需要在上述gm_debug.cfg配置文件中新增op_debug_list字段，算子编译时，只编译该列表指定的算子，并按照op_debug_config配置的选项进行编译。op_debug_list字段要求如下：

- 支持指定算子名称或者算子类型。
- 算子之间使用英文逗号分隔，若为算子类型，则以OpType::typeName格式进行配置，支持算子类型和算子名称混合配置。
- 要编译的算子，必须放在--op_debug_config参数指定的配置文件中。算子类型必须为基于Ascend IR定义的算子的类型，算子类型查看方法请参见  如何确定原始框架网络模型中的算子与AI处理器支持的算子的对应关系
。

配置示例如下：

在--op_debug_config参数指定的配置文件（例如gm_debug.cfg）中增加如下信息：

```
op_debug_config=ccec_g,oom
op_debug_list=
GatherV2,OpType::ReduceSum
```

将该文件上传到ATC工具所在服务器，例如上传到$HOME/module，使用示例如下：

```
--op_debug_config=
$HOME/module
/gm_debug.cfg
```

实际模型转换时，GatherV2,ReduceSum算子按照ccec_g,oom选项进行编译。
