资讯动态

CANN Runtime Adump 实战指南:从算子信息统计到异常算子 Dump 的四种落盘方案

发布时间:2026/9/20 22:31:08 来源:尧图企业网站定制
CANNAscend人工智能任务调度【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址https://gitcode.com/cann/runtime点击查看免费下载导读adump是 CANN Runtime 仓库中聚焦 Dump 能力的示例集合位于example/5_performance/adump以算子信息统计 → 回调 Dump → 配置式 Dump → 异常算子 Dump四条主线覆盖了 Runtime 侧数据采集的完整手段。读完本文你将掌握aclopStartDumpArgs/aclopStopDumpArgs、acldumpRegCallback/acldumpUnregCallback、aclmdlInitDump/aclmdlSetDump/aclmdlFinalizeDump以及acldumpGetExceptionInfoPath/acldumpSaveExceptionInfo四组接口的调用顺序、参数约束与适用场景并能够独立完成 Dump 文件的路径定位、格式转换与字段解读。总览adump 样例集的组织脉络adump目录下共有 4 个自包含的样例工程每个样例都是一个可独立编译运行的main.cpp程序公共工具tensor 创建、运行时初始化抽取在example/5_performance/adump/adump_tensor_utils.h中样例目录核心接口数据形态典型场景0_adump_argsaclopStartDumpArgs/aclopStopDumpArgs/acldumpGetPath算子信息文件算子类型、属性、输入输出 format/数据类型/shape排查算子编译选型、shape 适配1_adump_callbackacldumpRegCallback/acldumpUnregCallback回调函数接收的分块chunkDump 数据不想落盘、希望直接在进程内消费 Dump 数据2_model_dump_configaclmdlInitDump/aclmdlSetDump/aclmdlFinalizeDump/acldumpGetPath配置文件驱动的 tensor 数据落盘按配置文件精确控制 Dump 范围与路径3_save_exception_infoacldumpGetExceptionInfoPath/acldumpSaveExceptionInfo自定义 tensor 主动落盘到 Exception Dump 路径算子异常时主动保存自定义维测数据四个样例全部围绕同一个计算场景展开构造shape {4, 2}的 float 输入通过aclnnAdd单算子接口执行向量加法self alpha * other并在算子执行前后穿插 Dump 的开启、查询、关闭逻辑。这样读者可以把注意力完全放在 Dump 接口的调用时序上而不被算子逻辑干扰。一键运行全部样例顶层提供了串联脚本 example/5_performance/adump/run.sh会按固定顺序依次执行 4 个子样例并汇总结果samples(0_adump_args 1_adump_callback 2_model_dump_config 3_save_exception_info)脚本使用set -euo pipefail严格模式通过source ../../common/resolve_cann_env.sh解析 CANN 环境参见 example/common/resolve_cann_env.sh。每个子样例运行成功打印[SUCCESS]任一样例失败则failed1最终以非 0 退出码退出便于接入 CI 流水线。环境准备与编译运行四个样例的编译运行方式完全一致以任意一个子目录为例# ${install_root} 替换为 CANN 安装根目录默认安装在 /usr/local/Ascend source ${install_root}/cann/set_env.sh # 自动识别 SOC_VERSION 和 ASCENDC_CMAKE_DIR source ${git_clone_path}/example/set_sample_env.sh # 编译运行 bash run.sh其中每个子目录的 run.sh 完成cmake -B build -DASCEND_CANN_PACKAGE_PATH${ASCEND_INSTALL_PATH}→ 编译 → 安装 → 运行二进制并将输出写入output_msg.txt的完整流程。环境安装与运行的更多细节参见 example/README.md。从源码看公共初始化逻辑封装在 adump_tensor_utils.h 的InitRuntime中内部调用runtime::InitRuntimeAndCreateStream等价于aclInitaclrtSetDeviceaclrtCreateStream的组合CreateAclTensor则完成aclrtMallocACL_MEM_MALLOC_HUGE_FIRST、aclrtMemcpyH2D以及aclCreateTensor的完整封装。这意味着样例可以直接从算子信息统计开始讲起而无需关心样板代码。产品支持方面四个样例均支持 Ascend 950PR/Ascend 950DT、Atlas A3 训练/推理系列、Atlas A2 训练/推理系列产品。样例一aclopStartDumpArgs 算子信息统计功能与接口0_adump_args 演示了单算子执行场景下的算子信息 Dump调用aclopStartDumpArgs(uint32_t dumpType, const char *path)开启算子信息统计将算子信息文件输出到path参数指定的目录一个 shape 对应一个算子信息文件文件中包含算子类型、算子属性、算子输入输出的 format/数据类型/shape 等信息调用aclopStopDumpArgs(uint32_t dumpType)关闭统计。与 tensor 数据 Dump 不同算子信息统计只输出算子信息文件不输出 tensor 数据文件因此不能使用后续的 tensor Dump 转换命令处理。调用时序以 main.cpp 为参照核心调用链如下// 1. 初始化aclInit aclrtSetDevice aclrtCreateStream CHECK_ERROR(adump::InitRuntime(deviceId, stream, dumpCfgPath)); // 2. 开启算子信息 Dump输出到 /tmp CHECK_ERROR(aclopStartDumpArgs(ACL_OP_DUMP_OP_AICORE_ARGS, dumpPath)); // 3. 查询当前 Dump 输出路径本示例新增覆盖点 LogDumpPath(DATA_DUMP, dumpPath); // acldumpGetPath(dumpType) 按 Dump 类型返回路径为空时回退到调用方传入的路径 // 4. 构造 aclTensor / aclScalar执行 aclnnAddGetWorkspaceSize aclnnAdd // 5. aclrtSynchronizeStream 等待任务完成 // 6. aclrtMemcpy 将结果从 Device 拷贝回 Host 并打印 // 7. 关闭算子信息 Dump再销毁 Stream/Device/去初始化 CHECK_ERROR(aclopStopDumpArgs(ACL_OP_DUMP_OP_AICORE_ARGS));ACL_OP_DUMP_OP_AICORE_ARGS定义在 include/external/acl/acl_dump.h值为0x00000001U表示开启 AICore 算子参数算子信息的 Dump。acldumpGetPath的入参acldumpType是一个枚举本示例传入DATA_DUMP值为 4对应模型 Dump 或单算子 Dump 类型见 include/external/acl/acl_dump.h。配置与输出acl.json 用于aclInit初始化阶段的基础 Dump 配置{dump: {dump_path: ./, dump_list: [], dump_op_switch: on, dump_data: tensor}}dump_pathDump 落盘根路径dump_list为空数组表示不针对特定模型/算子做白名单筛选dump_op_switch: on开启单算子 Dump 开关dump_data: tensorDump 数据类型为 tensor 数据。运行成功后样例会在/tmp下生成算子信息文件并打印[INFO] The dump data path is /tmp. [INFO] acldumpGetPath returned dump path: ... [INFO] result[0] is: 1.000000 ... [INFO] Run the device_normal sample successfully. please make sure dump data has been in path: /tmp样例二acldumpRegCallback 回调式 Dump回调机制1_adump_callback 演示了不落盘、直接在进程内接收 Dump 数据的回调模式通过acldumpRegCallback注册回调函数Dump 数据以acldumpChunk分块结构传入回调通过acldumpUnregCallback取消注册。acldumpChunk是回调数据的最小载体其结构定义在 include/external/acl/acl_dump.h字段含义使用建议fileNameDump 数据原计划写入的绝对文件名用于按文件名归并同一个 tensor 或同一次 Dump 的数据块bufLendataBuf的字节长度判断本次回调携带的数据大小isLastChunk是否为最后一个数据块0否 /1是只有收到最后一块后才应认为该文件的数据接收完整offset当前数据块写入文件时的偏移-1表示追加写用于按偏移还原分块数据flag预留标志位当前未定义具体标志通常仅记录dataBufDump 数据内容地址柔性数组按bufLen读取字节数据再结合文件名或元信息解析回调实现要点以 main.cpp 中的回调实现为参考一个健壮的回调函数需要做三件事空指针与长度校验data nullptr直接返回失败sizeof(acldumpChunk) >// 注册回调示例 flag 传 0 CHECK_ERROR(acldumpRegCallback(DumpTensorCallback, 0)); LogDumpPath(DATA_DUMP, ./); // ... 执行 aclnnAdd 算子 ... CHECK_ERROR(aclrtSynchronizeStream(stream)); // 同步等待确保回调数据全部到达 PrintCallbackSummary(); // 打印汇总统计 acldumpUnregCallback(); // 去注册回调模式下acldumpGetPath返回的路径可用于与回调收到的fileName做对应判断数据原计划写入哪个目录。示例输出形如[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.分块还原原则对分块回调数据必须按fileName、offset和isLastChunk三个字段组合还原完整文件后再分析只收到中间块就下结论是不安全的。完整字段说明也可参考 dump_artifact_analysis.md 的回调字段一节。样例三aclmdlInitDump 配置式 Dump配置接口组合2_model_dump_config 演示了模型级 Dump 配置接口aclmdlInitDump→aclmdlSetDump(dumpCfgPath)→aclmdlFinalizeDump的组合用法。该接口本是模型场景的标准配置入口本示例将其用于单算子 API 场景恰好补全了adump目录中的配置式 Dump拼图。从 main.cpp 可以看到核心调用CHECK_ERROR(adump::InitRuntime(deviceId, stream)); // 注意此样例初始化不传 acl.json CHECK_ERROR(aclmdlInitDump()); // Dump 初始化 CHECK_ERROR(aclmdlSetDump(dumpCfgPath)); // 加载 Dump 配置文件 const char* dumpPath acldumpGetPath(DATA_DUMP); // 查询当前生效的 Dump 输出路径 // ... 执行 aclnnAdd 算子数据自动按配置落盘 ... CHECK_ERROR(aclmdlFinalizeDump()); // Dump 去初始化关键约束依据 docs/zh/api_ref/18_dump_configuration.md必须在aclInit之后、模型加载之前调用aclmdlInitDump如果已通过aclInit的 json 配置了 Dump 信息再调用aclmdlInitDump会返回失败——即配置文件式aclInit与接口配置式aclmdl 系列两种方式互斥同一进程内可按需多次执行aclmdlInitDump/aclmdlSetDump/aclmdlFinalizeDump循环为不同模型或不同执行阶段切换 Dump 配置多次aclmdlSetDump对同一模型采用覆盖策略。配置文件解析acl.json 采用单算子 Dump 场景推荐的配置{dump: {dump_path: ./, dump_list: [{}], dump_op_switch: on, dump_data: tensor}}与样例一相比dump_list从空数组[]变为[{}]——在单算子调用场景下dump_list: [{}]表示对当前进程内所有单算子调用开启 Dump这也是官方文档单算子调用场景下 Dump 配置示例的推荐写法参见 docs/zh/api_ref/18_dump_configuration.md。dump_op_switch: on与dump_data: tensor共同保证算子输入/输出 tensor 数据被落盘到dump_path当前目录./。示例输出确认了配置生效[INFO] Configured model dump path is: ... [INFO] result[0] is: 1.000000 ... [INFO] Run the model dump config sample successfully.样例四acldumpSaveExceptionInfo 异常算子自定义落盘场景与接口3_save_exception_info 面向部分组件或框架在算子异常时需要落盘自定义数据的诉求通过acl.json使能 Exception Dump 后组合使用acldumpGetExceptionInfoPath与acldumpSaveExceptionInfo把自定义 tensor 数据主动写入异常 Dump 路径。两个接口的函数原型include/external/acl/acl_dump.hACL_DUMP_WEAK ACL_FUNC_VISIBILITY aclError acldumpSaveExceptionInfo( const char* fileName, const char* userTag, const acldumpTensorInfo* tensors, size_t tensorCount); ACL_DUMP_WEAK ACL_FUNC_VISIBILITY aclError acldumpGetExceptionInfoPath(char* path, size_t maxLen);先决条件两个接口仅在不低于 25.0.RC1 版本的驱动、且已使能 Exception Dump 的平台上可用。由于它们以 weak 符号导出ACL_DUMP_WEAK示例在调用前显式判空——若当前安装的 CANN 包不提供该接口则打印告警并跳过保证样例在旧环境上不至于崩溃if (acldumpGetExceptionInfoPath nullptr || acldumpSaveExceptionInfo nullptr) { WARN_LOG(Exception Dump APIs are unavailable in the installed CANN package; skip this sample.); return 0; }调用流程与参数约束核心流程main.cpp初始化并加载开启 Exception Dump 的配置InitRuntime(deviceId, stream, ./acl.json)查询落盘根路径acldumpGetExceptionInfoPath(excDumpPath, sizeof(excDumpPath))成功返回形如dumpPath/extra-info/data-dump/deviceId/的路径注意路径已携带 deviceId构造acldumpTensorInfo复用算子的 device 地址、shape、dataType填充输入/输出三个 tensor落盘acldumpSaveExceptionInfo(save_exception_info, userTag, tensors.data(), tensors.size())。acl.json 使用异常 Dump 专用配置{ dump: { dump_path: ./, dump_scene: aic_err_brief_dump } }dump_scene是异常算子 Dump 的开关aic_err_brief_dump表示轻量化 exception dump导出 AI Core 错误算子的输入输出、workspace 数据。其他可选值依据 docs/zh/api_ref/18_dump_configuration.mdaic_err_norm_dump普通 exception dump在轻量化基础上额外导出 Shape、Data Type、Format 及属性信息aic_err_detail_dump在轻量化基础上额外导出 AI Core 内部存储、寄存器与调用栈仅支持 Atlas A2/A3 系列且需配套 25.0.RC1 或更高版本驱动配置后须在aclrtSetDevice之前调用本接口且aclmdlFinalizeDump无法完成 Dump 去初始化lite_exception旧版本兼容写法效果等同于aic_err_brief_dump。关键字段语义acldumpTensorInfo的完整定义在 include/external/acl/acl_dump.h落盘时必须满足的硬性约束包括addrType必须为ACL_DUMP_ADDR_RAW表示tensorAddr是 Device 上的原始数据地址接口直接以该地址读取数据placement必须为ACL_DUMP_PLACEMENT_DEVICE表示读取 Device 侧数据tensorSize必须大于 0tensorAddr不得为空shapeNum/originShapeNum不得超过ACL_DUMP_MAX_SHAPE_NUM值为 25否则返回ACL_ERROR_INVALID_PARAM未设置或为 0 时落盘文件中当前 shape 为空shape/originShape为定长数组仅前shapeNum/originShapeNum个维度有效动态 shape 或格式转换场景下originShapeNum需与originShape有效维度保持一致。示例中的FillTensorInfo辅助函数main.cpp用memset_s清零结构体后逐字段赋值并同步填充shape与originShape是构造该结构体的标准写法。文件命名与 userTagfileName参数有严格的路径约束必须是相对路径不能为空、不能包含..最终落盘位置被限定在 Exception Dump 根路径之内。为避免重复运行时覆盖已有文件落盘文件名会在fileName基础上自动追加.custom.{timestamp}后缀timestamp为毫秒级时间戳例如传入save_exception_info实际文件名形如save_exception_info.custom.20260721153012345。userTag是用户自定义附加维测信息允许为 NULL非空时会被写入 Dump 文件 proto 头的OpAttr字段中。示例传入componentdemo;stageforward;notesave_exception_info_example演示了用键值对形式携带组件名、执行阶段等上下文信息。由于userTag会进入 proto 头落盘后通过异常 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] Run the save_exception_info sample successfully.Dump 文件路径定位规则无论使用哪种 Dump 方式定位文件落盘位置是第一优先级问题。综合 dump_artifact_analysis.md 的说明各类 Dump 的路径定位方式如下类型说明路径定位方式模型 Dump导出模型中算子的输入/输出数据配置文件dump_path环境变量不覆盖单算子数据 Dump导出单算子的输入/输出 tensor 数据配置文件dump_path算子信息统计算子类型、属性、输入输出 format/数据类型/shapeaclopStartDumpArgs的path参数溢出算子 Dump导出溢出算子的输入和输出数据配置文件dump_path异常算子 Dump导出异常算子的输入输出、workspace、Tiling 等信息dumpPath/extra-info/data-dump/deviceId/异常算子 Dump 的根路径存在优先级ASCEND_DUMP_PATHASCEND_WORK_PATH 配置文件dump_path 当前目录./。也可调用acldumpGetExceptionInfoPath直接查询。所有类型都可以用acldumpGetPath(acldumpType)按类型查询当前生效路径。文件转换与字段解读tensor Dump 文件转换aclopStartDumpArgs生成的算子信息文件不适用于 tensor Dump 转换命令模型 Dump、单算子数据 Dump、异常算子 Dump 产生的 tensor 文件可用msaccucmp.py转换为 numpy 格式msaccucmp.py convert -d dump_file -out output_dir转换完成后用 Python 快速查看数据import numpy as np data np.load(converted_file.npy) print(data.shape) print(data.dtype) print(data)数据量较大时建议先查看 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())Tensor 元信息字段异常算子 Dump 或自定义 tensor 落盘场景中acldumpTensorInfo的关键字段解读如下详见 dump_artifact_analysis.md字段含义使用建议typeTensor 类型区分输入、输出等判断数据在算子中的角色tensorSizeTensor 数据大小字节与 shape×dataType 计算结果比对判断数据是否完整formatTensor 格式与算子期望格式比对排查格式不匹配dataTypeTensor 数据类型转换或查看数据时须按该类型解释原始字节tensorAddrTensor 数据地址落盘时标识待读取的数据地址addrType地址类型调用acldumpSaveExceptionInfo时必须为ACL_DUMP_ADDR_RAWplacement数据所在位置调用acldumpSaveExceptionInfo时必须为ACL_DUMP_PLACEMENT_DEVICEshapeNumshape有效维度个数不得超过 25否则返回ACL_ERROR_INVALID_PARAMoriginShapeNumoriginShape有效维度个数不得超过 25动态 shape 或格式转换场景需与originShape有效维度一致shape/originShape当前 shape / 原始 shape仅前shapeNum/originShapeNum个维度有效分析建议先根据路径优先级、dump_path或接口返回路径确认文件是否生成再选择需要转换和查看的文件比对精度问题时优先确认 shape、dataType 和 format 是否符合预期再比较数值差异对异常 Dump先查看异常算子名称、输入输出、workspace 和 Tiling 信息再结合 Runtime 日志或 AI Core Error 信息定位对分块回调数据必须按fileName、offset和isLastChunk还原完整文件后再分析。接口调用顺序对照与选型建议最后将四组接口的调用骨架汇总如下便于直接对照落地场景开启/初始化使用关闭/去初始化算子信息统计aclopStartDumpArgs(type, path)执行算子aclopStopDumpArgs(type)回调式 DumpacldumpRegCallback(cb, flag)执行算子 回调消费 chunkacldumpUnregCallback()配置式 DumpaclmdlInitDump()aclmdlSetDump(cfg)执行算子数据按配置落盘aclmdlFinalizeDump()异常自定义落盘aclInitacl.json 使能dump_sceneacldumpGetExceptionInfoPathacldumpSaveExceptionInfo随aclFinalize结束选型参考只需确认算子以什么 shape/format/数据类型被编译执行→ 用aclopStartDumpArgs算子信息统计开销最小、不含 tensor 数据需要拿到 tensor 数据又不想产生磁盘文件如直接送入比对工具或日志系统→ 用acldumpRegCallback回调模式需要精细控制 Dump 范围、路径或模型与单算子混合场景 → 用aclmdlInitDump配置式接口算子异常时希望额外把自定义数据如中间变量、上下文 tag保存下来辅助定位 → 用acldumpSaveExceptionInfo写入 Exception Dump 路径。注意配置入口互斥aclInit的 json 配置与aclmdlSetDump的配置接口不可同时使用先aclInit配置 Dump 后再aclmdlInitDump会失败规划工程时要二选一。延伸阅读Dump 配置接口完整文档aclmdlInitDump/aclmdlSetDump/acldumpRegCallback/acldumpGetPath/aclopStartDumpArgs/acldumpGetExceptionInfoPath/acldumpSaveExceptionInfo的完整参数与约束说明Dump 文件解读文件目录规则、转换命令与字段含义接口头文件acldumpChunk、acldumpTensorInfo、acldumpType、ACL_DUMP_MAX_SHAPE_NUM等类型与宏的精确定义四个样例的完整源码与英文版说明0_adump_args、1_adump_callback、2_model_dump_config、3_save_exception_info。赞分享CANNAscend人工智能任务调度【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址https://gitcode.com/cann/runtime点击查看免费下载相关推荐CANN Runtime 算子信息 Dump 实战基于 aclopStartDumpArgs 的单算子执行与算子参数落盘CANN Runtime 算子信息 Dump 实战基于 aclopStartDumpArgs 的单算子执行与算子参数落盘 导读 本文围绕 CANN/runtiCANNAscend人工智能任务调度CANN Runtime 单算子 AICore 参数 Dump 实践基于 aclopStartDumpArgs 的算子信息落盘指南CANN Runtime 单算子 AICore 参数 Dump 实践基于 aclopStartDumpArgs 的算子信息落盘指南 导读 本文基于 CANN/CANNAscend人工智能任务调度CANN Runtime Dump配置接口实战从算子数据落盘到异常维测的完整指南CANN Runtime Dump配置接口实战从算子数据落盘到异常维测的完整指南 本文围绕 CANN Runtime 提供的 Dump 配置接口 aclmdCANNAscend人工智能任务调度上一篇PingFangSC苹果平方字体3分钟掌握专业字体应用全攻略下一篇Mautic审计日志操作记录与追踪创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价