ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

RegisterCallBackFunc 完整使用指南:3 步注册 Summary 与 Checkpoint 回调

RegisterCallBackFunc 完整使用指南:3 步注册 Summary 与 Checkpoint 回调 RegisterCallBackFunc 完整使用指南3 步注册 Summary 与 Checkpoint 回调【免费下载链接】awesome-design-systems ⚒ A collection of awesome design systems项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-design-systems本文基于本项目awesome-design-systems收录的 GEGraph EngineAPI 素材讲解 RegisterCallBackFunc 接口如何注册回调函数注册之后GE 在执行带有 Summary、Checkpoint 算子的图时会自动回调你提供的函数把运行结果直接送到你的代码里。场景切入什么时候你一定会用到它一句话结论只要你的图中有 Summary 或 Checkpoint 算子就必须先注册对应回调否则下发时会直接报错。GE 的很多信息训练摘要、检查点数据等不会主动返回给你的程序而是通过回调通道推送。触发条件很明确当你下发给 GE 的图中带有Summary、Checkpoint 算子时GE 会调用你注册的回调函数。如果你只是跑普通前向图、不涉及这两类算子这个接口可以完全不用碰。你可能会问那到底注册哪几个答案很简单回调类型只有两个关键字——Summary 和 Save后者对应 Checkpoint 保存场景。快速上手3 步跑通第一次回调注册最小路径包含头文件 → 写一个签名匹配的回调函数 → 调用 RegisterCallBackFunc 注册。接口声明在ge/ge_api.h中运行时依赖libge_runner.so。第 1 步包含头文件。#include ge/ge_api.h第 2 步写一个符合 pCallBackFunc 签名的回调函数。uint32_t OnSummary(uint32_t graph_id, const std::mapstd::string, ge::Tensor params_list) { // 在此处理 Summary 参数 return 0; }第 3 步按关键字注册。Status ret RegisterCallBackFunc(Summary, OnSummary);注册成功后后续下发含对应算子的图时GE 就会在合适时机调用你的函数。接口详解两个函数原型与参数含义核心结论RegisterCallBackFunc 有两个重载分别接受std::string与const char*形式的 key注册逻辑完全一致。函数原型Status RegisterCallBackFunc(const std::string key, const pCallBackFunc callback) Status RegisterCallBackFunc(const char *key, const session::pCallBackFunc callback)参数含义参数名输入/输出说明key输入回调函数类型的关键字字符串或字符格式支持 Summary、Savecallback输入回调函数指针签名见下方 typedef回调函数类型定义为typedef uint32_t (*pCallBackFunc)(uint32_t graph_id, const std::mapstd::string, ge::Tensor params_list); typedef uint32_t (*pCallBackFunc)(uint32_t graph_id, const std::mapAscendString, ge::Tensor params_list);回调函数接收两个参数graph_id本次执行的图编号和params_listGE 传回的参数集合键值对形式值为 Tensor返回一个uint32_t状态值。返回值与错误码返回值含义GE_SESSION_MANAGER_NOT_INITSession 管理未初始化需先完成 Session 初始化SUCCESS注册回调函数成功FAILED注册回调函数失败注意这里如果返回GE_SESSION_MANAGER_NOT_INIT问题不在回调本身而在于调用时序——先初始化 Session 管理再注册。接口选型为什么建议直接用非 string 版本建议结论新代码一律选择非 stringAscendString版本string 版本属于向后兼容后续版本会废弃。官方说明得很直接数据类型为 string 的接口在后续版本中会废弃建议使用数据类型为非 string 的接口。对开发者的实际含义升级 GE 版本时string 版本可能触发废弃告警甚至不可用AscendString 版本在跨语言、大文本参数场景下更稳现在切换成本最低——两个重载只是 key 的参数类型差异注册行为完全相同。也就是说GE 回调注册方法上现在选哪边决定了以后要不要重构建议一步到位选非 string 版。避坑指南三个最常见的坑与解法把官方约束翻译成你会踩到的坑坑 1key 写错或传了不支持的类型。回调类型仅支持 Summary 和 Save 两个关键字写 Checkpoint 等其他值是无效的。Checkpoint 场景对应的关键字是 Save——Checkpoint 回调配置时请确认 key 用的是 Save。坑 2图里有 Summary / Checkpoint 算子但没注册回调。后果不是静默跳过而是下发直接报错。排查这类失败时第一步就是检查图中是否含 Summary/Checkpoint 算子对应的回调是否已注册这是最高频的失败原因。坑 3期望回调在图执行过程中被多次触发。目前只支持图执行完后一次性调用回调函数。如果你的业务假设是边执行边回调、分多次推送当前版本不满足需要在图执行完成后统一处理参数。常见疑问 FAQQ1不注册回调程序会崩溃还是报错会在下发阶段报错。只要图中带有 Summary、Checkpoint 算子而对应回调未注册下发即失败不会等到执行时才暴露。Q2一个图能同时带 Summary 和 Checkpoint 吗可以但需要分别用 Summary 和 Save 两个 key 各注册一个回调一次调用只注册一个类型的回调。Q3key 传 std::string 和传 const char有区别吗*注册行为没有区别是同一个接口的两个重载。差异只在参数类型而 string 版本后续会废弃新代码请优先非 string 版本。相关文档README.md【免费下载链接】awesome-design-systems ⚒ A collection of awesome design systems项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-design-systems创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进