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

M
MRXLT 已提交
3
paddle_serving_app是Paddle Serving框架的工具组件,包含了预训练模型下载、数据预处理方法等功能。方便用户快速体验和部署模型示例、分析预测服务性能、调试模型预测服务等。
M
MRXLT 已提交
4 5 6 7 8 9 10 11 12 13

## 安装

```shell
pip install paddle_serving_app
```

## 获取模型列表

```shell
M
fix doc  
MRXLT 已提交
14
python -m paddle_serving_app.package --list_model
M
MRXLT 已提交
15 16 17 18 19 20 21 22
```

## 下载预训练模型

```shell
python -m paddle_serving_app.package --get_model senta_bilstm
```

M
fix app  
MRXLT 已提交
23
paddle_serving_app中内置了10种预训练模型,涵盖了6种预测任务。获取到的模型文件可以直接用于部署,添加`--tutorial`参数可以获取对应的部署方式。
M
MRXLT 已提交
24 25 26 27

| 预测服务类型 | 模型名称                                         |
| ------------ | ------------------------------------------------ |
| 中文情感分析 | 'senta_bilstm', 'senta_bow', 'senta_cnn'         |
M
fix app  
MRXLT 已提交
28
| 语义理解     | 'ernie'                                          |
M
MRXLT 已提交
29
| 中文分词     | 'lac'                                            |
M
fix app  
MRXLT 已提交
30
| 图像检测     | 'faster_rcnn'                                    |
M
MRXLT 已提交
31 32 33 34 35
| 图像分割     | 'unet', 'deeplabv3'                              |
| 图像分类     | 'resnet_v2_50_imagenet', 'mobilenet_v2_imagenet' |

## 数据预处理API

M
MRXLT 已提交
36
paddle_serving_app针对CV和NLP领域的模型任务,提供了多种常见的数据预处理方法。
M
MRXLT 已提交
37

M
MRXLT 已提交
38 39 40
- class ChineseBertReader 
    
    中文语义理解模型预处理
M
MRXLT 已提交
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

  - `__init__(vocab_file, max_seq_len=20)`

    - vocab_file(str):词典文件路径。

    - max_seq_len(int,可选):处理后的样本长度,超出的部分会截断,不足的部分会padding 0。默认值20。

  - `process(line)`
    - line(str):输入文本

  [参考示例](../examples/bert/bert_client.py)

- class LACReader 中文分词预处理

  - `__init__(dict_floder)`
    - dict_floder(str)词典文件目录
  - `process(sent)`
    - sent(str):输入文本
  - `parse_result`
    - words(str):原始文本
    - crf_decode(np.array):模型预测结果中的CRF编码

M
MRXLT 已提交
63
  [参考示例](../examples/lac/lac_web_service.py)
M
MRXLT 已提交
64 65 66 67 68 69 70 71 72 73

- class SentaReader

  - `__init__(vocab_path)`
    - vocab_path(str):词典文件目录
  - `process(cols)`
    - cols(str):分词后的文本

  [参考示例](../examples/senta/senta_web_service.py)

M
fix app  
MRXLT 已提交
74
- 图像的预处理方法相比于上述的方法更加灵活多变,可以通过以下的多个类进行组合,[参考示例](../examples/imagenet/resnet50_rpc_client.py)
M
MRXLT 已提交
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116

- class Sequentia

  - `__init__(transforms)`
    - transforms(list):图像预处理方法类的列表
  - `__call__(img)`
    - img:图像处理的输入,具体类型与transforms中的第一个预处理方法有关

- class File2Image

  - `__call__(img_path)`
    - img_path(str):图像文件路径

- class URL2Image

  - `__call__(img_url)`
    - img_url(str):图像url

- class Normalize

  - `__init__(mean,std)`
    - mean(float):均值
    - std(float):方差
  - `__call__(img)`
    - img(np.array):(C,H,W)排列的图像数据

- class CenterCrop

  - `__init__(size)`
    - size(list/int):预期的裁剪后的大小,list类型时需要包含预期的长和宽,int类型时会返回边长为size的正方形图片
  - `__call__(img)`
    - img(np.array):输入图像

- class Resize

  - `__init__(size, max_size=2147483647, interpolation=None)`
    - size(list/int):预期的图像大小,list类型时需要包含预期的长和宽,int类型时,短边会设置为size的长度,长边按比例缩放
  - `__call__(img)`
    - img(numpy array):输入图像

## Timeline 工具

M
MRXLT 已提交
117
通过Timeline工具可以将预测服务的准备数据、client等待、server端op等各阶段起止时间可视化,方便分析预测服务中的时间占用比重,在此基础上有针对性地优化预测服务。
M
MRXLT 已提交
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132

### 使用方式

1. client端在进行预测之前,通过环境变量打开Paddle Serving框架中的各阶段日志打点功能

   ```shell
   export FLAGS_profile_client=1 #开启client端各阶段时间打点
   export FLAGS_profile_server=1 #开启server端各阶段时间打点
   ```

2. 执行预测,并将client端的日志重定向到文件中,例如profile文件。

3. 将日志文件中的信息导出成为trace文件

   ```shell
M
MRXLT 已提交
133
   python -m paddle_serving_app.trace --profile_file profile --trace_file trace
M
MRXLT 已提交
134 135 136 137
   ```

4. 使用chrome浏览器,打开`chrome://tracing/`网址,通过load按钮加载上一步产生的trace文件,即可将预测服务的各阶段时间信息可视化。

M
MRXLT 已提交
138 139
   效果如下图,图中展示了使用[bert示例](https://github.com/PaddlePaddle/Serving/tree/develop/python/examples/bert)的GPU预测服务,server端开启4卡预测,client端启动4进程,batch size为1时的各阶段timeline。
其中bert_pre代表client端的数据预处理阶段,client_infer代表client完成预测请求的发送到接收结果的阶段,图中的process代表的是client的进程号,每个进程的第二行展示的是server各个op的timeline。
M
MRXLT 已提交
140 141 142 143 144

   ![timeline](../../doc/timeline-example.png)

## Debug工具

M
MRXLT 已提交
145
Paddle Serving框架的server预测op使用了Paddle 的预测框架,在部署预测服务之前可能需要对预测服务的输入输出进行检验或者查看资源占用等。因此在paddle_serving_app中内置了本地预测工具,使用方式与通过client向服务端发送请求一致。
M
MRXLT 已提交
146 147 148 149

[fit_a_line预测服务](../examples/fit_a_line)为例,使用以下代码即可执行本地预测。

```python
M
MRXLT 已提交
150
from paddle_serving_app.local_predict import Debugger
M
MRXLT 已提交
151 152 153 154 155 156 157 158
import numpy as np

debugger = Debugger()
debugger.load_model_config("./uci_housing_model", gpu=False)
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]
fetch_map = debugger.predict(feed={"x":data}, fetch = ["price"])
```