GE 回调函数注册完整指南:三步用 RegisterCallBackFunc 配好 Summary 与 Save 回调
【免费下载链接】awesome-design-systems💅🏻 ⚒ A collection of awesome design systems项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-design-systems
开源项目 awesome-design-systems 的接口参考资料里,GE 的RegisterCallBackFunc回调函数注册接口是打通 Summary 与 Checkpoint 能力的关键入口。你下发给 GE 的图中如果带有这两类算子,就必须先完成回调注册,否则执行时会直接报错。
什么是 RegisterCallBackFunc,什么时候需要它
一句话理解:这是你和 GE 之间的一次“预约”。注册之后,GE 在执行图的过程中遇到 Summary 或 Checkpoint 算子,就会调用你提供的回调函数来处理。
典型场景是:图执行结束后,你的业务需要拿回中间参数(比如保存模型、输出汇总信息),但不想把具体处理逻辑硬编码进图里。这时就可以把活儿交给自己的回调函数。
准备工作:2 个文件和 1 个前置条件
先引入两个依赖,缺一不可:
- 头文件:
#include <ge/ge_api.h> - 库文件:
libge_runner.so
还有一个软性前置条件:Session 管理组件必须已经初始化。否则注册调用会直接返回GE_SESSION_MANAGER_NOT_INIT,这也是“注册为什么失败”这类问题最常见的根源,排查时请优先检查初始化顺序。
如何注册 Summary 或 Save 回调:只需 3 步
- 编写回调函数:入参为
graph_id(uint32_t)和params_list(键值映射到ge::Tensor),返回uint32_t。 - 调用
RegisterCallBackFunc,把回调传进去,key填"Summary"或"Save"。 - 检查返回的
Status,只有拿到SUCCESS才算注册完成。
函数原型有两个重载,其中 string 数据类型的版本后续会废弃,新代码请直接选用非 string 数据类型的版本:
Status RegisterCallBackFunc(const char *key, const session::pCallBackFunc &callback);最小调用示例长这样:
Status status = RegisterCallBackFunc("Summary", MySummaryCallback);key 和 callback 分别该传什么
| 参数 | 该传什么 | 传错或漏传会发生什么 |
|---|---|---|
key | 回调类型关键字,只支持"Summary"和"Save"两个取值 | 传其他字符串会导致注册失败,返回FAILED |
callback | 符合pCallBackFunc签名的函数指针 | 签名与 typedef 定义不一致时编译就过不了 |
两个重载对应两种回调签名,区别在于params_list的键类型:
| 签名 | params_list键类型 | 建议 |
|---|---|---|
pCallBackFunc(string 版) | std::string | 后续版本将废弃,不建议新代码使用 |
session::pCallBackFunc(AscendString 版) | AscendString | ✅ 推荐使用 |
返回的错误码意味着什么,接下来怎么处理
返回的Status | 意味着什么 | 接下来怎么做 |
|---|---|---|
SUCCESS | 回调函数注册成功 | 无需额外操作,可以下发图了 |
GE_SESSION_MANAGER_NOT_INIT | Session 管理未初始化 | 检查是否漏了初始化步骤,先初始化再注册 |
FAILED | 注册失败 | 核对key取值和回调签名后重试 |
漏注册回调会报什么错
如果图中带有 Summary 或 Checkpoint 算子,却没有事先注册对应回调,GE 会直接报错,不会静默跳过。💡 这是新手最常踩的坑之一:把“注册回调”当成下发图之前的必做检查项,这个报错基本就不会再出现。
三个必须记住的硬限制
- 回调类型目前只支持
Summary和Save两个取值,其他关键字不会被识别。 - 目前只支持图执行完后一次性调用回调函数,不要假设每遇到一次算子触发就回调一次。
- ⚠️ 未注册回调就下发 Summary、Checkpoint 算子必然报错,建议把注册动作固化进初始化流程。
按上面三步走,RegisterCallBackFunc的注册流程就完整了:先初始化 Session,再选对签名,最后核对key与返回值。
【免费下载链接】awesome-design-systems💅🏻 ⚒ A collection of awesome design systems项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-design-systems
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考