news 2026/9/10 11:32:21

CANN/ge图编译调试参数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/ge图编译调试参数

功能调试

【免费下载链接】geGE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力,并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge

DEBUG_DIR

用于配置保存算子编译生成的调试相关的过程文件的路径,过程文件包括但不限于算子.o(算子二进制文件)、.json(算子描述文件)、.cce等文件。此参数实际对应的options参数为ge.debugDir

默认生成在当前路径下。

使用约束:

  • 如果要自行指定算子编译的过程文件存放路径,需DEBUG_DIR参数与OP_DEBUG_LEVEL参数配合使用,且当OP_DEBUG_LEVEL取值为0时,不能使用DEBUG_DIR参数。
  • 算子编译生成的调试文件存储路径,除DEBUG_DIR参数设置的方式外,还可以配置环境变量ASCEND_WORK_PATH,几种方式优先级为:配置参数“DEBUG_DIR”>环境变量ASCEND_WORK_PATH >默认存储路径。关于环境变量ASCEND_WORK_PATH的详细说明请参见《环境变量参考》。

配置示例

{ge::ir_option::OP_DEBUG_LEVEL, "1"}, {ge::ir_option::DEBUG_DIR, "/home/test/module/out_debug_info"}

产品支持情况:

全量芯片支持。

OP_DEBUG_LEVEL

算子编译debug功能开关。此参数实际对应的options参数为ge.opDebugLevel

如果要自行指定算子编译的过程文件存放路径,则需要通过DEBUG_DIR参数指定,OP_DEBUG_LEVEL取值为0时,使用DEBUG_DIR参数不生效。

参数取值:

  • 0:(默认值)不开启算子debug功能,在当前执行路径不生成算子编译目录kernel_meta。

  • 1:开启算子debug功能,在当前执行路径生成kernel_meta文件夹,并在该文件夹下生成*.o(算子二进制文件)、*.json文件(算子描述文件)和TBE指令映射文件(算子cce文件*.cce和python-cce映射文件*_loc.json),用于后续分析AICore Error问题。

    Ascend 950PR/Ascend 950DT不会生成TBE指令映射文件。

  • 2:开启算子debug功能,在当前执行路径生成kernel_meta文件夹,并在该文件夹下生成*.o(算子二进制文件)、*.json文件(算子描述文件)和TBE指令映射文件(算子cce文件*.cce和python-cce映射文件*_loc.json),用于后续分析AICore Error问题,同时设置为2,还会关闭编译优化开关、开启ccec调试功能(ccec编译器选项设置为-O0-g)。

    Ascend 950PR/Ascend 950DT不会生成TBE指令映射文件。

  • 3:不开启算子debug功能,在当前执行路径生成kernel_meta文件夹,并在该文件夹中生成*.o(算子二进制文件)和*.json文件(算子描述文件),分析算子问题时可参考。

  • 4:不开启算子debug功能,在当前执行路径生成kernel_meta文件夹,并在该文件夹下生成*.o(算子二进制文件)、*.json文件(算子描述文件)、TBE指令映射文件(算子cce文件*.cce)和UB融合计算描述文件({$kernel_name}_compute.json),可在分析算子问题时进行问题复现、精度比对时使用。

    Ascend 950PR/Ascend 950DT不会生成TBE指令映射文件和UB融合计算描述文件。

[!NOTE]说明

  • 若OP_DEBUG_LEVEL配置为0,同时配置了OP_DEBUG_CONFIG参数,该场景下在当前执行路径会保留算子编译目录kernel_meta。

  • 若OP_DEBUG_LEVEL配置为0,同时设置了NPU_COLLECT_PATH环境变量,则会始终保留编译目录kernel_meta;若设置了ASCEND_WORK_PATH环境变量,则保留在该环境变量指定路径下,若无ASCEND_WORK_PATH环境变量,则保留在当前执行路径。

  • 训练执行时,建议配置为0或3。如果需要进行问题定位,再选择调试开关选项1和2,是因为加入了调试功能会导致网络性能下降。

  • 配置为2(即开启ccec编译选项)时,会导致算子Kernel(*.o文件)大小增大。动态Shape场景下,由于算子编译时会遍历可能的Shape场景,因此可能会导致算子Kernel文件过大而无法进行编译,此种场景下,建议不要配置ccec编译选项。 由于算子Kernel文件过大而无法编译的报错日志示例如下:

    message:link error ld.lld: error: InputSection too large for range extension thunk ./kernel_meta_xxxxx.o
  • debug功能开关打开场景下,若模型中含有如下通算融合算子,算子编译目录kernel_meta中,不会生成下述算子的*.o、*.json、*.cce文件。

    MatMulAllReduce

    MatMulAllReduceAddRmsNorm

    AllGatherMatMul

    MatMulReduceScatter

    AlltoAllAllGatherBatchMatMul

    BatchMatMulReduceScatterAlltoAll

配置示例:

{ge::ir_option::OP_DEBUG_LEVEL, "1"}

产品支持情况:

全量芯片支持。

OP_DEBUG_CONFIG

Global Memory内存检测功能开关。此参数实际对应的options参数为op_debug_config

参数取值:

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

  • 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....

配置示例:

{ge::ir_option::OP_DEBUG_CONFIG, "/root/test0.cfg"}

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

op_debug_config=ccec_g,oom

使用约束:

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

  • 支持指定算子名称或者算子类型。
  • 算子之间使用英文逗号分隔,若为算子类型,则以OpType::TypeName格式进行配置,支持算子类型和算子名称混合配置。
  • 要编译的算子,必须放在OP_DEBUG_CONFIG参数指定的配置文件中。

配置示例如下,test0.cfg文件中增加如下信息:

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

模型编译时,_GatherV2,ReduceSum_算子按照ccec_g,oom选项进行编译。

[!NOTE]说明

  • 开启ccec编译选项的场景下(即ccec_O0、ccec_g选项),会增大算子Kernel(*.o文件)的大小。动态shape场景下,由于算子编译时会遍历可能存在的所有场景,最终可能会导致由于算子Kernel文件过大而无法进行编译的情况,此种场景下,建议不要开启ccec编译选项。 由于算子kernel文件过大而无法编译的日志显示如下: message:link error ld.lld:error: InputSection too large for range extension thunk./kernel_meta_xxxxx.o:(xxxx)

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

    ...there is an aivec error exception, core id is 49, error code = 0x4 ...
  • 若配置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

产品支持情况:

全量芯片支持。

OPTION_SCREEN_PRINT_MODE

控制图编译过程是否打屏。此参数实际对应的options参数为ge.screen_print_mode

参数取值:

  • enable:打屏,默认为enable。
  • disable:不打屏。

配置示例:

{ge::ir_option::OPTION_SCREEN_PRINT_MODE, "disable"}

产品支持情况:

全量芯片支持。

OPTION_EXPORT_COMPILE_STAT

配置图编译过程中是否生成算子融合信息(包括图融合和UB融合)的结果文件fusion_result.json。此参数实际对应的options参数为ge.exportCompileStat

该文件用于记录图编译过程中使用的融合规则,而精度比对中的FUSION_SWITCH_FILE参数可以关闭指定的融合规则,关闭的融合规则,不会在fusion_result.json文件中呈现,文件中:

  • session_and_graph_id_xx_xx:表示融合结果所属线程和图编号。

  • graph_fusion:表示图融合。

  • ub_fusion:表示UB融合

    Ascend 950PR/Ascend 950DT不支持UB融合,不会生成该信息

  • match_times:表示图编译过程中匹配到的融合规则次数。

  • effect_times:表示实际生效的次数。

  • repository_hit_times:优化UB融合知识库命中的次数

    Ascend 950PR/Ascend 950DT不支持UB融合,不会生成该信息

参数取值:

  • 0:不生成算子融合信息结果文件。
  • 1:(默认值)程序运行正常退出时,生成算子融合信息结果文件。
  • 2:图编译完成时,生成算子融合信息结果文件。即如果图编译已完成,后续程序提前中断,也会生成算子融合信息结果文件。

[!NOTE]说明

  • 若未设置ASCEND_WORK_PATH环境变量,结果文件默认生成在执行脚本的当前路径;若设置了ASCEND_WORK_PATH环境变量,则保存路径为:$ASCEND_WORK_PATH/FE/${进程号}/fusion_result.json。环境变量详细说明请参见《环境变量参考》。
  • 通过FUSION_SWITCH_FILE参数关闭的融合规则,不会在fusion_result.json文件中呈现。

配置示例:

{ge::ir_option::OPTION_EXPORT_COMPILE_STAT, "1"}

产品支持情况:

全量芯片支持。

【免费下载链接】geGE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前端的友好接入能力,并同时支持 onnx、pb 等主流模型格式的解析与编译。项目地址: https://gitcode.com/cann/ge

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 11:32:04

RHCSA认证实战:Linux系统管理核心技能解析

1. RHCSA认证与首次作业解析作为红帽认证系统管理员&#xff08;RHCSA&#xff09;的入门级认证&#xff0c;它不仅是Linux系统管理员的职业敲门砖&#xff0c;更是检验实操能力的试金石。记得我十年前第一次接触RHCSA作业时&#xff0c;那个创建特定权限目录的题目让我折腾到凌…

作者头像 李华
网站建设 2026/9/10 11:27:48

CVAT 数据标注平台 Docker 快速部署指南

CVAT 数据标注平台 Docker 快速部署指南 【免费下载链接】cvat Computer Vision Annotation Tool (CVAT) is a leading platform for building high-quality visual datasets for vision AI. It offers open-source, cloud, and enterprise products, as well as labeling serv…

作者头像 李华
网站建设 2026/9/10 11:26:31

C语言核心概念:关键字、常量、宏与指针详解

1. C语言核心概念深度解析在C语言编程中&#xff0c;关键字、常量和宏构成了代码的基础骨架&#xff0c;而指针则是这门语言的灵魂所在。作为从1972年诞生至今仍活跃在系统编程领域的元老级语言&#xff0c;C语言的这些基础概念直接影响着代码的质量和性能。我见过太多初学者在…

作者头像 李华