CANN Runtime Dump 能力全解析:从算子参数 Dump 到异常算子 Dump 的四级演进与文件分析方法

CANN Runtime Dump 能力全解析:从算子参数 Dump 到异常算子 Dump 的四级演进与文件分析方法 CANNAscend人工智能任务调度【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址https://gitcode.com/cann/runtime点击查看免费下载导读Dump 功能是 CANN Runtime 在算子执行异常、精度问题与性能分析场景下的核心维测手段。本指南以example/5_performance/adump/目录下的示例为主线系统讲解 CANN Runtime 提供的 Dump 能力体系——从算子信息统计 → 回调式 Dump → 配置化 Dump → 异常算子 Dump四个递进层次覆盖aclopStartDumpArgs、acldumpRegCallback、aclmdlInitDump、acldumpSaveExceptionInfo等关键接口的调用方式并结合dump_artifact_analysis_en.md给出 Dump 文件路径定位、转换命令与字段含义的完整分析方法。读完本文你将掌握 Dump 的四种打开方式、输出路径的优先级规则以及如何通过回调字段和 Tensor 字段对 Dump 产物进行准确的诊断与定位。一、adump 示例目录与 Dump 能力全景在 CANN Runtime 仓库中example/5_performance/adump/ 目录集中承载了 Dump 相关的全部示例。从示例的组织结构可以看出 Dump 能力的演进路线即operator information statistics算子信息统计→ callback Dump回调式 Dump→ configuration-based Dump配置化 Dump→ Exception operator Dump异常算子 Dump四个阶段0_adump_args通过aclopStartDumpArgs/aclopStopDumpArgs导出单算子参数算子信息文件并查询当前 Dump 输出路径1_adump_callback通过acldumpRegCallback/acldumpUnregCallback注册回调以回调方式接收 Dump 数据并演示acldumpChunk的基础解析2_model_dump_config通过aclmdlInitDump/aclmdlSetDump/acldumpGetPath/aclmdlFinalizeDump组合演示基于配置文件的 Dump3_save_exception_info通过acldumpGetExceptionInfoPath/acldumpSaveExceptionInfo主动将自定义张量数据保存到异常算子 Dump 路径。所有示例均支持 Ascend 950PR/Ascend 950DT、Atlas A3 训练/推理系列产品、Atlas A2 训练/推理系列产品。二、环境准备与一键运行2.1 运行前置条件已安装 CANN 开发运行环境默认安装根目录为/usr/local/Ascend已获取本仓库cann/runtime的示例代码。2.2 编译运行步骤参考各子示例 README 中的统一流程以 0_adump_args/README_en.md 为例# 1. 加载 CANN 环境变量${install_root} 为 CANN 安装根目录默认 /usr/local/Ascend source ${install_root}/cann/set_env.sh # 2. 自动识别 SOC_VERSION 与 ASCENDC_CMAKE_DIR source ${git_clone_path}/example/set_sample_env.sh # 3. 编译并运行单个示例 bash run.sh2.3 批量运行全部 Dump 示例adump/run.sh 提供了顺序执行全部四个示例的入口脚本bash run.sh脚本行为如下首先source ../../common/resolve_cann_env.sh并调用resolve_cann_env完成 CANN 环境解析依次遍历0_adump_args、1_adump_callback、2_model_dump_config、3_save_exception_info四个示例目录在每个子目录内执行bash run.sh每个示例执行成功打印[SUCCESS]失败打印[FAILURE]并将failed置 1任一示例失败脚本最终返回非零状态码exit 1全部通过则打印[SUCCESS] All adump samples completed successfully.。这种逐示例执行 失败即退出非零的设计便于在 CI 或批量验证场景中快速定位失败项。三、示例一0_adump_args —— 单算子参数 Dump 与路径查询3.1 功能定位在单算子执行场景下Dump 算子信息并输出到path参数指定的目录。其特点在于每个 shape 对应一个算子信息文件文件内容包含算子类型、算子属性、算子输入输出 format、数据类型、shape 等信息。需要注意的是aclopStartDumpArgs输出的是算子信息文件而非张量数据文件。3.2 核心调用序列从 0_adump_args/main.cpp 的源码可以看到完整流程// 1. 初始化aclInit 设置 Device 创建 Stream CHECK_ERROR(adump::InitRuntime(deviceId, stream, dumpCfgPath)); // dumpCfgPath ./acl.json // 2. 开启算子参数 Dump 功能 CHECK_ERROR(aclopStartDumpArgs(ACL_OP_DUMP_OP_AICORE_ARGS, dumpPath)); // dumpPath /tmp LogDumpPath(DATA_DUMP, dumpPath); // 查询当前 Dump 输出路径 // 3. 构造输入输出shape 为 {4, 2} 的 aclTensor调用算子库接口 CHECK_ERROR(aclnnAddGetWorkspaceSize(self, other, alpha, out, workspaceSize, executor)); CHECK_ERROR(aclnnAdd(workspaceAddr, workspaceSize, executor, stream)); // 4. 等待任务完成并拷贝结果 CHECK_ERROR(aclrtSynchronizeStream(stream)); CHECK_ERROR(aclrtMemcpy(resultData.data(), ..., ACL_MEMCPY_DEVICE_TO_HOST)); // 5. 关闭算子参数 Dump 功能 CHECK_ERROR(aclopStopDumpArgs(ACL_OP_DUMP_OP_AICORE_ARGS)); // 6. 释放资源并反初始化 CHECK_ERROR(aclrtDestroyStream(stream)); CHECK_ERROR(aclrtResetDeviceForce(deviceId)); CHECK_ERROR(aclFinalize());其中关键 API接口作用aclopStartDumpArgs(acldumpType dumpType, const char *path)开启算子参数 Dumppath指定算子信息文件的输出目录aclopStopDumpArgs(acldumpType dumpType)关闭算子参数 DumpacldumpGetPath(acldumpType dumpType)查询指定 Dump 类型的当前输出路径示例同时覆盖了 Device 管理aclrtSetDevice/aclrtSynchronizeDevice/aclrtResetDeviceForce、Stream 管理aclrtCreateStream/aclrtSynchronizeStream/aclrtDestroyStream、内存管理aclrtMalloc/aclrtFree与数据搬移aclrtMemcpy等 Runtime 基础能力。3.3 配置与输出该示例的 acl.json 内容为{dump: {dump_path: ./, dump_list: [], dump_op_switch: on, dump_data: tensor}}示例运行后的典型输出如下摘自 0_adump_args/README_en.md[INFO] The dump data path is /tmp. [INFO] acldumpGetPath returned dump path: ... [INFO] result[0] is: 1.000000 ... [INFO] result[7] is: 11.000000 [INFO] Run the device_normal sample successfully. please make sure dump data has been in path: /tmp四、示例二1_adump_callback —— 回调方式接收 Dump 数据4.1 功能定位当不希望 Dump 数据直接落盘、而希望在宿主进程内即时处理时可以通过注册回调函数的方式接收 Dump 数据。示例在单算子执行场景下注册acldumpRegCallback回调在回调中解析acldumpChunk的 fileName、offset、isLastChunk、flag 及数据预览并输出汇总统计。4.2 核心调用序列从 1_adump_callback/README_en.md 可知其关键接口初始化aclInit→acldumpRegCallback注册 Dump 回调→acldumpGetPath查询输出路径→acldumpUnregCallback注销回调→aclFinalize回调数据解析在回调内解析acldumpChunk的 fileName、offset、isLastChunk、flag 与数据预览acldumpGetPath与回调中收到的文件名做对应确认 Dump 数据来源目录。其配置同样位于 1_adump_callback/acl.json与算子参数示例一致{dump: {dump_path: ./, dump_list: [], dump_op_switch: on, dump_data: tensor}}4.3 典型输出[INFO] acldumpGetPath returned dump path: ... [INFO] Receive dump tensor data success. file..., bufLen..., isLastChunk..., offset..., flag..., preview... ... [INFO] Dump callback summary: total chunks..., total bytes..., total files... [INFO] Run the device_normal sample successfully.输出中的Dump callback summary直接给出本次回调接收到的分片总数、总字节数与文件总数用于快速判断 Dump 数据是否完整。五、示例三2_model_dump_config —— 基于配置文件的模型级 Dump5.1 功能定位该示例在单算子 API 场景中使用模型级 Dump 配置接口与目录中其他示例互补展示配置化 Dump 的用法。配置文件采用单算子 Dump 场景推荐的dump_op_switch: on配置。5.2 核心调用序列初始化aclInit→aclmdlInitDump初始化 Dump 配置→aclmdlSetDump加载 Dump 配置文件→acldumpGetPath查询当前 Dump 输出路径→aclmdlFinalizeDump结束当前 Dump 配置→aclFinalize其余为常规的 Device/Stream/内存/搬移管理。其 acl.json 与算子参数示例的差别在于dump_list中放入了一个空对象[{}]{dump: {dump_path: ./, dump_list: [{}], dump_op_switch: on, dump_data: tensor}}5.3 典型输出[INFO] Configured model dump path is: ... [INFO] result[0] is: 1.000000 ... [INFO] Run the model dump config sample successfully.六、示例四3_save_exception_info —— 主动保存自定义张量到异常算子 Dump 路径6.1 功能定位在实际工程中部分组件或框架需要在算子发生异常时保存自定义数据。该示例通过dump_sceneaic_err_brief_dump开启异常算子 Dump先运行一个正常的aclnnAdd算子随后调用acldumpGetExceptionInfoPath查询异常算子 Dump 根路径含 deviceId构造acldumpTensorInfo复用算子的 Device 地址、shape 与数据类型调用acldumpSaveExceptionInfo在该路径下保存张量数据userTag会写入 Dump 文件 proto 头的 OpAttr 中。6.2 关键约束务必遵守fileName是相对路径不能为空也不能包含..段最终落盘位置被限制在异常算子 Dump 根路径之内避免重复覆盖为避免重复运行覆盖已有文件示例在fileName后追加.custom.{毫秒级时间戳}后缀作为实际落盘文件名例如save_exception_info变为save_exception_info.custom.20260721153012345必须先开启异常算子 Dump调用前必须通过dump_sceneaic_err_brief_dump开启异常算子 Dump否则接口返回失败地址与放置类型该接口直接把tensorAddr作为 Device 数据地址读取因此示例将addrType置为ACL_DUMP_ADDR_RAW、placement置为ACL_DUMP_PLACEMENT_DEVICE。6.3 配置与输出3_save_exception_info/acl.json 采用异常算子 Dump 场景的专用配置{ dump: { dump_path: ./, dump_scene: aic_err_brief_dump } }典型输出[INFO] acldumpGetExceptionInfoPath success, exception dump path is: .../extra-info/data-dump/0/ [INFO] acldumpSaveExceptionInfo success, data has been saved under exception dump path: .../extra-info/data-dump/0/ [INFO] result[0] is: 1.000000 ... [INFO] Run the save_exception_info sample successfully.七、Dump 文件路径规则与优先级依据 dump_artifact_analysis_en.md 的说明Dump 文件目录由 Dump 类型、配置与环境变量共同决定具体规则如下模型 Dump、单算子数据 Dump、溢出算子 Dump目录由配置文件中的dump_path指定环境变量不会覆盖该路径算子信息统计目录由aclopStartDumpArgs(uint32_t dumpType, const char *path)的path参数指定该接口只输出算子信息文件不输出张量数据文件当前输出路径查询可调用acldumpGetPath(acldumpType dumpType)查询某 Dump 类型的当前输出路径异常算子 Dump 根路径为dumpPath/extra-info/data-dump/deviceId/其路径优先级为ASCEND_DUMP_PATHASCEND_WORK_PATH 配置文件中的dump_path 当前目录./也可调用acldumpGetExceptionInfoPath(char *path, size_t maxLen)查询。各 Dump 类型的路径定位方式汇总类型说明路径定位方式模型 Dump导出模型中算子的输入输出数据配置文件中的dump_path单算子数据 Dump导出单个算子的输入输出张量数据配置文件中的dump_path算子信息统计导出算子信息文件算子类型、属性、输入输出 format、数据类型、shape 等aclopStartDumpArgs的path参数溢出算子 Dump导出溢出算子的输入输出数据配置文件中的dump_path异常算子 Dump导出异常算子的输入、输出、workspace、Tiling 等信息ASCEND_DUMP_PATH、ASCEND_WORK_PATH、配置文件dump_path或当前目录./下的dumpPath/extra-info/data-dump/deviceId/八、Dump 文件转换与数据分析8.1 张量 Dump 文件转换使用msaccucmp.py convert将张量 Dump 文件转换为便于查看的格式以下示例以 NumPy 为目标msaccucmp.py convert -d dump_file -out output_dir注意aclopStartDumpArgs生成的算子信息文件不适用于上述张量 Dump 转换命令。转换完成后用 Python 直接查看 NumPy 数据import numpy as np data np.load(converted_file.npy) print(data.shape) print(data.dtype) print(data)8.2 大数据量下的快速体检当数据量较大时应优先检查 shape、dtype、最大值、最小值以及是否包含 NaN 或 Inf而不是直接打印全部数据import numpy as np data np.load(converted_file.npy) print(shape:, data.shape) print(dtype:, data.dtype) print(min:, np.nanmin(data)) print(max:, np.nanmax(data)) print(has_nan:, np.isnan(data).any()) print(has_inf:, np.isinf(data).any())这套先 shape/dtype/范围/异常值再数值比对的顺序与后文的分析建议一脉相承能够显著减少精度问题排查时的无效操作。九、回调字段与张量字段详解9.1acldumpChunk回调字段注册acldumpRegCallback回调后回调函数可通过acldumpChunk获取分块chunk的 Dump 数据。各字段含义与建议如下字段含义分析建议fileNameDump 数据原本计划写入的绝对文件名用于按文件名合并同一张量或同一次 Dump 的分块bufLendataBuf的字节长度用于判断当前回调携带的数据量isLastChunk是否为最后一个分块0否1是只有收到最后一个分块后文件数据才算完整offset当前分块写入文件时使用的偏移量-1表示追加用于按偏移量还原分块数据flag保留标志位当前未定义具体标志通常只需记录dataBufDump 数据内容地址按bufLen读取字节数据再结合文件名或元数据解析9.2acldumpTensorInfo张量字段在异常算子 Dump 或自定义张量保存场景中acldumpTensorInfo的关键字段如下字段含义分析建议type张量类型如输入、输出用于判断数据在算子中的角色tensorSize张量数据大小字节与 shape 和 dataType 推算的结果比对判断数据是否完整format张量格式与算子期望格式比对排查格式不匹配问题dataType张量数据类型转换或查看原始字节时必须使用tensorAddr张量数据地址用于标识要保存的数据地址addrType张量地址类型调用acldumpSaveExceptionInfo时必须为ACL_DUMP_ADDR_RAW表示tensorAddr是 Device 上的原始数据地址placement张量数据放置位置调用acldumpSaveExceptionInfo时必须为ACL_DUMP_PLACEMENT_DEVICE表示读取 Device 侧数据shapeNumshape中有效维度的数量不得超过 25否则接口返回ACL_ERROR_INVALID_PARAM不设置或为 0 时保存文件中当前 shape 为空originShapeNumoriginShape中有效维度的数量不得超过 25在动态 shape 或格式转换场景下需与originShape的有效维度一致shape张量当前 shape仅前shapeNum个维度有效可与模型或算子的输入输出规格比对originShape张量原始 shape仅前originShapeNum个维度有效用于在动态 shape 或格式转换场景下追溯原始维度十、Dump 问题定位的实战建议综合 dump_artifact_analysis_en.md 与各示例的实际用途可按以下顺序展开分析先定位文件根据路径优先级、配置文件dump_path或 API 返回的路径确认文件是否按预期生成再选择需要转换和查看的文件精度问题先查元数据比对 shape、dataType、format 是否符合预期再比较数值差异避免在元数据错误的情况下误判数值结果异常算子 Dump 结合日志先查看异常算子名称、输入、输出、workspace 与 Tiling 信息再结合 Runtime 日志或 AI Core Error 信息定位问题分块数据先还原再分析对回调方式接收的分块数据必须依据fileName、offset、isLastChunk还原出完整文件后再进行分析切忌对单个分块直接下结论。十一、小结CANN Runtime 的 adump 示例目录以四个递进示例完整覆盖了 Dump 能力的不同打开方式aclopStartDumpArgs面向算子信息统计与单算子参数导出acldumpRegCallback面向进程内实时接收分块数据aclmdlInitDump/aclmdlSetDump面向配置文件驱动的模型级 DumpacldumpGetExceptionInfoPath/acldumpSaveExceptionInfo面向异常场景下自定义张量的主动保存。配合acldumpGetPath的路径查询能力与msaccucmp.py convert的转换工具链开发者可以在算子精度、异常与溢出排查中快速建立开启 Dump → 定位文件 → 转换数据 → 校验元数据 → 数值比对的完整工作流。更多 API 的调用顺序与参数约束可进一步参考 Dump 配置 API 参考文档。赞分享CANNAscend人工智能任务调度【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址https://gitcode.com/cann/runtime点击查看免费下载相关推荐CANN Runtime 回调式 Dump 实战基于 acldumpRegCallback 解析单算子 Dump 数据块CANN Runtime 回调式 Dump 实战基于 acldumpRegCallback 解析单算子 Dump 数据块 导读 本文以 CANN RuntimCANNAscend人工智能任务调度CANN Runtime 算子信息 Dump 实战基于 aclopStartDumpArgs 的单算子执行与算子参数落盘CANN Runtime 算子信息 Dump 实战基于 aclopStartDumpArgs 的单算子执行与算子参数落盘 导读 本文围绕 CANN/runtiCANNAscend人工智能任务调度CANN Runtime 单算子 AICore 参数 Dump 实践基于 aclopStartDumpArgs 的算子信息落盘指南CANN Runtime 单算子 AICore 参数 Dump 实践基于 aclopStartDumpArgs 的算子信息落盘指南 导读 本文基于 CANN/CANNAscend人工智能任务调度上一篇推荐开源项目log4cplus - 强大的C日志库下一篇Tess4J核心功能解析从图片到PDF的OCR全流程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考