PaddleHub Serving模型一键服务部署

给你一囗甜甜゛ 提交于 2020-03-03 13:18:43

简介

为什么使用一键服务部署

使用PaddleHub能够快速进行模型预测,但开发者常面临本地预测过程迁移线上的需求。无论是对外开放服务端口,还是在局域网中搭建预测服务,都需要PaddleHub具有快速部署模型预测服务的能力。在这个背景下,模型一键服务部署工具——PaddleHub Serving应运而生。开发者通过一行命令即可快速启动一个模型预测在线服务,而无需关注网络框架选择和实现。

什么是一键服务部署

PaddleHub Serving是基于PaddleHub的一键模型服务部署工具,能够通过简单的Hub命令行工具轻松启动一个模型预测在线服务,前端通过Flask和Gunicorn完成网络请求的处理,后端直接调用PaddleHub预测接口,同时支持使用多进程方式利用多核提高并发能力,保证预测服务的性能。

支持模型

目前PaddleHub Serving支持对PaddleHub所有可直接预测的模型进行服务部署,包括lacsenta_bilstm等NLP类模型,以及yolov3_darknet53_coco2017vgg16_imagenet等CV类模型,更多模型请参见PaddleHub支持模型列表。未来还将支持开发者使用PaddleHub Fine-tune API得到的模型用于快捷服务部署。

使用

Step1:启动服务端部署

PaddleHub Serving有两种启动方式,分别是使用命令行启动,以及使用配置文件启动。

命令行命令启动

启动命令

$ hub serving start --modules [Module1==Version1, Module2==Version2, ...] \
                    --port XXXX \
                    --use_gpu \
                    --use_multiprocess

参数

参数 用途
--modules/-m PaddleHub Serving预安装模型,以多个Module==Version键值对的形式列出
当不指定Version时,默认选择最新版本
--port/-p 服务端口,默认为8866
--use_gpu 使用GPU进行预测,必须安装paddlepaddle-gpu
--use_multiprocess 是否启用并发方式,默认为单进程方式,推荐多核CPU机器使用此方式
Windows操作系统只支持单进程方式

配置文件启动

启动命令

$ hub serving start --config config.json

config.json格式如下:

{  
  "modules_info": [  
    {  
       "module": "MODULE_NAME_1",
       "version": "MODULE_VERSION_1",
       "batch_size": "BATCH_SIZE_1"
    },  
    {  
       "module": "MODULE_NAME_2",  
       "version": "MODULE_VERSION_2",  
       "batch_size": "BATCH_SIZE_2"
    }
  ],  
  "port": 8866,
  "use_gpu": false,  
  "use_multiprocess": false
}

参数

参数 用途
modules_info PaddleHub Serving预安装模型,以字典列表形式列出,其中:
module为预测服务使用的模型名
version为预测模型的版本
batch_size为预测批次大小
port 服务端口,默认为8866
use_gpu 使用GPU进行预测,必须安装paddlepaddle-gpu
use_multiprocess 是否启用并发方式,默认为单进程方式,推荐多核CPU机器使用此方式
Windows操作系统只支持单进程方式

Step2:访问服务端

在使用PaddleHub Serving部署服务端的模型预测服务后,就可以在客户端访问预测接口以获取结果了,接口url格式为:

http://0.0.0.0:8866/predict/<CATEGORY>/<MODULE>

其中,<CATEGORY>为text或image,与模型种类对应,<MODULE>为模型名。

通过发送一个POST请求,即可获取预测结果,下面我们将展示一个具体的demo,以说明使用PaddleHub Serving部署和使用流程。

Step3:利用PaddleHub Serving进行个性化开发

使用PaddleHub Serving进行模型服务部署后,可以利用得到的接口进行开发,如对外提供web服务,或接入到应用程序中,以降低客户端预测压力,提高性能,下面展示了一个web页面demo:

Demo——部署一个在线lac分词服务

Step1:部署lac在线服务

现在,我们要部署一个lac在线服务,以通过接口获取文本的分词结果。

首先,任意选择一种启动方式,两种方式分别为:

$ hub serving start -m lac

$ hub serving start -c serving_config.json

其中serving_config.json的内容如下:

{
  "modules_info": [
  {
    "module": "lac",
    "version": "1.0.0",
    "batch_size": 1
  }
],
  "use_gpu": false,
  "port": 8866,
  "use_multiprocess": false
}

启动成功界面如图:

这样我们就在8866端口部署了lac的在线分词服务。 此处warning为Flask提示,不影响使用

Step2:访问lac预测接口

在服务部署好之后,我们可以进行测试,用来测试的文本为今天是个好日子天气预报说今天要下雨

客户端代码如下

# coding: utf8
import requests
import json

if __name__ == "__main__":
    # 指定用于用于预测的文本并生成字典{"text": [text_1, text_2, ... ]}
    text_list = ["今天是个好日子", "天气预报说今天要下雨"]
    text = {"text": text_list}
    # 指定预测方法为lac并发送post请求
    url = "http://0.0.0.0:8866/predict/text/lac"
    r = requests.post(url=url, data=text)

    # 打印预测结果
    print(json.dumps(r.json(), indent=4, ensure_ascii=False))

运行后得到结果

{
    "results": [
        {
            "tag": [
                "TIME", "v", "q", "n"
            ],
            "word": [
                "今天", "是", "个", "好日子"
            ]
        },
        {
            "tag": [
                "n", "v", "TIME", "v", "v"
            ],
            "word": [
                "天气预报", "说", "今天", "要", "下雨"
            ]
        }
    ]
}

此Demo的具体信息和代码请参见LAC Serving。另外,下面展示了一些其他的一键服务部署Demo。

Demo——其他模型的一键部署服务

获取其他PaddleHub Serving的一键服务部署场景示例,可参见下列demo

  该示例展示了利用vgg11_imagent完成图像分类服务化部署和在线预测,获取图像分类结果。

  该示例展示了利用stgan_celeba生成图像服务化部署和在线预测,获取指定风格的生成图像。

  该示例展示了利用porn_detection_lstm完成中文文本黄色敏感信息鉴定的服务化部署和在线预测,获取文本是否敏感及其置信度。

  该示例展示了利用lac完成中文文本分词服务化部署和在线预测,获取文本的分词结果,并可通过用户自定义词典干预分词结果。

  该示例展示了利用yolov3_darknet53_coco2017完成目标检测服务化部署和在线预测,获取检测结果和覆盖识别框的图片。

  该示例展示了利用simnet_bow完成中文文本相似度检测服务化部署和在线预测,获取文本的相似程度。

  该示例展示了利用deeplabv3p_xception65_humanseg完成图像分割服务化部署和在线预测,获取识别结果和分割后的图像。

  该示例展示了利用senta_lstm完成中文文本情感分析服务化部署和在线预测,获取文本的情感分析结果。

Bert Service

除了预训练模型一键服务部署功能之外,PaddleHub Serving还具有Bert Service功能,支持ernie_tiny、bert等模型快速部署,对外提供可靠的在线embedding服务,具体信息请参见Bert Service

想了解更多资讯,可访问飞桨PaddlePaddle官网 https://www.paddlepaddle.org.cn/?fr=osc

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!