OpenPPL 支持作为 NVIDIA Triton 后端提供 Serving 功能

639 阅读3分钟

OpenPPL 是商汤自研的多后端高性能 AI 推理引擎。

本文将使用一个 Demo 来描述 OpenPPL 如何使用 NVIDIA Triton 提供线上 Serving 的推理部署服务。

一、模型部署 Model Deployment

模型部署是深度学习应用落地非常重要的环节,工程师辛苦训练出来的模型到落地部署应用有大量的工作,包括模型提取、模型压缩、模型加速等等。常见的模型部署方式有以下几种:

  • 服务器端部署:模型推理部署在服务器上,利用服务器进行高性能完成推理任务
  • 端侧部署: 模型部署在手机或者其他端侧设备,利用端侧算力完成推理任务
  • 服务方式部署:模型部署在云端或者服务器端部署提供线上服务,用户可以使用客户端发送数据和请求,服务器或者云端想赢请求,完成推理任务并返回推理结果
  • Web端部署: 模型部署在网页端,网页端完成推理任务

本文主要讲述服务化部署方式 Model Serving,行业内已经发布多个在线推理服务的解决方案,包括 TF ServingPaddle Serving 、NVIDIA Triton 等等。

二、NVIDIA Triton

Triton 是英伟达开源的推理服务框架,可以帮助开发人员高效轻松地在云端、数据中心或者边缘设备部署高性能推理服务器,服务器可以提供HTTP/gRPC等多种服务协议。

Triton Server目前支持Pytorch、ONNXRuntime等多个后端,提供标准化的部署推理接口,同时提供了模型批处理、模型融合、GPU并行等等多样化的功能。

Triton Architecture

三、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 Server​github.com/litianjian/server/tree/ppl-r21.12

2、OpenPPL Backend

添加OpenPPL backend的整体实现,完成Backend调用OpenPPL完成推理功能。主要包括OpenPPL 的代码依赖、公共接口的实现以及Backend对OpenPPL的调用封装等, 具体代码可以参考下面:

Triton_OpenPPL_Backend​github.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 推理结果:

Sample 推理结果