最近把一个训练好的模型挪进 C++ 服务,用 libtorch 跑,过程大致是这样。
一开始直接拿训练脚本里的模型对象去加载,一直报错。查了才知道得先导出成可加载的序列化格式,这一步漏不得。
导出完以为稳了,结果加载时莫名其妙崩。来回排查,最后是导出用的框架版本和 libtorch 版本差了一截,对齐之后才正常,这里耗掉的时间最多。
跑通以后补了两处:推理前切到评估模式、关掉梯度,省内存也快些;用 GPU 的话,输入张量记得放到对应设备上。
暂时就这些,我也还在摸,有更细的做法欢迎补充。
最近把一个训练好的模型挪进 C++ 服务,用 libtorch 跑,过程大致是这样。
一开始直接拿训练脚本里的模型对象去加载,一直报错。查了才知道得先导出成可加载的序列化格式,这一步漏不得。
导出完以为稳了,结果加载时莫名其妙崩。来回排查,最后是导出用的框架版本和 libtorch 版本差了一截,对齐之后才正常,这里耗掉的时间最多。
跑通以后补了两处:推理前切到评估模式、关掉梯度,省内存也快些;用 GPU 的话,输入张量记得放到对应设备上。
暂时就这些,我也还在摸,有更细的做法欢迎补充。