PaddlePaddle / RocketQA

🚀 RocketQA, dense retrieval for information retrieval and question answering, including both Chinese and English state-of-the-art models.
Apache License 2.0
764 stars 130 forks source link

如何在 Paddle Inference 中使用 RocketQA 的模型? #73

Open RussellLuo opened 1 year ago

RussellLuo commented 1 year ago

参考 Paddle Inference 文档

Paddle Inference 原生支持由 PaddlePaddle 深度学习框架训练产出的推理模型。PaddlePaddle 用于推理的模型分别可通过 paddle.jit.save (动态图) 与 paddle.static.save_inference_model (静态图) 或 paddle.Model().save (高层API) 保存下来。

目前 RocketQA 使用的是老版本的 PaddlePaddle,用于推理的模型应该需要通过 fluid.io.save_inference_model 保存,但目前看代码是通过 fluid.io.save_persistables 保存的:

https://github.com/PaddlePaddle/RocketQA/blob/019ad5c1088167e264c5ec799c5f7fd22e39ad27/rocketqa/encoder/dual_encoder.py#L380

https://github.com/PaddlePaddle/RocketQA/blob/019ad5c1088167e264c5ec799c5f7fd22e39ad27/rocketqa/encoder/cross_encoder.py#L326

请问如何在 Paddle Inference 中使用 RocketQA 的模型?RocketQA 是否有计划支持用 Paddle Inference 进行推理?

procedure2012 commented 1 year ago

这部分代码我也不是清楚,可以在paddle的issue下面搜索一下save_persistables和save_inference_model的区别。最近其他工作比较多,暂时没有进一步更新到Paddle Inference的计划

RussellLuo commented 1 year ago

我这几天研究了下,已经成功将 RocketQA 模型转换成了 Paddle Inference 模型(参考 转换代码)。

在此基础上,得益于 Paddle Inference 提供的 Go API,我创建了一个项目 go-rocketqa,目前已经可以通过 Go 进行模型推理 😄