给 GE 引擎挂上回调钩子:30 秒搞定 RegisterCallBackFunc 的 Summary 与 Checkpoint 注册

发布时间:2026/8/24 2:15:15
给 GE 引擎挂上回调钩子:30 秒搞定 RegisterCallBackFunc 的 Summary 与 Checkpoint 注册 给 GE 引擎挂上回调钩子30 秒搞定 RegisterCallBackFunc 的 Summary 与 Checkpoint 注册【免费下载链接】awesome-design-systems ⚒ A collection of awesome design systems项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-design-systems你的图里放了 Summary 或 Checkpoint 算子GE 却没地方把结果交出去直接报错。这个接口RegisterCallBackFunc就是解药提前注册 GE 回调函数注册入口图执行完时它就把结果回调给你。正在用 C 对接 GE 引擎、却还没接回调的你花 3 分钟看完就能上手。它到底在干嘛你的图里只要带上 Summary 或 Checkpoint 算子GE 在整张图执行完后就会回头调用你注册好的那个函数把graph_id和参数列表递过来。相当于给流水线末端装了一盏信号灯货跑完了灯亮一下你去接货。没接灯没注册流水线就罢工。30 秒注册你的第一个回调#include ge/ge_api.h // 先引入 GE 的头文件接口声明都在里面 uint32_t my_callback(uint32_t graph_id, const std::mapAscendString, ge::Tensor params_list) { for (const auto kv : params_list) { printf(收到结果: %s\n, kv.first.c_str()); } return 0; // 你的业务处理这里简单打印 } Status s RegisterCallBackFunc(Summary, my_callback); // 注册 Summary 回调 if (s SUCCESS) { printf(注册成功图执行完会回调\n); // 看状态码确认生效 }参数掰开揉碎讲参数值从哪来传错会怎样key你按业务需要自己选只支持Summary和Save两种写法传了别的值图里的算子找不到对应回调下发图时直接报错callback你自己实现的函数签名必须和下面的 typedef 一致签名对不上会编译失败签名对了但函数里逻辑有 bug回调时拿到的数据就是错的回调函数指针长这样typedef uint32_t (*pCallBackFunc)(uint32_t graph_id, const std::mapAscendString, ge::Tensor params_list);签名里每个形参的业务含义graph_id哪张图触发了这次回调多张图并发跑时靠它区分来源。params_list算子跑完产出的结果key 是参数名value 是ge::Tensor直接取数据用。返回值uint32_t回调处理结果按你的业务约定返回。注意有 string 和非 string 两个版本传std::stringkey 的旧版本后续会废弃新代码直接用上面这个非 string 版本。状态码逐条读明白状态码什么时候会触发排查建议SUCCESS回调注册成功继续往下走等图执行完看回调是否被调用GE_SESSION_MANAGER_NOT_INITSession 管理还没初始化就调了注册检查启动流程先完成 Session 初始化再注册FAILED参数不合法等其他失败原因核对key拼写和callback签名再看前置初始化是否完整⚠️ 别踩这些坑如果你给 Summary 算子注册回调时 key 传成了别的值图下发就会报错。只用Summary和Save这两种写法别自己发明。如果你图里放了 Summary 或 Checkpoint 算子却完全没注册回调下发时 GE 直接报未注册。上图之前先确认对应回调已注册成功。如果你想在图执行过程中多次收到回调会失望目前只在整张图跑完后一次性调用。需要中间结果的自己调整图结构。如果你在老项目里用std::string版本迁移时顺手换掉官方已声明该版本后续废弃早换早省心。【免费下载链接】awesome-design-systems ⚒ A collection of awesome design systems项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-design-systems创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考