提交 87257b63 编写于 作者: 走神的阿圆's avatar 走神的阿圆 提交者: Steffy-zxf

Move serving image to docs/img (#307)

* update serving doc

* update serving doc

* fix doc format

* fix doc format

* modify serving tutorial

* move serving img

* move serving img

* Add bert_service demo readme

* modify demo- to Demo——

* Add serving tips in tail
上级 51820323
......@@ -38,8 +38,8 @@
* [超参优化AutoDL Finetuner使用](./autofinetune)
该样例展示了PaddleHub超参优化AutoDL Finetuner如何使用,给出了自动搜素图像分类/文本分类任务的较佳超参数示例。
* [服务化部署Hub Serving使用](./serving)
该样例文件夹下展示了服务化部署Hub Serving如何使用,将PaddleHub支持的可预测Module如何服务化部署。
* [服务化部署PaddleHub Serving使用](./serving)
该样例文件夹下展示了服务化部署PaddleHub Serving如何使用,将PaddleHub支持的可预测Module如何服务化部署。
**NOTE:**
以上任务示例均是利用PaddleHub提供的数据集,若您想在自定义数据集上完成相应任务,请查看[PaddleHub适配自定义数据完成FineTune](https://github.com/PaddlePaddle/PaddleHub/wiki/PaddleHub%E9%80%82%E9%85%8D%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%88%90FineTune)
......
......@@ -17,7 +17,7 @@ Bert Service是基于[Paddle Serving](https://github.com/PaddlePaddle/Serving)
## 预训练模型一键服务部署
预训练模型一键服务部署是基于PaddleHub的预训练模型快速部署的服务化方案,能够将模型预测以API接口的方式实现。
关于预训练模型一键服务部署的具体信息请参见[PaqddleHub Serving](../../tutorial/serving.md)
关于预训练模型一键服务部署的具体信息请参见[PaddleHub Serving](../../tutorial/serving.md)
预训练模型一键服务部署包括以下示例:
......
# Bert Service
## 简介
### 什么是Bert Service
`Bert Service`是基于[Paddle Serving](https://github.com/PaddlePaddle/Serving)框架的快速部署模型远程计算服务方案,可将embedding过程通过调用API接口的方式实现,减少了对机器资源的依赖。使用PaddleHub可在服务器上一键部署`Bert Service`服务,在另外的普通机器上通过客户端接口即可轻松的获取文本对应的embedding数据。
**NOTE:** 关于`Bert Service`的更多信息请参见[Bert Serving](../../../tutorial/bert_service.md)
## Demo——利用Bert Service部署ernie_tiny在线embedding服务
在这里,我们将展示一个实际场景中可能使用的demo,我们利用PaddleHub在一台GPU机器上部署`ernie_tiny`模型服务,并在另一台CPU机器上尝试访问,获取一首七言绝句的embedding。
### Step1:安装环境依赖
首先需要安装环境依赖,根据第2节内容分别在两台机器上安装相应依赖。
### Step2:启动Bert Service服务端
确保环境依赖安装正确后,在要部署服务的GPU机器上使用PaddleHub命令行工具启动`Bert Service`服务端,命令如下:
```shell
$ hub serving start bert_service -m ernie_tiny --use_gpu --gpu 0 --port 8866
```
启动成功后打印:
```shell
Server[baidu::paddle_serving::predictor::bert_service::BertServiceImpl] is serving on port=8866.
```
这样就启动了`ernie_tiny`的在线服务,监听8866端口,并在0号GPU上进行任务。
### Step3:使用Bert Service客户端进行远程调用
部署好服务端后,就可以用普通机器作为客户端测试在线embedding功能。
首先导入客户端依赖。
```python
from paddlehub.serving.bert_serving import bs_client
```
接着启动并初始化`bert service`客户端`BSClient`(这里的server为虚拟地址,需根据自己实际ip设置)。
```python
bc = bs_client.BSClient(module_name="ernie_tiny", server="127.0.0.1:8866")
```
然后输入文本信息。
```python
input_text = [["西风吹老洞庭波"], ["一夜湘君白发多"], ["醉后不知天在水"], ["满船清梦压星河"], ]
```
最后利用客户端接口`get_result`发送文本到服务端,以获取embedding结果。
```python
result = bc.get_result(input_text=input_text)
```
最后即可得到embedding结果(此处只展示部分结果)。
```python
[[0.9993321895599361, 0.9994612336158751, 0.9999646544456481, 0.732795298099517, -0.34387934207916204, ... ]]
```
客户端代码demo文件见[示例](../paddlehub/serving/bert_serving/bert_service.py)
运行命令如下:
```shell
$ python bert_service_client.py
```
运行过程如下图:
<div align="center">
&emsp;&emsp;<img src="https://github.com/ShenYuhan/ml-python/blob/master/short_client_fast.gif" aligh="center" width="70%" alt="启动BS" />
</div>
### Step4:关闭Bert Service服务端
如要停止`Bert Service`服务端程序,可在其启动命令行页面使用Ctrl+C方式关闭,关闭成功会打印如下日志:
```shell
Paddle Inference Server exit successfully!
```
这样,我们就利用一台GPU机器就完成了`Bert Service`的部署,并利用另一台普通机器进行了测试,可见通过`Bert Service`能够方便地进行在线embedding服务的快速部署。
## 预训练模型一键服务部署
除了`Bert Service`外,PaddleHub
Serving还具有预训练模型一键服务部署功能,能够将预训练模型快捷部署上线,对外提供可靠的在线预测服务,具体信息请参见[Module Serving](../../../tutorial/serving.md)
......@@ -21,7 +21,7 @@ Loading stgan_celeba successful.
我们用来测试的样例图片为:
<p align="center">
<img src="../img/man.png" width="30%" />
<img src="../../../../docs/imgs/man.png" width="30%" />
</p>
根据stgan_celeba所需信息,准备的数据包括图像文件和生成图像风格,格式为:
......@@ -36,7 +36,7 @@ info为图像描述,根据示例图像信息,info应为"Male,Black_Hair,Eyeg
image为要生成的图像风格,我们选取"Bald"(秃顶的)作为生成图像的风格。
代码如下
代码如下
```python
>>> # 指定要使用的图片文件并生成列表[("image", img_1), ("image", img_2), ... ]
>>> file_list = ["../img/man.png"]
......@@ -46,19 +46,19 @@ image为要生成的图像风格,我们选取"Bald"(秃顶的)作为生成图
```
## Step3:获取并验证结果
然后就可以发送请求到图像生成服务API,并得到结果,代码如下
然后就可以发送请求到图像生成服务API,并得到结果,代码如下
```python
>>> url = "http://127.0.0.1:8866/predict/image/stgan_celeba"
>>> r = requests.post(url=url, data=data, files=files)
```
stgan_celeba返回的结果包括生成图像的base64编码格式,经过转换可以得到生成图像,代码如下
stgan_celeba返回的结果包括生成图像的base64编码格式,经过转换可以得到生成图像,代码如下
```python
>>> for item in results:
... with open(output_path, "wb") as fp:
... fp.write(base64.b64decode(item["base64"].split(',')[-1]))
```
查看指定输出文件夹,就能看到生成图像了,如图
查看指定输出文件夹,就能看到生成图像了,如图
<p align="center">
<img src="./stgan_output/Bald_man.png" width="30%" />
......
# PaddleHub Serving模型一键服务部署
## 简介
### 为什么使用一键服务部署
使用PaddleHub能够快速进行迁移学习和模型预测,但开发者常面临将训练好的模型部署上线的需求,无论是对外开放服务端口,还是在局域网中搭建预测服务,都需要PaddleHub具有快速部署模型预测服务的能力。在这个背景下,模型一键服务部署工具——PaddleHub Serving应运而生。开发者通过一句命令快速得到一个预测服务API,而无需关注网络框架选择和实现。
### 什么是一键服务部署
PaddleHub Serving是基于PaddleHub的一键模型服务部署工具,能够通过简单的Hub命令行工具轻松启动一个模型预测在线服务,前端通过Flask和Gunicorn完成网络请求的处理,后端直接调用PaddleHub预测接口,同时支持使用多进程方式利用多核提高并发能力,保证预测服务的性能。
### 支持模型
目前PaddleHub Serving支持PaddleHub所有可直接用于预测的模型进行服务部署,包括`lac``senta_bilstm`等nlp类模型,以及`yolov3_coco2017``vgg16_imagenet`等cv类模型,未来还将支持开发者使用PaddleHub Fine-tune API得到的模型用于快捷服务部署。
**NOTE:** 关于PaddleHub Serving一键服务部署的具体信息请参见[PaddleHub Servung](../../../tutorial/serving.md)
## Demo——部署一个在线lac分词服务
### Step1:部署lac在线服务
现在,我们要部署一个lac在线服务,以通过接口获取文本的分词结果。
首先,根据2.1节所述,启动PaddleHub Serving服务端的两种方式分别为:
```shell
$ hub serving start -m lac
```
```shell
$ hub serving start -c serving_config.json
```
其中`serving_config.json`的内容如下:
```json
{
"modules_info": [
{
"module": "lac",
"version": "1.0.0",
"batch_size": 1
}
],
"use_gpu": false,
"port": 8866,
"use_multiprocess": false
}
```
启动成功界面如图:
<p align="center">
<img src="../demo/serving/module_serving/img/start_serving_lac.png" width="100%" />
</p>
这样我们就在8866端口部署了lac的在线分词服务。
*此处warning为Flask提示,不影响使用*
### Step2:访问lac预测接口
在服务部署好之后,我们可以进行测试,用来测试的文本为`今天是个好日子``天气预报说今天要下雨`
客户端代码如下:
```python
# coding: utf8
import requests
import json
if __name__ == "__main__":
# 指定用于用于预测的文本并生成字典{"text": [text_1, text_2, ... ]}
text_list = ["今天是个好日子", "天气预报说今天要下雨"]
text = {"text": text_list}
# 指定预测方法为lac并发送post请求
url = "http://127.0.0.1:8866/predict/text/lac"
r = requests.post(url=url, data=text)
# 打印预测结果
print(json.dumps(r.json(), indent=4, ensure_ascii=False))
```
运行后得到结果:
```python
{
"results": [
{
"tag": [
"TIME", "v", "q", "n"
],
"word": [
"今天", "是", "个", "好日子"
]
},
{
"tag": [
"n", "v", "TIME", "v", "v"
],
"word": [
"天气预报", "说", "今天", "要", "下雨"
]
}
]
}
```
## Demo——其他模型的一键部署服务
获取其他PaddleHub Serving的一键服务部署场景示例,可参见下列demo:
* [图像分类-基于vgg11_imagent](../demo/serving/module_serving/classification_vgg11_imagenet)
&emsp;&emsp;该示例展示了利用vgg11_imagent完成图像分类服务化部署和在线预测,获取图像分类结果。
* [图像生成-基于stgan_celeba](../demo/serving/module_serving/GAN_stgan_celeba)
&emsp;&emsp;该示例展示了利用stgan_celeba生成图像服务化部署和在线预测,获取指定风格的生成图像。
* [文本审核-基于porn_detection_lstm](../demo/serving/module_serving/text_censorship_porn_detection_lstm)
&emsp;&emsp;该示例展示了利用porn_detection_lstm完成中文文本黄色敏感信息鉴定的服务化部署和在线预测,获取文本是否敏感及其置信度。
* [中文词法分析-基于lac](../demo/serving/module_serving/lexical_analysis_lac)
&emsp;&emsp;该示例展示了利用lac完成中文文本分词服务化部署和在线预测,获取文本的分词结果,并可通过用户自定义词典干预分词结果。
* [目标检测-基于yolov3_darknet53_coco2017](.../demo/serving/serving/object_detection_yolov3_darknet53_coco2017)
&emsp;&emsp;该示例展示了利用yolov3_darknet53_coco2017完成目标检测服务化部署和在线预测,获取检测结果和覆盖识别框的图片。
* [中文语义分析-基于simnet_bow](../demo/serving/module_serving/semantic_model_simnet_bow)
&emsp;&emsp;该示例展示了利用simnet_bow完成中文文本相似度检测服务化部署和在线预测,获取文本的相似程度。
* [图像分割-基于deeplabv3p_xception65_humanseg](../demo/serving/module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg)
&emsp;&emsp;该示例展示了利用deeplabv3p_xception65_humanseg完成图像分割服务化部署和在线预测,获取识别结果和分割后的图像。
* [中文情感分析-基于simnet_bow](../demo/serving/module_serving/semantic_model_simnet_bow)
&emsp;&emsp;该示例展示了利用senta_lstm完成中文文本情感分析服务化部署和在线预测,获取文本的情感分析结果。
## Bert Service
除了预训练模型一键服务部署功能外外,PaddleHub Serving还具有`Bert Service`功能,支持ernie_tiny、bert等模型快速部署,对外提供可靠的在线embedding服务,具体信息请参见[Bert Service](../../../tutorial/bert_service.md)
......@@ -21,11 +21,11 @@ Loading vgg11_imagenet successful.
我们用来测试的样例图片为:
<p align="center">
<img src="../img/cat.jpg" width="45%" />
<img src="../../../../docs/imgs/cat.jpg" width="45%" />
</p>
<p align="center">
<img src="../img/flower.jpg" width="45%"/>
<img src="../../../../docs/imgs/flower.jpg" width="45%"/>
</p>
准备的数据格式为:
......
......@@ -21,13 +21,13 @@ Loading lac successful.
### 不使用自定义词典
在服务部署好之后,我们可以进行测试,用来测试的文本为`今天是个好日子``天气预报说今天要下雨`
准备的数据格式为
准备的数据格式为
```python
{"text": [text_1, text_2, ...]}
```
**NOTE:** 字典的key为"text"。
根据文本和数据格式,代码如下
根据文本和数据格式,代码如下
```python
>>> # 指定用于用于预测的文本并生成字典{"text": [text_1, text_2, ... ]}
>>> text_list = ["今天是个好日子", "天气预报说今天要下雨"]
......@@ -35,13 +35,13 @@ Loading lac successful.
```
## Step3:获取并验证结果
接下来发送请求到词法分析API,并得到结果,代码如下
接下来发送请求到词法分析API,并得到结果,代码如下
```python
# 指定预测方法为lac并发送post请求
>>> url = "http://127.0.0.1:8866/predict/text/lac"
>>> r = requests.post(url=url, data=text)
```
`LAC`模型返回的结果为每个文本分词后的结果,我们尝试打印接口返回结果
`LAC`模型返回的结果为每个文本分词后的结果,我们尝试打印接口返回结果
```python
# 打印预测结果
>>> print(json.dumps(r.json(), indent=4, ensure_ascii=False))
......@@ -85,11 +85,11 @@ Loading lac successful.
完整的测试代码见[lac_serving_demo.py](lac_serving_demo.py)
### 使用自定义词典
`LAC`模型在预测时还可以使用自定义词典干预默认分词结果,这种情况只需要将自定义词典以文件的形式附加到request请求即可,数据格式如下
`LAC`模型在预测时还可以使用自定义词典干预默认分词结果,这种情况只需要将自定义词典以文件的形式附加到request请求即可,数据格式如下
```python
{"user_dict": user_dict.txt}
```
根据数据格式,具体代码如下
根据数据格式,具体代码如下
```python
>>> # 指定自定义词典{"user_dict": dict.txt}
>>> file = {"user_dict": open("dict.txt", "rb")}
......
......@@ -7,38 +7,38 @@
下面就带领大家使用PaddleHub Serving,通过简单几步部署一个目标检测服务。
## Step1:启动PaddleHub Serving
启动命令如下
启动命令如下
```shell
$ hub serving start -m yolov3_darknet53_coco2017
```
启动时会显示加载模型过程,启动成功后显示
启动时会显示加载模型过程,启动成功后显示
```shell
Loading yolov3_darknet53_coco2017 successful.
```
这样就完成了一个图像生成服务化API的部署,默认端口号为8866。
## Step2:测试图像生成在线API
我们用来测试的样例图片为
我们用来测试的样例图片为
<p align="center">
<img src="../img/cat.jpg" width="65%" />
<img src="../../../../docs/imgs/cat.jpg" width="65%" />
</p>
<p align="center">
<img src="../img/dog.jpg" width="65%" />
<img src="../../../../docs/imgs/dog.jpg" width="65%" />
</p>
准备的数据格式为
准备的数据格式为
```python
files = [("image", file_1), ("image", file_2)]
```
**NOTE:** 文件列表每个元素第一个参数为"image"。
代码如下
代码如下
```python
>>> # 指定要检测的图片并生成列表[("image", img_1), ("image", img_2), ... ]
>>> file_list = ["../img/cat.jpg", "../img/dog.jpg"]
......@@ -46,13 +46,13 @@ files = [("image", file_1), ("image", file_2)]
```
## Step3:获取并验证结果
然后就可以发送请求到目标检测服务API,并得到结果,代码如下
然后就可以发送请求到目标检测服务API,并得到结果,代码如下
```python
>>> # 指定检测方法为yolov3_darknet53_coco2017并发送post请求
>>> url = "http://127.0.0.1:8866/predict/image/yolov3_darknet53_coco2017"
>>> r = requests.post(url=url, files=files)
```
我们可以打印接口返回结果
我们可以打印接口返回结果
```python
>>> results = eval(r.json()["results"])
>>> print(json.dumps(results, indent=4, ensure_ascii=False))
......@@ -95,13 +95,13 @@ files = [("image", file_1), ("image", file_2)]
```
根据结果可以看出准确识别了请求的图片。
yolov3_darknet53_coco2017返回的结果还包括标注检测框的图像的base64编码格式,经过转换可以得到生成图像,代码如下
yolov3_darknet53_coco2017返回的结果还包括标注检测框的图像的base64编码格式,经过转换可以得到生成图像,代码如下
```python
>>> for item in results:
... with open(output_path, "wb") as fp:
... fp.write(base64.b64decode(item["base64"].split(',')[-1]))
```
查看指定输出文件夹,就能看到生成图像了,如图
查看指定输出文件夹,就能看到生成图像了,如图
<p align="center">
......
......@@ -7,11 +7,11 @@
这里就带领大家使用PaddleHub Serving,通过简单几步部署一个语义模型在线服务。
## Step1:启动PaddleHub Serving
启动命令如下
启动命令如下
```shell
$ hub serving start -m simnet_bow
```
启动时会显示加载模型过程,启动成功后显示
启动时会显示加载模型过程,启动成功后显示
```shell
Loading lac successful.
```
......@@ -20,13 +20,13 @@ Loading lac successful.
## Step2:测试语义模型在线API
在服务部署好之后,我们可以进行测试,用来测试的文本对分别为`[这道题太难了:这道题是上一年的考题], [这道题太难了:这道题不简单], [这道题太难了:这道题很有意思]`
准备的数据格式为
准备的数据格式为
```python
{"text_1": [text_a1, text_a2, ... ], "text_2": [text_b1, text_b2, ... ]}
```
**NOTE:** 字典的key分别为"text_1"和"text_2",与`simnet_bow`模型使用的输入数据一致。
根据文本和数据格式,代码如下
根据文本和数据格式,代码如下
```python
>>> # 指定用于用于匹配的文本并生成字典{"text_1": [text_a1, text_a2, ... ]
>>> # "text_2": [text_b1, text_b2, ... ]}
......@@ -37,13 +37,13 @@ Loading lac successful.
```
## Step3:获取并验证结果
接下来发送请求到语义模型API,并得到结果,代码如下
接下来发送请求到语义模型API,并得到结果,代码如下
```python
>>> # 指定匹配方法为simnet_bow并发送post请求
>>> url = "http://127.0.0.1:8866/predict/text/simnet_bow"
>>> r = requests.post(url=url, data=text)
```
`simnet_bow`模型返回的结果为每对文本对比后的相似度,我们尝试打印接口返回结果
`simnet_bow`模型返回的结果为每对文本对比后的相似度,我们尝试打印接口返回结果
```python
# 打印预测结果
>>> print(json.dumps(r.json(), indent=4, ensure_ascii=False))
......
......@@ -11,14 +11,14 @@
```shell
$ hub serving start -m deeplabv3p_xception65_humanseg
```
启动时会显示加载模型过程,启动成功后显示
启动时会显示加载模型过程,启动成功后显示
```shell
Loading deeplabv3p_xception65_humanseg successful.
```
这样就完成了一个图像分割服务化API的部署,默认端口号为8866。
## Step2:测试图像分割在线API
我们用来测试的样例图片为
我们用来测试的样例图片为
<p align="center">
......@@ -26,7 +26,7 @@ Loading deeplabv3p_xception65_humanseg successful.
</p>
准备的数据格式为
准备的数据格式为
```python
files = [("image", file_1), ("image", file_2)]
```
......@@ -35,18 +35,18 @@ files = [("image", file_1), ("image", file_2)]
代码如下
```python
>>> # 指定要检测的图片并生成列表[("image", img_1), ("image", img_2), ... ]
>>> file_list = ["../img/girl.jpg"]
>>> file_list = ["../../../../docs/imgs/girl.jpg"]
>>> files = [("image", (open(item, "rb"))) for item in file_list]
```
## Step3:获取并验证结果
然后就可以发送请求到图像分割服务API,并得到结果,代码如下
然后就可以发送请求到图像分割服务API,并得到结果,代码如下
```python
>>> # 指定检测方法为deeplabv3p_xception65_humanseg并发送post请求
>>> url = "http://127.0.0.1:8866/predict/image/deeplabv3p_xception65_humanseg"
>>> r = requests.post(url=url, files=files)
```
我们可以打印接口返回结果
我们可以打印接口返回结果
```python
>>> results = eval(r.json()["results"])
>>> print(json.dumps(results, indent=4, ensure_ascii=False))
......@@ -58,13 +58,13 @@ files = [("image", file_1), ("image", file_2)]
]
```
deeplabv3p_xception65_humanseg返回的结果还包括人像分割后的图像的base64编码格式,经过转换可以得到生成图像,代码如下
deeplabv3p_xception65_humanseg返回的结果还包括人像分割后的图像的base64编码格式,经过转换可以得到生成图像,代码如下
```python
>>> for item in results:
... with open(output_path, "wb") as fp:
... fp.write(base64.b64decode(item["base64"].split(',')[-1]))
```
查看指定输出文件夹,就能看到生成图像了,如图
查看指定输出文件夹,就能看到生成图像了,如图
<p align="center">
......
......@@ -21,13 +21,13 @@ Loading senta_lstm successful.
## Step2:测试词法分析在线API
在服务部署好之后,我们可以进行测试,用来测试的文本为`我不爱吃甜食``我喜欢躺在床上看电影`
准备的数据格式为
准备的数据格式为
```python
{"text": [text_1, text_2, ...]}
```
**NOTE:** 字典的key为"text"。
根据文本和数据格式,代码如下
根据文本和数据格式,代码如下
```python
>>> # 指定用于用于预测的文本并生成字典{"text": [text_1, text_2, ... ]}
>>> text_list = ["我不爱吃甜食", "我喜欢躺在床上看电影"]
......@@ -35,13 +35,13 @@ Loading senta_lstm successful.
```
## Step3:获取并验证结果
接下来发送请求到词法分析API,并得到结果,代码如下
接下来发送请求到词法分析API,并得到结果,代码如下
```python
# 指定预测方法为lac并发送post请求
>>> url = "http://127.0.0.1:8866/predict/text/senta_lstm"
>>> r = requests.post(url=url, data=text)
```
`LAC`模型返回的结果为每个文本分词后的结果,我们尝试打印接口返回结果
`LAC`模型返回的结果为每个文本分词后的结果,我们尝试打印接口返回结果
```python
# 打印预测结果
>>> print(json.dumps(r.json(), indent=4, ensure_ascii=False))
......
......@@ -8,11 +8,11 @@
这里就带领大家使用PaddleHub Serving,通过简单几步部署一个文本审核在线服务。
## Step1:启动PaddleHub Serving
启动命令如下
启动命令如下
```shell
$ hub serving start -m porn_detection_lstm
```
启动时会显示加载模型过程,启动成功后显示
启动时会显示加载模型过程,启动成功后显示
```shell
Loading porn_detection_lstm successful.
```
......@@ -21,26 +21,26 @@ Loading porn_detection_lstm successful.
## Step2:测试文本审核在线API
在服务部署好之后,我们可以进行测试,用来测试的文本为`黄片下载``中国黄页`
准备的数据格式为
准备的数据格式为
```python
{"text": [text_1, text_2, ...]}
```
**NOTE:** 字典的key为"text"。
根据文本和数据格式,代码如下
根据文本和数据格式,代码如下
```python
>>> # 指定用于用于预测的文本并生成字典{"text": [text_1, text_2, ... ]}
>>> text_list = ["黄片下载", "中国黄页"]
>>> text = {"text": text_list}
```
## Step3:获取并验证结果
接下来发送请求到文本审核API,并得到结果,代码如下
接下来发送请求到文本审核API,并得到结果,代码如下
```python
# 指定预测方法为lac并发送post请求
>>> url = "http://127.0.0.1:8866/predict/text/porn_detection_lstm"
>>> r = requests.post(url=url, data=text)
```
`porn_detection_lstm`模型返回的结果为每个文本鉴定后的结果,我们尝试打印接口返回结果
`porn_detection_lstm`模型返回的结果为每个文本鉴定后的结果,我们尝试打印接口返回结果
```python
# 打印预测结果
>>> print(json.dumps(r.json(), indent=4, ensure_ascii=False))
......
......@@ -7,7 +7,7 @@
<div align="center">
<img src="../demo/serving/bert_service/img/bs.png" aligh="center" width="100%" alt="BS流程图" />
<img src="../docs/imgs/bs.png" aligh="center" width="100%" alt="BS流程图" />
</div>
......@@ -160,7 +160,7 @@ BSClient.get_result(self, input_text)
|retry|连接失败后的最大重试次数|int|3|
|input_text|输入文本,要获取embedding的原始文本|二维list类型,内部元素为string类型的文本|[['样例1'],['样例2']]|
## Demo-利用Bert Service部署ernie_tiny在线embedding服务
## Demo——利用Bert Service部署ernie_tiny在线embedding服务
在这里,我们将展示一个实际场景中可能使用的demo,我们利用PaddleHub在一台GPU机器上部署`ernie_tiny`模型服务,并在另一台CPU机器上尝试访问,获取一首七言绝句的embedding。
### Step1:安装环境依赖
首先需要安装环境依赖,根据第2节内容分别在两台机器上安装相应依赖。
......@@ -222,6 +222,9 @@ Paddle Inference Server exit successfully!
```
这样,我们就利用一台GPU机器就完成了`Bert Service`的部署,并利用另一台普通机器进行了测试,可见通过`Bert Service`能够方便地进行在线embedding服务的快速部署。
## 预训练模型一键服务部署
除了`Bert Service`外,PaddleHub Serving还具有预训练模型一键服务部署功能,能够将预训练模型快捷部署上线,对外提供可靠的在线预测服务,具体信息请参见[Module Serving](./serving.md)
## FAQ
Q : 如何在一台服务器部署多个模型?
A : 可通过多次启动`Bert Service`,分配不同端口实现。如果使用GPU,需要指定不同的显卡。如同时部署`ernie``bert_chinese_L-12_H-768_A-12`,分别执行命令如下:
......
......@@ -19,7 +19,7 @@ PaddleHub Serving是基于PaddleHub的一键模型服务部署工具,能够通
## 使用
### Step1:启动服务端部署
Hub-Serving有两种启动方式,分别是使用命令行命令启动,以及使用配置文件启动。
PaddleHub Serving有两种启动方式,分别是使用命令行命令启动,以及使用配置文件启动。
#### 命令行命令启动
启动命令
......@@ -34,7 +34,7 @@ $ hub serving start --modules [Module1==Version1, Module2==Version2, ...] \
|参数|用途|
|-|-|
|--modules/-m|Hub-Serving预安装模型,以多个Module==Version键值对的形式列出<br/>*`当不指定Version时,默认选择最新版本`*|
|--modules/-m|PaddleHub Serving预安装模型,以多个Module==Version键值对的形式列出<br>*`当不指定Version时,默认选择最新版本`*|
|--port/-p|服务端口,默认为8866|
|--use_gpu|使用GPU进行预测,必须安装paddlepaddle-gpu|
|--use_multiprocess|是否启用并发方式,默认为单进程方式|
......@@ -70,7 +70,7 @@ $ hub serving start --config config.json
|参数|用途|
|-|-|
|--modules_info|Hub-Serving预安装模型,以字典列表形式列出,其中:<br>`module`为预测服务使用的模型名<br>`version`为预测模型的版本<br>`batch_size`为预测批次大小
|--modules_info|PaddleHub Serving预安装模型,以字典列表形式列出,其中:<br>`module`为预测服务使用的模型名<br>`version`为预测模型的版本<br>`batch_size`为预测批次大小
|--use_gpu|使用GPU进行预测,必须安装paddlepaddle-gpu|
|--port/-p|服务端口,默认为8866|
|--use_multiprocess|是否启用并发方式,默认为单进程方式,推荐多核CPU机器使用此方式|
......@@ -90,11 +90,11 @@ http://0.0.0.0:8866/predict/<CATEGORY\>/\<MODULE>
<p align="center">
<img src="../demo/serving/module_serving/img/web_demo.png" width="60%" />
<img src="../docs/imgs/web_demo.png" width="60%" />
</p>
## 示例-部署一个在线lac分词服务
## Demo——部署一个在线lac分词服务
### Step1:部署lac在线服务
现在,我们要部署一个lac在线服务,以通过接口获取文本的分词结果。
......@@ -126,7 +126,7 @@ $ hub serving start -c serving_config.json
<p align="center">
<img src="../demo/serving/module_serving/img/start_serving_lac.png" width="100%" />
<img src="../docs/imgs/start_serving_lac.png" width="100%" />
</p>
......@@ -180,7 +180,7 @@ if __name__ == "__main__":
}
```
## 示例-其他模型的一键部署服务
## Demo——其他模型的一键部署服务
获取其他PaddleHub Serving的一键服务部署场景示例,可参见下列demo
......@@ -215,3 +215,6 @@ if __name__ == "__main__":
* [中文情感分析-基于simnet_bow](../demo/serving/module_serving/semantic_model_simnet_bow)
&emsp;&emsp;该示例展示了利用senta_lstm完成中文文本情感分析服务化部署和在线预测,获取文本的情感分析结果。
## Bert Service
除了预训练模型一键服务部署功能外外,PaddleHub Serving还具有`Bert Service`功能,支持ernie_tiny、bert等模型快速部署,对外提供可靠的在线embedding服务,具体信息请参见[Bert Service](./bert_service.md)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册