README.md 4.1 KB
Newer Older
W
wangguibao 已提交
1
# 概述
W
wangguibao 已提交
2
PaddlePaddle是公司开源的机器学习框架,广泛支持各种深度学习模型的定制化开发; Paddle serving是Paddle的在线预测部分,与Paddle模型训练环节无缝衔接,提供机器学习预测云服务。
W
wangguibao 已提交
3 4 5

# 框架简介

W
wangguibao 已提交
6
![图片](https://paddle-serving.bj.bcebos.com/doc/framework.png)
W
wangguibao 已提交
7 8 9 10 11 12 13 14 15 16 17

- 基础框架:屏蔽一个RPC服务所需的所有元素,让用户只关注自己的业务算子的开发;
- 业务框架:基于Protobuf定制请求接口,基于有限DAG定制业务逻辑,并行化调度;
- 模型框架:CPU/FPGA/GPU等硬件异构,多模型间异步优先级调度,新引擎灵活扩展,配置化驱动;
- 用户接口:搭建服务=定义proto文件+实现/复用Op+撰写配置,支持sdk/http请求;

## 主要功能

Paddle serving框架为策略工程师提供以下三层面的功能性扩展:

### 模型
W
wangguibao 已提交
18 19
- 预测引擎:集成PaddlePaddle深度学习框架的预测Lib;
- 模型种类:支持Paddle Fluid模型格式;
W
wangguibao 已提交
20 21 22 23 24 25 26 27 28 29 30 31
- 用户接口:支持模型加载、重载的配置化驱动,不同种类模型的预测接口完全一致;
- 模型调度:支持基于异步线程模型的多模型预估调度,实现异构资源的优先级调度;

### 业务
- 预测流程:通过有限DAG图描述一次预测从Request到Response的业务流程,节点Node是一个最小逻辑单元——OP;
- 预测逻辑:框架封装常用预处理、预测计算、后处理等常用OP,用户通过自定义OP算子实现特化处理逻辑;

### 服务

- RPC:底层通过Baidu-rpc封装网络交互,Server端可配置化启动多个独立Service,框架会搜集Service粒度的详细业务指标,并按照BVar接口对接到Noah等监控平台;
- SDK:基于Baidu-rpc的client进行封装,提供多下游连接管理、可扩展路由策略、可定制参数实验、自动分包等机制,支持同步、半同步、纯异步等交互模式,以及多种兼容协议,所有连接策略均通过配置驱动

W
wangguibao 已提交
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
# 目录结构

```
.
|-- cmake                               # CMake文件
|   |-- external
|   `-- patch
|-- configure                           # Configure模块; Paddle Serving使用Protobuf格式的配置语言
|   |-- include
|   |-- proto
|   |-- src
|   `-- tests
|-- doc                                 # 文档
|-- inferencer-fluid-cpu                # 与PaddlePaddle CPU预测库的接口代码
|   |-- include
|   `-- src
|-- pdcodegen                           # pdcodegen插件;请用此插件编译用户定义的服务接口描述protobuf文件
|   |-- plugin
|   `-- src
|-- predictor                           # Serving端库: libpdserving.a
|   |-- common
|   |-- conf
|   |-- framework
|   |-- mempool
|   |-- op
|   |-- proto
|   |-- scripts
|   |   `-- images
|   |-- src
|   `-- unittest
|-- sdk-cpp                             # Client端库: libpdsdk-cpp.a
|   |-- conf                            # Client端示例的conf目录
|   |-- data                            # Client端示例的data目录
|   |   `-- images
|   |-- demo                            # Client端示例代码;包括如文本分类、图像分类等任务的例子
|   |-- include                         # Client端库的头文件
|   |-- proto                           # Client端示例的proto文件
|   `-- src                             # Client端库的源代码文件
|-- serving                             # Serving示例。该目录下代码与libpdserving.a联编,产出一个可执行的serving二进制
|   |-- conf                            # Serving示例的Conf目录
|   |-- data                            # Serving示例的data目录
|   |   `-- model
|   |       `-- paddle
|   |           `-- fluid
|   |               `-- SE_ResNeXt50_32x4d
|   |-- op                              # Serving示例OP
|   |-- proto                           # Serving示例的proto文件
|   `-- scripts
`-- tools                               # CI工具
    `-- codestyle
```
W
wangguibao 已提交
83

W
wangguibao 已提交
84
# 文档
W
wangguibao 已提交
85

W
wangguibao 已提交
86
[设计文档](doc/DESIGN.md)
W
wangguibao 已提交
87 88 89 90 91 92

[从零开始写一个预测服务](doc/CREATING.md)

[编译安装](doc/INSTALL.md)

[FAQ](doc/FAQ.md)