提交 7e3d9c86 编写于 作者: G guru4elephant

update readme file

上级 18ee0af3
# 概述 # Paddle Serving
PaddlePaddle是百度开源的机器学习框架,广泛支持各种深度学习模型的定制化开发; Paddle serving是PaddlePaddle的在线预估服务框架,通过加载PaddlePaddle训练得到的模型,利用PaddlePaddle的预测库,提供机器学习预测云服务。 Paddle Serving是PaddlePaddle的在线预估服务框架,能够帮助开发者轻松实现从移动端、服务器端调用深度学习模型的远程预测服务。当前Paddle Serving以支持PaddlePaddle训练的模型为主,可以与Paddle训练框架联合使用,快速部署预估服务。
# 文档 # 客户端快速上手
Paddle Serving当前的develop版本支持轻量级Python API进行快速预测,我们假设远程已经部署的Paddle Serving的文本分类模型,您可以在自己的服务器快速安装客户端并进行快速预测。
[设计文档](doc/DESIGN.md) ## 客户端安装
```
pip install paddle-serving-client
```
[从零开始写一个预测服务](doc/CREATING.md) ## 训练过程中保存Serving的配置
```
import os
import sys
import paddle
import logging
import paddle.fluid as fluid
import paddle_serving as serving
logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger("fluid")
logger.setLevel(logging.INFO)
def load_vocab(filename):
vocab = {}
with open(filename) as f:
wid = 0
for line in f:
vocab[line.strip()] = wid
wid += 1
vocab["<unk>"] = len(vocab)
return vocab
if __name__ == "__main__":
vocab = load_vocab('imdb.vocab')
dict_dim = len(vocab)
data = fluid.layers.data(name="words", shape=[1], dtype="int64", lod_level=1)
label = fluid.layers.data(name="label", shape=[1], dtype="int64")
dataset = fluid.DatasetFactory().create_dataset()
filelist = ["train_data/%s" % x for x in os.listdir("train_data")]
dataset.set_use_var([data, label])
pipe_command = "python imdb_reader.py"
dataset.set_pipe_command(pipe_command)
dataset.set_batch_size(4)
dataset.set_filelist(filelist)
dataset.set_thread(10)
from nets import cnn_net
avg_cost, acc, prediction = cnn_net(data, label, dict_dim)
optimizer = fluid.optimizer.SGD(learning_rate=0.01)
optimizer.minimize(avg_cost)
exe = fluid.Executor(fluid.CPUPlace())
exe.run(fluid.default_startup_program())
epochs = 30
save_dirname = "cnn_model"
for i in range(epochs):
exe.train_from_dataset(program=fluid.default_main_program(),
dataset=dataset, debug=False)
logger.info("TRAIN --> pass: {}".format(i))
fluid.io.save_inference_model("%s/epoch%d.model" % (save_dirname, i),
[data.name, label.name], [acc], exe)
serving.save_model("%s/epoch%d.model" % (save_dirname, i), "client_config{}".format(i),
{"words": data, "label": label},
{"acc": acc, "cost": avg_cost, "prediction": prediction})
```
[编译安装](doc/INSTALL.md) ## 启动服务
TBA
[FAQ](doc/FAQ.md) ## 客户端访问
``` python
from paddle_serving import Client
import sys
client = Client()
client.load_client_config(sys.argv[1])
client.connect(["127.0.0.1:9292"])
# 框架简介 for line in sys.stdin:
group = line.strip().split()
words = [int(x) for x in group[1:int(group[0])]]
label = [int(group[-1])]
feed = {"words": words, "label": label}
fetch = ["acc", "cost", "prediction"]
fetch_map = client.predict(feed=feed, fetch=fetch)
print("{} {}".format(fetch_map["prediction"][1], label[0]))
![图片](doc/architecture.png) ```
## 主要功能
Paddle serving框架为策略工程师提供以下三层面的功能性扩展: ## 完成操作截屏
TBA
### 模型 # 文档
- 预测引擎:集成PaddlePaddle深度学习框架的预测Lib;
- 模型种类:支持Paddle Fluid模型格式;
- 用户接口:支持模型加载、重载的配置化驱动,不同种类模型的预测接口完全一致;
- 模型调度:支持基于异步线程模型的多模型预估调度,实现异构资源的优先级调度;
### 业务 [设计文档](doc/DESIGN.md)
- 预测流程:通过有限DAG图描述一次预测从Request到Response的业务流程,节点Node是一个最小逻辑单元——OP;
- 预测逻辑:框架封装常用预处理、预测计算、后处理等常用OP,用户通过自定义OP算子实现特化处理逻辑;
### 服务 [从零开始写一个预测服务](doc/CREATING.md)
- RPC:底层通过Baidu-rpc封装网络交互,Server端可配置化启动多个独立Service,框架会搜集Service粒度的详细业务指标,并按照BVar接口对接到Noah等监控平台; [编译安装](doc/INSTALL.md)
- SDK:基于Baidu-rpc的client进行封装,提供多下游连接管理、可扩展路由策略、可定制参数实验、自动分包等机制,支持同步、半同步、纯异步等交互模式,以及多种兼容协议,所有连接策略均通过配置驱动
# 目录结构 [FAQ](doc/FAQ.md)
```
.
|-- cmake # CMake文件
| |-- external
| `-- patch
|-- configure # Configure模块; Paddle Serving使用Protobuf格式的配置语言
| |-- include
| |-- proto
| |-- src
| `-- tests
|-- demo-client # Client端示例;包括如文本分类、图像分类等任务的例子
| |-- conf # Client示例的conf目录
| |-- data # Client示例的data目录
| | \-- images
| `-- src # Client示例的src目录
|-- demo-serving # Serving示例。该目录下代码与libpdserving.a联编,产出一个可执行的serving二进制
| |-- conf # Serving示例的Conf目录
| |-- data # Serving示例的data目录
| | `-- model
| | `-- paddle
| | `-- fluid
| | |-- SE_ResNeXt50_32x4d
| | `-- text_classification_lstm
| |-- op # Serving示例OP
| |-- proto # Serving示例的proto文件
| `-- scripts
|-- doc # 文档
|-- inferencer-fluid-cpu # 与PaddlePaddle CPU预测库的接口代码
| |-- include
| `-- src
|-- pdcodegen # pdcodegen插件;请用此插件编译用户定义的服务接口描述protobuf文件
| |-- plugin
| `-- src
|-- predictor # Serving端库: libpdserving.a
| |-- common
| |-- conf
| |-- cts
| | `-- lib
| |-- framework
| |-- mempool
| |-- op
| |-- proto
| |-- scripts
| | `-- images
| |-- src
| `-- unittest
|-- sdk-cpp # Client端库: libpdsdk-cpp.a
| |-- include
| |-- plugin
| |-- proto
| `-- src
`-- tools # CI工具
`-- codestyle
```
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册