大家好,我是小 G。
在工业级深度学习实践领域中,我们经常能听到一种说法 —— 模型部署是打通 AI 应用的最后一公里!想要走通这一公里,就好比打赢得一场焦灼篮球赛,困难重重,相信广大开发者们对此一定深有体会。
部署环境复杂多样,比如硬件适配状态、操作系统兼容性、对编程语言的支持等诸多挑战,都宛如一个个勇猛的对手横亘在面前。想要赢得比赛,咱们自己也要多拿分才行。
确保环境适配仅是第一步,如何在部署后展示出犀利的性能,实现工业级的高性能推理,同样是胜利的关键因素!
开发者们只有 “能攻善守”,化身为曾经夺得 “得分王” 和 “最佳防守球员” 的乔丹大神,才能顺利部署、尽展性能!如果再有菲尔・杰克逊般全方位、高质量的技术指导,想来 “球员们” 赢得这场深度学习实践的 “比赛”,就不用再吟 “蜀道难” 了!
别着急,GitHub 上知名开源工具 - Paddle Inference 前来保驾!近期,Paddle Inference 随着飞桨框架震撼升级到了 2.0 版本!!!此次,全团队秃头
改版升级,让 Paddle Inference 全方位适配各种应用场景,并且在性能方面更上一层楼,同时还配套了详尽的指导文档,助力各位 “球员” 一举成为部署领域的 “乔丹”!
快速变身传送门:
https://paddle-inference.readthedocs.io/en/latest/user_guides/download_lib.html#windows
https://paddle-inference.readthedocs.io/en/latest/user_guides/download_lib.html#
在这边很多小伙伴会问:什么是 Paddle Inference 原生高性能推理库?跟主框架的 API 如 model.predict () 等接口又是什么关系呢?哪个更原生些?
在这边给大家快速地科普一下:主框架的前向 API 接口 model.predict () 是基于主框架的前向算子进行封装,且直接调用训练好的模型之前向参数,能够快速测试训练完成的模型效果,并将计算后的预测结果返回呈现,通常是用在验证训练成果及做实验时使用。
而一般的企业级部署通常会追求更极致的部署性能,且希望能够在生产环境安装一个不包含后向算子,比主框架更轻量的预测库,Paddle Inference 应运而生。
Paddle Inference 提取了主框架的前向算子,可以无缝支持所有主框架训练好的模型,且通过内存复用、算子融合等大量优化手段,并整合了主流的硬件加速库如 Intel 的 oneDNN、NVIDIA 的 TensorRT 等,提供用户最极致的部署性能。此外还封装 C/C++ 的预测接口,使生产环境更便利多样。
打篮球时,想要有好的防守效果,需要球员压低身形,这样即使抢不到球也可以随时回防,眼睛也一定要紧盯对方手中的球。从中我们可以发现,哪怕是一个简单的防守动作,也需要调动全身的力量。
深度学习亦然,从获取预训练模型,到使用特定语言的 API 加载模型、编写推理逻辑,最后在特定的硬件与操作系统上执行推理,这一全套流程需要推理引擎提供从上游到下游的全方位适配与服务。
为此 Paddle Inference 依托飞桨框架 2.0 进行了全面升级:
Paddle Inference 的适配大法虽好,却不要忽略它的高性能哦!我们脱发不脱单,只为让在座的各位满意和惊喜~
推理延时太高,吞吐量太低,内存显存占用太高,都宛如是一个个难缠的对手,让我们难以提升 “投篮命中率”,达不到应用需求,“怎么办” 三个字显现在光亮的脑门儿上。没关系!Paddle Inference 采用了高性能的底层实现,针对推理场景进行了专门的优化:
话不多说,数据说话!下图展示了飞桨与其它主流深度学习框架在基准模型上的测试对比数据,共 9 组对比测试。Paddle Inference 在 6 项测试中,性能表现最优。
然而,性能很好,在开发实践中不好用该怎么办呢?就比如,很多开发者在使用 TensorRT 加速模型推理的过程中,都有可能遇到过一些困扰。使用 Paddle Inference 之前,各位 “球员” 可能需要将手头的模型进行格式转换,才可以用 TensorRT 加载。
或者,模型中可能存在不支持转换的 OP,无法运行。又或许,想使用 TensorRT 框架集成版的推理引擎,却苦于操作复杂,资料不全,无从下手。
现在,使用 Paddle Inference,无需进行额外的模型转换等操作,只需添加一行代码即可开启 TensorRT 优化加速功能,关键代码如下:
是不是想给我们鼓个掌,甚至还想让我们叉会儿腰?像我们这种人狠话不多、头发不几根的团队,只想让各位 “球员” 获得更好的产品体验,因此,我们还提供了超全、超详细的技术支持,让我们接着往下看吧~
最贴心的教练服务!细致全面的技术支持
虽然我们已经进入了万物互联的新时代,自学并不像以往那么艰难,但是没有资源、没有教程、没有手把手地辅导,都可能让大家随时 “从入门到放弃”。相信大家在学习部署时,都有如下心路历程:
想要下载符合需求的预编译库 → 找不到官方资源 → 放弃...
想要使用 C++/Go API 部署模型 → 找不到全面的 API 文档 → 放弃...
想要在 NV Jetson/Windows 上部署模型 → 找不到针对各种硬件 / 操作系统的指导 → 放弃...
想要开启 TensorRT 功能 / 部署 INT8 量化模型 → 找不到针对性的教程 → 放弃...
想要通过示例代码在实践中学习 → 找不到丰富的 Demo 资源 → 放弃...
没关系!Paddle Inference 2.0 对教程文档和示例代码进行了全面的升级,还对各种硬件设备、操作系统、功能特性、多语言 API 进行了全方位的保姆式技术支持,贴心的 “教练服务” 让您不再挠头,方便快捷地实现高性能部署!
您可以在我们的官方教程页面了解以上内容。说出您想使用的硬件设备、语言接口和功能,即可享受从环境搭建、使用流程、功能特性实战到示例代码实践的全套技术支持服务。
除此以外,飞桨还实现了即拿即用的模型服务,例如 PaddleHub 预训练模型工具、PaddleDetection 和 PaddleOCR 等开发套件、PaddleCV 和 PaddleNLP 等模型库,为您提供了覆盖各个应用场景的模型服务,可以让您放肆地做一次 “伸手党”!等等。
如果您手头只有其它框架的模型怎么办?没关系,X2Paddle 模型转换工具帮您实现无缝切换,欲知详情,请参考如下链接:
https://github.com/PaddlePaddle/X2Paddle
说了这么多,各位 “球员” 是不是跃跃欲试,想体验 Paddle Inference 2.0 高效流畅的模型部署,在深度学习的 “赛场” 上尽显风姿了呢?体贴入微的我们,还为大家提供了端到端的部署流程,即刻成为耀眼 “球星”:
1. 准备模型
Paddle Inference 原生支持由 飞桨深度学习框架训练产出的推理模型。飞桨新版本中用于推理的模型分别通过 paddle.jit.save (动态图)与 paddle.static.save_inference_model(静态图)或 paddle.Model ().save (高层 API)保存下来。
如果您手中的模型是由诸如 Caffe、Tensorflow、PyTorch 等框架产出,那么您可以使用 X2Paddle 工具将模型转换为 PadddlePaddle 格式。
2. 准备环境
1)Python 环境
请参照 官方主页 - 快速安装 页面进行自行安装或编译,当前支持 pip/conda 安装,docker 镜像以及源码编译等多种方式来准备 Paddle Inference 开发环境。
2)C++ 环境
Paddle Inference 提供了 Ubuntu/Windows/MacOS 平台的官方 Release 预测库下载,如果您使用的是以上平台,我们优先推荐您通过以下链接直接下载,或者您也可以参照文档:https://paddleinference.paddlepaddle.org.cn/user_guides/source_compile.html,进行源码编译。
https://paddle-inference.readthedocs.io/en/latest/user_guides/download_lib.html#windows
https://paddle-inference.readthedocs.io/en/latest/user_guides/download_lib.html#
3. 开发预测程序
开发预测程序只需要简单的 5 个步骤 (这里以 C++ API 为例):
1)配置推理选项 paddle_infer::Config,包括设置模型路径、运行设备、开启 / 关闭计算图优化、使用 MKLDNN/TensorRT 进行部署的加速等。
2)创建推理引擎 paddle_infer::Predictor,通过调用 CreatePaddlePredictor (Config) 接口,一行代码即可完成引擎初始化,其中 Config 为第 1 步中生成的配置推理选项。
3)准备输入数据,需要以下几个步骤:
4)执行预测,只需要运行 predictor->Run () 一行代码,即可完成预测执行。
5)获得预测结果,需要以下几个步骤:
相关链接:
Paddle Inference 完整文档:https://paddle-inference.readthedocs.io/en/latest/index.html
Paddle Inference Demo:https://github.com/PaddlePaddle/Paddle-Inference-Demo