OpenPPL 是商汤自研的多后端高性能 AI 推理引擎。
本文将使用一个 Demo 来描述 OpenPPL 如何使用 NVIDIA Triton 提供线上 Serving 的推理部署服务。
一、模型部署 Model Deployment
模型部署是深度学习应用落地非常重要的环节,工程师辛苦训练出来的模型到落地部署应用有大量的工作,包括模型提取、模型压缩、模型加速等等。常见的模型部署方式有以下几种:
- 服务器端部署:模型推理部署在服务器上,利用服务器进行高性能完成推理任务
- 端侧部署: 模型部署在手机或者其他端侧设备,利用端侧算力完成推理任务
- 服务方式部署:模型部署在云端或者服务器端部署提供线上服务,用户可以使用客户端发送数据和请求,服务器或者云端想赢请求,完成推理任务并返回推理结果
- Web端部署: 模型部署在网页端,网页端完成推理任务
本文主要讲述服务化部署方式 Model Serving,行业内已经发布多个在线推理服务的解决方案,包括 TF Serving、Paddle Serving 、NVIDIA Triton 等等。
二、NVIDIA Triton
Triton 是英伟达开源的推理服务框架,可以帮助开发人员高效轻松地在云端、数据中心或者边缘设备部署高性能推理服务器,服务器可以提供HTTP/gRPC等多种服务协议。
Triton Server目前支持Pytorch、ONNXRuntime等多个后端,提供标准化的部署推理接口,同时提供了模型批处理、模型融合、GPU并行等等多样化的功能。
三、OpenPPL + NVIDIA Triton
Triton Serving 服务框架支持 OpenPPL 后端需要完成两个工作:
一个是 Triton Server 部分,Server 需要添加对 OpenPPL Backend 的支持;另外一个 Backend 部分,需要添加 OpenPPL Backend 实现并且完成 OpenPPL 的封装调用。
1、Triton Server
Triton Server添加OpenPPL的支持,包括Backend Platform的定义、OpenPPL backend的编译依赖支持、OpenPPL Backend的模型解析等等,具体代码可以参考下面:
Triton Servergithub.com/litianjian/server/tree/ppl-r21.12
2、OpenPPL Backend
添加OpenPPL backend的整体实现,完成Backend调用OpenPPL完成推理功能。主要包括OpenPPL 的代码依赖、公共接口的实现以及Backend对OpenPPL的调用封装等, 具体代码可以参考下面:
Triton_OpenPPL_Backendgithub.com/litianjian/Triton_OpenPPL_Backend
四、Demo 演示
下面以Detection模型里的Mask-RCNN(模型来自于OpenMMLab)为例,描述一下使用Triton 调用OpenPPL 完成任务的过程,欢迎大家使用。
1、准备模型和配置文件
模型和配置文件是Triton执行网络任务和调用后端执行的基础,具体的模型格式和配置文件可以参考Model Sample。其中,OpenPPL支持模型的格式为ONNX模型,配置文件指定后端platform为"openppl_onnx"。
2、启动 Triton Server
用户可以从源码编译Triton Server,也可以采用Docker的方式启动。 启动Triton Server需要指定部分参数,--model-repository 指定第一步中模型和配置文件的存放路径, --backend-directory指定Backend的存放路径。
docker run --gpus=1 --rm -p8000:8000 -p8001:8001 -p8002:8002 -v/`pwd`/sample/models:/models ppltriton/ppltriton:v01 /opt/citritonbuild/opt/tritonserver/bin/tritonserver --model-repository=/models --backend-directory=/opt/citritonbuild/opt/tritonserver/backends/
启动成功之后,Server在模型路径下搜索模型,以及在Backend路径下匹配后端。如上图所示,适配到一个maskrcnn模型以及一个可用的openppl后端。
3、使用Client发出请求
使用Sample提供的sample_maskrcnn,执行下列命令,可以向server发送请求并且得到推理结果,推理结果如下图所示(图片的前后处理,以及模型均来自OpenMMlab)。
python3 sample_maskrcnn.py -i test.jpg -o out.jpg
如下是 Sample 推理结果: