README_CN.md 16.4 KB
Newer Older
M
MRXLT 已提交
1 2
(简体中文|[English](./README.md))

J
Jiawei Wang 已提交
3 4
<p align="center">
    <br>
T
TeslaZhao 已提交
5
<img src='doc/serving_logo.png' width = "600" height = "130">
J
Jiawei Wang 已提交
6 7
    <br>
<p>
8

M
MRXLT 已提交
9

B
barrierye 已提交
10

J
Jiawei Wang 已提交
11 12 13 14 15 16 17 18 19 20 21
<p align="center">
    <br>
    <a href="https://travis-ci.com/PaddlePaddle/Serving">
        <img alt="Build Status" src="https://img.shields.io/travis/com/PaddlePaddle/Serving/develop">
    </a>
    <img alt="Release" src="https://img.shields.io/badge/Release-0.0.3-yellowgreen">
    <img alt="Issues" src="https://img.shields.io/github/issues/PaddlePaddle/Serving">
    <img alt="License" src="https://img.shields.io/github/license/PaddlePaddle/Serving">
    <img alt="Slack" src="https://img.shields.io/badge/Join-Slack-green">
    <br>
<p>
W
wangjiawei04 已提交
22

W
wangjiawei04 已提交
23

W
wangjiawei04 已提交
24 25 26 27 28 29 30 31

- [动机](./README_CN.md#动机)
- [教程](./README_CN.md#教程)
- [安装](./README_CN.md#安装)
- [快速开始示例](./README_CN.md#快速开始示例)
- [文档](README_CN.md#文档)
- [社区](README_CN.md#社区)

J
Jiawei Wang 已提交
32
<h2 align="center">动机</h2>
J
Jiawei Wang 已提交
33

J
Jiawei Wang 已提交
34
Paddle Serving 旨在帮助深度学习开发者轻易部署在线预测服务。 **本项目目标**: 当用户使用 [Paddle](https://github.com/PaddlePaddle/Paddle) 训练了一个深度神经网络,就同时拥有了该模型的预测服务。
J
Jiawei Wang 已提交
35

W
wangjiawei04 已提交
36 37 38 39 40 41 42
<h3 align="center">Paddle Serving的核心功能</h3>

- 与Paddle训练紧密连接,绝大部分Paddle模型可以 **一键部署**.
- 支持 **工业级的服务能力** 例如模型管理,在线加载,在线A/B测试等.
- 支持客户端和服务端之间 **高并发和高效通信**.
- 支持 **多种编程语言** 开发客户端,例如C++, Python和Java.

J
Jiawei Wang 已提交
43
***
J
Jiawei Wang 已提交
44

W
wangjiawei04 已提交
45
- 任何经过[PaddlePaddle](https://github.com/paddlepaddle/paddle)训练的模型,都可以经过直接保存或是[模型转换接口](./doc/SAVE_CN.md),用于Paddle Serving在线部署。
W
wangjiawei04 已提交
46
- 支持[多模型串联服务部署](./doc/PIPELINE_SERVING_CN.md), 同时提供Rest接口和RPC接口以满足您的需求,[Pipeline示例](./python/examples/pipeline)
T
TeslaZhao 已提交
47
- 支持Paddle生态的各大模型库, 例如[PaddleDetection](./python/examples/detection)[PaddleOCR](./python/examples/ocr)[PaddleRec](https://github.com/PaddlePaddle/PaddleRec/tree/master/recserving/movie_recommender)
W
wangjiawei04 已提交
48
- 提供丰富多彩的前后处理,方便用户在训练、部署等各阶段复用相关代码,弥合AI开发者和应用开发者之间的鸿沟,详情参考[模型示例](./python/examples/)
W
wangjiawei04 已提交
49

B
barrierye 已提交
50 51 52
<p align="center">
    <img src="doc/demo.gif" width="700">
</p>
W
wangjiawei04 已提交
53

W
wangjiawei04 已提交
54 55
<h2 align="center">教程</h2>

W
wangjiawei04 已提交
56
Paddle Serving开发者为您提供了简单易用的[AIStudio教程-Paddle Serving服务化部署框架](https://www.paddlepaddle.org.cn/tutorials/projectdetail/1555945)
W
wangjiawei04 已提交
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

教程提供了如下内容

<ul>
<li>Paddle Serving环境安装</li>
  <ul>
    <li>Docker镜像启动方式
    <li>pip安装Paddle Serving
  </ul>
<li>快速体验部署在线推理服务</li>
<li>部署在线推理服务进阶流程</li>
  <ul>
    <li>获取可用于部署在线服务的模型</li>
    <li>启动推理服务</li>
  </ul>
W
wangjiawei04 已提交
72
<li>Paddle Serving在线部署实例</li>
W
wangjiawei04 已提交
73 74 75 76 77
  <ul>
    <li>使用Paddle Serving部署图像检测服务</li>
    <li>使用Paddle Serving部署OCR Pipeline在线服务</li>
  </ul>
</ul>
J
Jiawei Wang 已提交
78

W
wangjiawei04 已提交
79

J
Jiawei Wang 已提交
80
<h2 align="center">安装</h2>
W
wangjiawei04 已提交
81

B
barrierye 已提交
82
**强烈建议**您在**Docker内构建**Paddle Serving,请查看[如何在Docker中运行PaddleServing](doc/RUN_IN_DOCKER_CN.md)。更多镜像请查看[Docker镜像列表](doc/DOCKER_IMAGES_CN.md)
B
barrierye 已提交
83

J
Jiawei Wang 已提交
84
**提示**:目前paddlepaddle 2.1版本的默认GPU环境是Cuda 10.2,因此GPU Docker的示例代码以Cuda 10.2为准。镜像和pip安装包也提供了其余GPU环境,用户如果使用其他环境,需要仔细甄别并选择合适的版本。
W
wangjiawei04 已提交
85

J
Jiawei Wang 已提交
86 87
**提示**:本项目仅支持Python3.6/3.7/3.8,接下来所有的与Python/Pip相关的操作都需要选择正确的Python版本。

M
MRXLT 已提交
88 89
```
# 启动 CPU Docker
B
bjjwwang 已提交
90 91
docker pull registry.baidubce.com/paddlepaddle/serving:0.6.2-devel
docker run -p 9292:9292 --name test -dit registry.baidubce.com/paddlepaddle/serving:0.6.2-devel bash
M
MRXLT 已提交
92
docker exec -it test bash
W
wangjiawei04 已提交
93
git clone https://github.com/PaddlePaddle/Serving
M
MRXLT 已提交
94 95 96
```
```
# 启动 GPU Docker
B
bjjwwang 已提交
97 98
nvidia-docker pull registry.baidubce.com/paddlepaddle/serving:0.6.2-cuda10.2-cudnn8-devel
nvidia-docker run -p 9292:9292 --name test -dit registry.baidubce.com/paddlepaddle/serving:0.6.2-cuda10.2-cudnn8-devel bash
M
MRXLT 已提交
99
nvidia-docker exec -it test bash
W
wangjiawei04 已提交
100
git clone https://github.com/PaddlePaddle/Serving
M
MRXLT 已提交
101
```
W
wangjiawei04 已提交
102

J
Jiawei Wang 已提交
103 104 105
安装所需的pip依赖
```
cd Serving
T
TeslaZhao 已提交
106
pip3 install -r python/requirements.txt
J
Jiawei Wang 已提交
107 108
```

W
wangjiawei04 已提交
109
```shell
B
bjjwwang 已提交
110 111 112 113
pip3 install paddle-serving-client==0.6.2
pip3 install paddle-serving-server==0.6.2 # CPU
pip3 install paddle-serving-app==0.6.2
pip3 install paddle-serving-server-gpu==0.6.2.post102 #GPU with CUDA10.2 + TensorRT7
W
wangjiawei04 已提交
114
# 其他GPU环境需要确认环境再选择执行哪一条
B
bjjwwang 已提交
115 116
pip3 install paddle-serving-server-gpu==0.6.2.post101 # GPU with CUDA10.1 + TensorRT6
pip3 install paddle-serving-server-gpu==0.6.2.post11 # GPU with CUDA10.1 + TensorRT7
W
wangjiawei04 已提交
117 118
```

M
MRXLT 已提交
119
您可能需要使用国内镜像源(例如清华源, 在pip命令中添加`-i https://pypi.tuna.tsinghua.edu.cn/simple`)来加速下载。
120

W
fix  
wangjiawei04 已提交
121
如果需要使用develop分支编译的安装包,请从[最新安装包列表](./doc/LATEST_PACKAGES.md)中获取下载地址进行下载,使用`pip install`命令进行安装。如果您想自行编译,请参照[Paddle Serving编译文档](./doc/COMPILE_CN.md)
M
MRXLT 已提交
122

W
wangjiawei04 已提交
123
paddle-serving-server和paddle-serving-server-gpu安装包支持Centos 6/7, Ubuntu 16/18和Windows 10。
M
MRXLT 已提交
124

T
TeslaZhao 已提交
125
paddle-serving-client和paddle-serving-app安装包支持Linux和Windows,其中paddle-serving-client仅支持python3.6/3.7/3.8。
M
MRXLT 已提交
126

B
bjjwwang 已提交
127
**最新的0.6.2的版本,已经不支持Cuda 9.0和Cuda 10.0,Python已不支持2.7和3.5。**
T
TeslaZhao 已提交
128 129

推荐安装2.1.0及以上版本的paddle
W
wangjiawei04 已提交
130

D
Dong Daxiang 已提交
131
```
W
wangjiawei04 已提交
132
# CPU环境请执行
T
TeslaZhao 已提交
133
pip3 install paddlepaddle==2.1.0
D
Dong Daxiang 已提交
134

W
wangjiawei04 已提交
135
# GPU Cuda10.2环境请执行
T
TeslaZhao 已提交
136
pip3 install paddlepaddle-gpu==2.1.0
W
wangjiawei04 已提交
137
```
D
Dong Daxiang 已提交
138

J
Jiawei Wang 已提交
139
**注意**: 如果您的Cuda版本不是10.2,请勿直接执行上述命令,需要参考[Paddle官方文档-多版本whl包列表](https://www.paddlepaddle.org.cn/documentation/docs/zh/install/Tables.html#whl-release)
B
barrierye 已提交
140

J
Jiawei Wang 已提交
141
选择相应的GPU环境的url链接并进行安装,例如Cuda 10.1的Python3.6用户,请选择表格当中的`cp36-cp36m``cuda10.1-cudnn7-mkl-gcc8.2-avx-trt6.0.1.5`对应的url,复制下来并执行
W
wangjiawei04 已提交
142
```
T
TeslaZhao 已提交
143
pip3 install https://paddle-wheel.bj.bcebos.com/with-trt/2.1.0-gpu-cuda10.1-cudnn7-mkl-gcc8.2/paddlepaddle_gpu-2.1.0.post101-cp36-cp36m-linux_x86_64.whl
D
Dong Daxiang 已提交
144
```
J
Jiawei Wang 已提交
145
由于默认的`paddlepaddle-gpu==2.1.0`是Cuda 10.2,并没有联编TensorRT,因此如果需要和在`paddlepaddle-gpu`上使用TensorRT,需要在上述多版本whl包列表当中,找到`cuda10.2-cudnn8.0-trt7.1.3`,下载对应的Python版本。更多信息请参考[如何使用TensorRT?](doc/TENSOR_RT_CN.md)
W
wangjiawei04 已提交
146

W
wangjiawei04 已提交
147 148 149
如果是其他环境和Python版本,请在表格中找到对应的链接并用pip安装。

对于**Windows 10 用户**,请参考文档[Windows平台使用Paddle Serving指导](./doc/WINDOWS_TUTORIAL_CN.md)
D
Dong Daxiang 已提交
150 151 152


<h2 align="center">快速开始示例</h2>
W
wangjiawei04 已提交
153

W
wangjiawei04 已提交
154
这个快速开始示例主要是为了给那些已经有一个要部署的模型的用户准备的,而且我们也提供了一个可以用来部署的模型。如果您想知道如何从离线训练到在线服务走完全流程,请参考前文的AiStudio教程。
D
Dong Daxiang 已提交
155

J
Jiawei Wang 已提交
156
<h3 align="center">波士顿房价预测</h3>
J
Jiawei Wang 已提交
157

W
wangjiawei04 已提交
158
进入到Serving的git目录下,进入到`fit_a_line`例子
W
wangjiawei04 已提交
159
``` shell
W
wangjiawei04 已提交
160 161
cd Serving/python/examples/fit_a_line
sh get_data.sh
W
wangjiawei04 已提交
162 163
```

J
Jiawei Wang 已提交
164
Paddle Serving 为用户提供了基于 HTTP 和 RPC 的服务
J
Jiawei Wang 已提交
165

W
wangjiawei04 已提交
166
<h3 align="center">RPC服务</h3>
J
Jiawei Wang 已提交
167

W
wangjiawei04 已提交
168
用户还可以使用`paddle_serving_server.serve`启动RPC服务。 尽管用户需要基于Paddle Serving的python客户端API进行一些开发,但是RPC服务通常比HTTP服务更快。需要指出的是这里我们没有指定`--name`
J
Jiawei Wang 已提交
169 170

``` shell
T
TeslaZhao 已提交
171
python3 -m paddle_serving_server.serve --model uci_housing_model --thread 10 --port 9292
J
Jiawei Wang 已提交
172 173 174
```
<center>

T
ud doc  
Thomas Young 已提交
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
| Argument                                       | Type | Default | Description                                           |
| ---------------------------------------------- | ---- | ------- | ----------------------------------------------------- |
| `thread`                                       | int  | `2`     | Number of brpc service thread                         |
| `op_num`                                       | int[]| `0`     | Thread Number for each model in asynchronous mode     |
| `op_max_batch`                                 | int[]| `32`    | Batch Number for each model in asynchronous mode      |
| `gpu_ids`                                      | str[]| `"-1"`  | Gpu card id for each model                            |
| `port`                                         | int  | `9292`  | Exposed port of current service to users              |
| `model`                                        | str[]| `""`    | Path of paddle model directory to be served           |
| `mem_optim_off`                                | -    | -       | Disable memory / graphic memory optimization          |
| `ir_optim`                                     | bool | False   | Enable analysis and optimization of calculation graph |
| `use_mkl` (Only for cpu version)               | -    | -       | Run inference with MKL                                |
| `use_trt` (Only for trt version)               | -    | -       | Run inference with TensorRT                           |
| `use_lite` (Only for Intel x86 CPU or ARM CPU) | -    | -       | Run PaddleLite inference                              |
| `use_xpu`                                      | -    | -       | Run PaddleLite inference with Baidu Kunlun XPU        |
| `precision`                                    | str  | FP32    | Precision Mode, support FP32, FP16, INT8              |
190
| `use_calib`                                    | bool | False   | Use TRT int8 calibration                              |
T
ud doc  
Thomas Young 已提交
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
| `gpu_multi_stream`                             | bool | False   | EnableGpuMultiStream to get larger QPS                |

#### 异步模型的说明
    异步模式适用于1、请求数量非常大的情况,2、多模型串联,想要分别指定每个模型的并发数的情况。
    异步模式有助于提高Service服务的吞吐(QPS),但对于单次请求而言,时延会有少量增加。
    异步模式中,每个模型会启动您指定个数的N个线程,每个线程中包含一个模型实例,换句话说每个模型相当于包含N个线程的线程池,从线程池的任务队列中取任务来执行。
    异步模式中,各个RPC Server的线程只负责将Request请求放入模型线程池的任务队列中,等任务被执行完毕后,再从任务队列中取出已完成的任务。
    上表中通过 --thread 10 指定的是RPC Server的线程数量,默认值为2,--op_num 指定的是各个模型的线程池中线程数N,默认值为0,表示不使用异步模式。
    --op_max_batch 指定的各个模型的batch数量,默认值为32,该参数只有当--op_num不为0时才生效。
    
#### 当您的某个模型想使用多张GPU卡部署时.
python3 -m paddle_serving_server.serve --model uci_housing_model --thread 10 --port 9292 --gpu_ids 0,1,2
#### 当您的一个服务包含两个模型部署时.
python3 -m paddle_serving_server.serve --model uci_housing_model_1 uci_housing_model_2 --thread 10 --port 9292
#### 当您的一个服务包含两个模型,且每个模型都需要指定多张GPU卡部署时.
python3 -m paddle_serving_server.serve --model uci_housing_model_1 uci_housing_model_2 --thread 10 --port 9292 --gpu_ids 0,1 1,2
#### 当您的一个服务包含两个模型,且每个模型都需要指定多张GPU卡,且需要异步模式每个模型指定不同的并发数时.
python3 -m paddle_serving_server.serve --model uci_housing_model_1 uci_housing_model_2 --thread 10 --port 9292 --gpu_ids 0,1 1,2 --op_num 4 8
J
Jiawei Wang 已提交
209 210 211

</center>

W
wangjiawei04 已提交
212
``` python
J
Jiawei Wang 已提交
213
# A user can visit rpc service through paddle_serving_client API
W
wangjiawei04 已提交
214 215 216 217 218 219 220
from paddle_serving_client import Client

client = Client()
client.load_client_config("uci_housing_client/serving_client_conf.prototxt")
client.connect(["127.0.0.1:9292"])
data = [0.0137, -0.1136, 0.2553, -0.0692, 0.0582, -0.0727,
        -0.1583, -0.0584, 0.6283, 0.4919, 0.1856, 0.0795, -0.0332]
W
wangjiawei04 已提交
221
fetch_map = client.predict(feed={"x": np.array(data).reshape(1,13,1)}, fetch=["price"])
W
wangjiawei04 已提交
222 223 224
print(fetch_map)

```
J
Jiawei Wang 已提交
225 226
在这里,`client.predict`函数具有两个参数。 `feed`是带有模型输入变量别名和值的`python dict``fetch`被要从服务器返回的预测变量赋值。 在该示例中,在训练过程中保存可服务模型时,被赋值的tensor名为`"x"``"price"`

J
Jiawei Wang 已提交
227 228

<h3 align="center">HTTP服务</h3>
J
Jiawei Wang 已提交
229

J
Jiawei Wang 已提交
230 231 232
用户也可以将数据格式处理逻辑放在服务器端进行,这样就可以直接用curl去访问服务,参考如下案例,在目录`python/examples/fit_a_line`.

```
T
TeslaZhao 已提交
233
python3 -m paddle_serving_server.serve --model uci_housing_model --thread 10 --port 9292 --name uci
J
Jiawei Wang 已提交
234 235 236 237 238 239 240 241 242 243
```
客户端输入
```
curl -H "Content-Type:application/json" -X POST -d '{"feed":[{"x": [0.0137, -0.1136, 0.2553, -0.0692, 0.0582, -0.0727, -0.1583, -0.0584, 0.6283, 0.4919, 0.1856, 0.0795, -0.0332]}], "fetch":["price"]}' http://127.0.0.1:9292/uci/prediction
```
返回结果
```
{"result":{"price":[[18.901151657104492]]}}
```

J
Jiawei Wang 已提交
244
<h3 align="center">Pipeline服务</h3>
J
Jiawei Wang 已提交
245 246

Paddle Serving提供业界领先的多模型串联服务,强力支持各大公司实际运行的业务场景,参考 [OCR文字识别案例](python/examples/pipeline/ocr),在目录`python/examples/pipeline/ocr`
J
Jiawei Wang 已提交
247 248 249

我们先获取两个模型
```
T
TeslaZhao 已提交
250
python3 -m paddle_serving_app.package --get_model ocr_rec
J
Jiawei Wang 已提交
251
tar -xzvf ocr_rec.tar.gz
T
TeslaZhao 已提交
252
python3 -m paddle_serving_app.package --get_model ocr_det
J
Jiawei Wang 已提交
253 254 255 256
tar -xzvf ocr_det.tar.gz
```
然后启动服务端程序,将两个串联的模型作为一个整体的服务。
```
T
TeslaZhao 已提交
257
python3 web_service.py
J
Jiawei Wang 已提交
258 259 260
```
最终使用http的方式请求
```
T
TeslaZhao 已提交
261
python3 pipeline_http_client.py
J
Jiawei Wang 已提交
262 263 264
```
也支持rpc的方式
```
T
TeslaZhao 已提交
265
python3 pipeline_rpc_client.py
J
Jiawei Wang 已提交
266
```
J
Jiawei Wang 已提交
267
输出
W
wangjiawei04 已提交
268
```
J
Jiawei Wang 已提交
269
{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['土地整治与土壤修复研究中心', '华南农业大学1素图']"]}
W
wangjiawei04 已提交
270 271
```

H
huangjianhui 已提交
272
<h3 align="center">关闭Serving/Pipeline服务</h3>
H
huangjianhui 已提交
273

H
huangjianhui 已提交
274
**方式一** :Ctrl+C关停服务
H
huangjianhui 已提交
275

H
huangjianhui 已提交
276
**方式二** :在启动Serving/Pipeline服务路径或者环境变量SERVING_HOME路径下(该路径下存在文件ProcessInfo.json)
H
huangjianhui 已提交
277

H
huangjianhui 已提交
278
```
H
huangjianhui 已提交
279
python3 -m paddle_serving_server.serve stop
H
huangjianhui 已提交
280 281
```

J
Jiawei Wang 已提交
282 283 284 285 286
<h2 align="center">文档</h2>

### 新手教程
- [怎样保存用于Paddle Serving的模型?](doc/SAVE_CN.md)
- [十分钟构建Bert-As-Service](doc/BERT_10_MINS_CN.md)
W
wangjiawei04 已提交
287
- [Paddle Serving示例合辑](python/examples)
J
Jiawei Wang 已提交
288
- [如何在Paddle Serving处理常见数据类型](doc/PROCESS_DATA.md)
J
Jiawei Wang 已提交
289
- [如何在Serving上处理level of details(LOD)?](doc/LOD_CN.md)
W
wangjiawei04 已提交
290

J
Jiawei Wang 已提交
291
### 开发者教程
B
barrierye 已提交
292
- [如何开发一个新的Web Service?](doc/NEW_WEB_SERVICE_CN.md)
J
Jiawei Wang 已提交
293
- [如何编译PaddleServing?](doc/COMPILE_CN.md)
W
wangjiawei04 已提交
294
- [如何开发Pipeline?](doc/PIPELINE_SERVING_CN.md)
J
Jiawei Wang 已提交
295
- [如何在K8S集群上部署Paddle Serving?](doc/PADDLE_SERVING_ON_KUBERNETES.md)
B
bjjwwang 已提交
296
- [如何在Paddle Serving上部署安全网关?](doc/SERVING_AUTH_DOCKER.md)
J
Jiawei Wang 已提交
297
- [如何开发Pipeline?](doc/PIPELINE_SERVING_CN.md)
M
MRXLT 已提交
298 299
- [如何使用uWSGI部署Web Service](doc/UWSGI_DEPLOY_CN.md)
- [如何实现模型文件热加载](doc/HOT_LOADING_IN_SERVING_CN.md)
W
fix  
wangjiawei04 已提交
300
- [如何使用TensorRT?](doc/TENSOR_RT_CN.md)
J
Jiawei Wang 已提交
301 302

### 关于Paddle Serving性能
M
MRXLT 已提交
303
- [如何测试Paddle Serving性能?](python/examples/util/)
M
MRXLT 已提交
304 305
- [如何优化性能?](doc/PERFORMANCE_OPTIM_CN.md)
- [在一张GPU上启动多个预测服务](doc/MULTI_SERVICE_ON_ONE_GPU_CN.md)
J
Jiawei Wang 已提交
306
- [GPU版Benchmarks](doc/BENCHMARKING_GPU.md)
J
Jiawei Wang 已提交
307 308 309

### 设计文档
- [Paddle Serving设计文档](doc/DESIGN_DOC_CN.md)
W
wangjiawei04 已提交
310

W
wangjiawei04 已提交
311 312 313
### FAQ
- [常见问答](doc/FAQ.md)

J
Jiawei Wang 已提交
314
<h2 align="center">社区</h2>
W
wangjiawei04 已提交
315

J
Jiawei Wang 已提交
316
### Slack
W
wangjiawei04 已提交
317

J
Jiawei Wang 已提交
318
想要同开发者和其他用户沟通吗?欢迎加入我们的 [Slack channel](https://paddleserving.slack.com/archives/CUBPKHKMJ)
W
wangjiawei04 已提交
319

W
wangjiawei04 已提交
320
### 贡献代码
W
wangjiawei04 已提交
321

J
Jiawei Wang 已提交
322
如果您想为Paddle Serving贡献代码,请参考 [Contribution Guidelines](doc/CONTRIBUTE.md)
W
wangjiawei04 已提交
323

J
Jiawei Wang 已提交
324 325 326
- 特别感谢 [@BeyondYourself](https://github.com/BeyondYourself) 提供grpc教程,更新FAQ教程,整理文件目录。
- 特别感谢 [@mcl-stone](https://github.com/mcl-stone) 提供faster rcnn benchmark脚本
- 特别感谢 [@cg82616424](https://github.com/cg82616424) 提供unet benchmark脚本和修改部分注释错误
J
Jiawei Wang 已提交
327
- 特别感谢 [@cuicheng01](https://github.com/cuicheng01) 提供PaddleClas的11个模型
J
Jiawei Wang 已提交
328

J
Jiawei Wang 已提交
329
### 反馈
W
wangjiawei04 已提交
330

J
Jiawei Wang 已提交
331
如有任何反馈或是bug,请在 [GitHub Issue](https://github.com/PaddlePaddle/Serving/issues)提交
W
wangjiawei04 已提交
332

J
Jiawei Wang 已提交
333
### License
W
wangjiawei04 已提交
334

J
Jiawei Wang 已提交
335
[Apache 2.0 License](https://github.com/PaddlePaddle/Serving/blob/develop/LICENSE)