Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Serving
提交
e48426f2
S
Serving
项目概览
PaddlePaddle
/
Serving
1 年多 前同步成功
通知
186
Star
833
Fork
253
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
105
列表
看板
标记
里程碑
合并请求
10
Wiki
2
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Serving
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
105
Issue
105
列表
看板
标记
里程碑
合并请求
10
合并请求
10
Pages
分析
分析
仓库分析
DevOps
Wiki
2
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
e48426f2
编写于
3月 25, 2022
作者:
T
TeslaZhao
提交者:
GitHub
3月 25, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1719 from TeslaZhao/develop
更新Serving官方文档
上级
03519541
1fc1aeba
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
547 addition
and
3 deletion
+547
-3
doc/Offical_Docs/1-2_Benchmark.md
doc/Offical_Docs/1-2_Benchmark.md
+4
-3
doc/Offical_Docs/3-0_QuickStart_Int_CN.md
doc/Offical_Docs/3-0_QuickStart_Int_CN.md
+2
-0
doc/Offical_Docs/3-2_QuickStart_Pipeline_OCR_CN.md
doc/Offical_Docs/3-2_QuickStart_Pipeline_OCR_CN.md
+222
-0
doc/Offical_Docs/4-0_ModelZoo_CN.md
doc/Offical_Docs/4-0_ModelZoo_CN.md
+114
-0
doc/Offical_Docs/9-1_Kubernetes_CN.md
doc/Offical_Docs/9-1_Kubernetes_CN.md
+205
-0
doc/images/kubernetes_design.png
doc/images/kubernetes_design.png
+0
-0
未找到文件。
doc/Offical_Docs/1-2_Benchmark.md
浏览文件 @
e48426f2
...
...
@@ -13,11 +13,12 @@
**二.测试方法**
-
请求数量递增:不断增加 client 数量,指标稳定后统计 client 的耗时信息
-
竞品对比:C++ Serving(蓝色) 与 Tenserflow Serving(灰色)都是 C++ 实现,且同为业界主流 Serving 框架
-
吞吐性能(QPS):折线图,数值越大表示每秒钟处理的请求数量越大,性能就越好
-
平均处理时延(ms):柱状图,数值越大表示单个请求处理时间越长,性能就越差
-
同步模式:网络线程同步处理,保证显存占用相同的情况下,开启最大线程数
-
异步模式:异步线程处理方式,保证显存占用相同,最大批量为32,异步线程数为2
-
性能对比:
-
竞品选择:C++ Serving(蓝色) 与 Tenserflow Serving(灰色)都是 C++ 实现,且同为业界主流 Serving 框架
-
吞吐性能(QPS):折线图,数值越大表示每秒钟处理的请求数量越大,性能就越好
-
平均处理时延(ms):柱状图,数值越大表示单个请求处理时间越长,性能就越差
**三.同步模式**
...
...
doc/Offical_Docs/3-0_QuickStart_Int_CN.md
0 → 100644
浏览文件 @
e48426f2
# 部署案例概述
doc/Offical_Docs/3-2_QuickStart_Pipeline_OCR_CN.md
0 → 100644
浏览文件 @
e48426f2
# Python Pipeline 快速部署案例
Python Pipeline 框架使用 Python 语言开发,是一套端到端多模型组合服务编程框架,旨在降低编程门槛,提高资源使用率(尤其是GPU设备),提升整体服务的预估效率。详细设计参考
[
Python Pipeline 设计与使用
](
)
## 模型介绍
OCR 技术一般指光学字符识别。 OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。
[
PaddleOCR
](
https://github.com/PaddlePaddle/PaddleOCR
)
是百度飞桨 OCR 模型套件库,旨在打造一套丰富、领先、且实用的 OCR 工具库,助力开发者训练出更好的模型,并应用落地。具有 PP-OCR 系列高质量预训练模型,准确的识别效果;支持中英文数字组合识别、竖排文本识别、长文本识别;支持多语言识别:韩语、日语、德语、法语等约80种语言等特性。
PaddleOCR 提供的 PP-OCR 系列模型覆盖轻量级服务端、轻量级移动端和通用服务端3种场景。
| 模型介绍 | 模型大小 | 模型名称 | 推荐场景 |
| ------- | ------ | ----- | ----- |
| 中英文超轻量模型 | 13.0M | ch_PP-OCRv2_xx | 服务器端 或 移动端 |
| 中英文超轻量移动端模型 | 9.4M | ch_ppocr_mobile_v2.0_xx | 移动端|
| 中英文通用服务端模型 | 143.4M | ch_ppocr_server_v2.0_xx | 服务器端 |
## 模型步骤
前提条件是你已完成
[
环境安装
](
)步骤,并已验证环境安装成功,此处不在赘述。
在克隆 Serving 代码后,进入 examples/Pipeline/PaddleOCR/ocr 目录下,包括程序、配置和性能测试脚本。
```
git clone https://github.com/PaddlePaddle/Serving
```
按以下5个步骤操作即可实现 OCR 示例部署。
**一.获取模型**
本章节选用中英文超轻量模型 ch_PP-OCRv2_xx 制作部署案例,模型体积小,效果很好,属于性价比很高的选择。
为了节省大家的时间,已将预训练模型使用
[
保存模型服务化参数
](
)方法打包成压缩包,下载并解压即可使用。如你自训练的模型需经过保存模型服务化参数步骤才能服务化部署。
```
python3 -m paddle_serving_app.package --get_model ocr_rec
tar -xzvf ocr_rec.tar.gz
python3 -m paddle_serving_app.package --get_model ocr_det
tar -xzvf ocr_det.tar.gz
```
**二.下载测试数据集(可选)**
第二步,下载测试图片集,如使用自有测试数据集,可忽略此步骤。
```
wget --no-check-certificate https://paddle-serving.bj.bcebos.com/ocr/test_imgs.tar
tar xf test_imgs.tar
```
**三.修改 Config.yml 配置(可选)**
第三步,通过修改配置文件设置服务、图、OP 级别属性。如果使用默认配置,此步骤可忽略。
由于配置项较多,仅重点介绍部分核心选项的使用,完整配置选项说明可参考
[
配置说明
](
)
```
#rpc端口, rpc_port和http_port不允许同时为空。当rpc_port为空且http_port不为空时,会自动将rpc_port设置为http_port+1
rpc_port: 18090
#http端口, rpc_port和http_port不允许同时为空。当rpc_port可用且http_port为空时,不自动生成http_port
http_port: 9999
#worker_num, 最大并发数。当build_dag_each_worker=True时, 框架会创建worker_num个进程,每个进程内构建grpcSever和DAG
##当build_dag_each_worker=False时,框架会设置主线程grpc线程池的max_workers=worker_num
worker_num: 20
#build_dag_each_worker, False,框架在进程内创建一条DAG;True,框架会每个进程内创建多个独立的DAG
build_dag_each_worker: false
#有向无环图级别的选项
dag:
#op资源类型, True, 为线程模型;False,为进程模型
is_thread_op: False
#重试次数
retry: 1
#使用性能分析, True,生成Timeline性能数据,对性能有一定影响;False为不使用
use_profile: false
# 统计各个阶段耗时、Channel在 PipelineServingLogs/pipeline.tracer
tracer:
#每次记录的间隔,单位:秒
interval_s: 10
#模型或可独立控制并发的处理函数级别选项
op:
det:
#并发数,is_thread_op=True时,为线程并发;否则为进程并发
concurrency: 6
#当op配置没有server_endpoints时,从local_service_conf读取本地服务配置
local_service_conf:
#client类型,包括brpc, grpc和local_predictor.local_predictor不启动Serving服务,进程内预测
client_type: local_predictor
#det模型路径
model_config: ocr_det_model
#Fetch结果列表,以client_config中fetch_var的alias_name为准
fetch_list: ["save_infer_model/scale_0.tmp_1"]
# device_type, 0=cpu, 1=gpu, 2=tensorRT, 3=arm cpu, 4=kunlun xpu
device_type: 0
#计算硬件ID,当devices为""或不写时为CPU预测;当devices为"0", "0,1,2"时为GPU预测,表示使用的GPU卡
devices: ""
#use_mkldnn
#use_mkldnn: True
#thread_num
thread_num: 2
#ir_optim
ir_optim: True
#开启tensorrt后,进行优化的子图包含的最少节点数
#min_subgraph_size: 13
rec:
#并发数,is_thread_op=True时,为线程并发;否则为进程并发
concurrency: 3
#超时时间, 单位ms
timeout: -1
#Serving交互重试次数,默认不重试
retry: 1
#当op配置没有server_endpoints时,从local_service_conf读取本地服务配置
local_service_conf:
#client类型,包括brpc, grpc和local_predictor。local_predictor不启动Serving服务,进程内预测
client_type: local_predictor
#rec模型路径
model_config: ocr_rec_model
#Fetch结果列表,以client_config中fetch_var的alias_name为准
fetch_list: ["save_infer_model/scale_0.tmp_1"]
# device_type, 0=cpu, 1=gpu, 2=tensorRT, 3=arm cpu, 4=kunlun xpu
device_type: 0
#计算硬件ID,当devices为""或不写时为CPU预测;当devices为"0", "0,1,2"时为GPU预测,表示使用的GPU卡
devices: ""
#use_mkldnn,仅当 CPU 推理时使用
#use_mkldnn: True
#thread_num,为 CPU 推理时,数学计算线程数,开大可降低处理时长
thread_num: 2
#ir_optim,IR 优化,开启 TensorRT 时,必须开启 ir_optim
ir_optim: True
#开启tensorrt后,进行优化的子图包含的最少节点数
#min_subgraph_size: 3
```
**四.代码与配置信息绑定 **
第四步,实现代码和配置文件 Config.yml 绑定,以及设置多模型组合关系。具体包括:
1.
重写模型前后处理:
每个 op (模型或函数) 处理和 图结构 定义在 web_service.py 程序中,本案例实现了
`DetOp`
和
`RecOp`
2个 OP
```
# DetOp 对应配置文件 Config.yml中 det op
class DetOp(Op):
def init_op(self):
def preprocess(self, input_dicts, data_id, log_id):
def postprocess(self, input_dicts, fetch_dict, data_id, log_id):
# RecOp 对应配置文件 Config.yml中 rec op
class RecOp(Op):
def init_op(self):
def preprocess(self, input_dicts, data_id, log_id):
def postprocess(self, input_dicts, fetch_dict, data_id, log_id):
```
2.
构建多模型组合关系
继承父类
`WebService`
派生出
`OcrService`
类,通过重写
`get_pipeline_response()`
接口,实例化
`DetOp`
和
`RecOp`
,
`name`
字段与 config.yml 中 op 名称一致; input_ops 是前置 OP 列表实现 多模型组合的图结构。
```
class OcrService(WebService):
def get_pipeline_response(self, read_op):
det_op = DetOp(name="det", input_ops=[read_op])
rec_op = RecOp(name="rec", input_ops=[det_op])
return rec_op
```
3.
绑定代码与配置文件
通过构造函数
`OcrService(name="ocr")`
设置请求 URL 中 name 字段;通过
`prepare_pipeline_config()`
接口绑定配置文件
`config.yml`
;通过
`run_service()`
接口启动服务。
```
ocr_service = OcrService(name="ocr")
ocr_service.prepare_pipeline_config("config.yml")
ocr_service.run_service()
```
**五.启动服务与验证**
运行程序
`web_service.py`
启动服务端
```
# Run Server
python3 web_service.py &>log.txt &
```
启动客户端前,要确认 URL://{ip}:{port}/{name}/{method} 。本项目中 {name} 即是 web_service.py 中 OcrService name 参数 "ocr"。 {method} 默认为 "prediction"
```
# Run Client
python3 pipeline_http_client.py
```
模型效果:
<p
align=
"center"
>
<img
src=
"https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.3/doc/imgs_results/PP-OCRv2/PP-OCRv2-pic003.jpg?raw=true"
width=
"345"
/>
</p>
doc/Offical_Docs/4-0_ModelZoo_CN.md
0 → 100644
浏览文件 @
e48426f2
# 模型库
Paddle Serving 已实现9个类别,共计46个模型的服务化部署示例。
**一.图像分类与识别**
模型部署示例请参阅下表:
| 场景| 模型 | 类型 | 示例使用的框架 | 下载 |
| --- | --- | --- | --- | ---- |
| 图像识别 |pp_shitu | PaddleClas |
[
C++ Serving
](
../examples/C++/PaddleClas/pp_shitu
)
|
[
.tar.gz
](
https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/serving/pp_shitu.tar.gz
)
|
| 图像分类 | resnet_v2_50_imagenet | PaddleClas |
[
C++ Serving
](
../examples/C++/PaddleClas/resnet_v2_50
)
</br>
[
Pipeline Serving
](
../examples/Pipeline/PaddleClas/ResNet_V2_50
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/paddle_hub_models/image/ImageClassification/resnet_v2_50_imagenet.tar.gz
)
| Pipeline Serving, C++ Serving|
| 图像分类 |mobilenet_v2_imagenet | PaddleClas |
[
C++ Serving
](
../examples/C++/PaddleClas/mobilenet
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/paddle_hub_models/image/ImageClassification/mobilenet_v2_imagenet.tar.gz
)
|
| 图像分类 |resnet50_vd | PaddleClas |
[
C++ Serving
](
../examples/C++/PaddleClas/imagenet
)
</br>
[
Pipeline Serving
](
../examples/Pipeline/PaddleClas/ResNet50_vd
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/model/ResNet50_vd.tar
)
|
| 图像分类 |ResNet50_vd_KL | PaddleClas |
[
Pipeline Serving
](
../examples/Pipeline/PaddleClas/ResNet50_vd_KL
)
|
[
.tar
](
https://paddle-serving.bj.bcebos.com/model/ResNet50_vd_KL.tar
)
|
| 图像分类 |ResNet50_vd_FPGM | PaddleClas |
[
Pipeline Serving
](
../examples/Pipeline/PaddleClas/ResNet50_vd_FPGM
)
|
[
.tar
](
https://paddle-serving.bj.bcebos.com/model/ResNet50_vd_FPGM.tar
)
|
| 图像分类 |ResNet50_vd_PACT | PaddleClas |
[
Pipeline Serving
](
../examples/Pipeline/PaddleClas/ResNet50_vd_PACT
)
|
[
.tar
](
https://paddle-serving.bj.bcebos.com/model/ResNet50_vd_PACT.tar
)
|
| 图像分类 |ResNeXt101_vd_64x4d | PaddleClas |
[
Pipeline Serving
](
../examples/Pipeline/PaddleClas/ResNeXt101_vd_64x4d
)
|
[
.tar
](
https://paddle-serving.bj.bcebos.com/model/ResNeXt101_vd_64x4d.tar
)
|
| 图像分类 |DarkNet53 | PaddleClas |
[
Pipeline Serving
](
../examples/Pipeline/PaddleClas/DarkNet53
)
|
[
.tar
](
https://paddle-serving.bj.bcebos.com/model/DarkNet53.tar
)
|
| 图像分类 |MobileNetV1 | PaddleClas |
[
Pipeline Serving
](
../examples/Pipeline/PaddleClas/MobileNetV1
)
|
[
.tar
](
https://paddle-serving.bj.bcebos.com/model/MobileNetV1.tar
)
|
| 图像分类 |MobileNetV2 | PaddleClas |
[
Pipeline Serving
](
../examples/Pipeline/PaddleClas/MobileNetV2
)
|
[
.tar
](
https://paddle-serving.bj.bcebos.com/model/MobileNetV2.tar
)
|
| 图像分类 |MobileNetV3_large_x1_0 | PaddleClas |
[
Pipeline Serving
](
../examples/Pipeline/PaddleClas/MobileNetV3_large_x1_0
)
|
[
.tar
](
https://paddle-serving.bj.bcebos.com/model/MobileNetV3_large_x1_0.tar
)
|
| 图像生成 |HRNet_W18_C | PaddleClas |
[
Pipeline Serving
](
../examples/Pipeline/PaddleClas/HRNet_W18_C
)
|
[
.tar
](
https://paddle-serving.bj.bcebos.com/model/HRNet_W18_C.tar
)
|
| 图像分类 |ShuffleNetV2_x1_0 | PaddleClas |
[
Pipeline Serving
](
../examples/Pipeline/PaddleClas/ShuffleNetV2_x1_0
)
|
[
.tar
](
https://paddle-serving.bj.bcebos.com/model/ShuffleNetV2_x1_0.tar
)
|
---
**二.文本类**
模型部署示例请参阅下表:
| 场景| 模型 | 类型 | 示例使用的框架 | 下载 |
| --- | --- | --- | --- | ---- |
| 文本生成 | bert_chinese_L-12_H-768_A-12 | PaddleNLP |
[
C++ Serving
](
../examples/C++/PaddleNLP/bert
)
</br>
[
Pipeline Serving
](
../examples/Pipeline/PaddleNLP/bert
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/paddle_hub_models/text/SemanticModel/bert_chinese_L-12_H-768_A-12.tar.gz
)
|
| 情感分析 |senta_bilstm | PaddleNLP |
[
C++ Serving
](
../examples/C++/PaddleNLP/senta
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/paddle_hub_models/text/SentimentAnalysis/senta_bilstm.tar.gz
)
|C++ Serving|
| 词法分析 |lac | PaddleNLP |
[
C++ Serving
](
../examples/C++/PaddleNLP/lac
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/paddle_hub_models/text/LexicalAnalysis/lac.tar.gz
)
|
| 机器翻译 |transformer | PaddleNLP |
[
Pipeline Serving
](
https://github.com/PaddlePaddle/PaddleNLP/blob/develop/examples/machine_translation/transformer/deploy/serving/README.md
)
|
[
model
](
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/machine_translation/transformer
)
|
| 标点符号预测 | ELECTRA | PaddleNLP |
[
Pipeline Serving
](
https://github.com/PaddlePaddle/PaddleNLP/blob/develop/examples/language_model/electra/deploy/serving/README.md
)
|
[
model
](
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/language_model/electra
)
|
| 抽取文本向量| In-batch Negatives | PaddleNLP |
[
Pipeline Serving
](
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/neural_search/recall/in_batch_negative
)
|
[
model
](
https://bj.bcebos.com/v1/paddlenlp/models/inbatch_model.zip
)
|
---
**三.推荐系统**
模型部署示例请参阅下表:
| 场景| 模型 | 类型 | 示例使用的框架 | 下载 |
| --- | --- | --- | --- | ---- |
| CTR预估 | criteo_ctr | PaddleRec |
[
C++ Serving
](
../examples/C++/PaddleRec/criteo_ctr
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/criteo_ctr_example/criteo_ctr_demo_model.tar.gz
)
|
| CTR预估 | criteo_ctr_with_cube | PaddleRec |
[
C++ Serving
](
../examples/C++/PaddleRec/criteo_ctr_with_cube
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/unittest/ctr_cube_unittest.tar.gz
)
|
| 内容推荐 | wide&deep | PaddleRec |
[
C++ Serving
](
https://github.com/PaddlePaddle/PaddleRec/blob/release/2.1.0/doc/serving.md
)
|
[
model
](
https://github.com/PaddlePaddle/PaddleRec/blob/release/2.1.0/models/rank/wide_deep/README.md
)
|
---
**四.人脸识别**
模型部署示例请参阅下表:
| 场景| 模型 | 类型 | 示例使用的框架 | 下载 |
| --- | --- | --- | --- | ---- |
| 人脸识别|blazeface | PaddleDetection |
[
C++ Serving
](
../examples/C++/PaddleDetection/blazeface
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/paddle_hub_models/image/ObjectDetection/blazeface.tar.gz
)
|C++ Serving|
---
**五.目标检测**
模型部署示例请参阅下表:
| 场景| 模型 | 类型 | 示例使用的框架 | 下载 |
| --- | --- | --- | --- | ---- |
| 目标检测 |cascade_mask_rcnn_r50_vd_fpn_ssld_2x_coco | PaddleDetection |
[
C++ Serving
](
../examples/C++/PaddleDetection/cascade_rcnn
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/pddet_demo/cascade_mask_rcnn_r50_vd_fpn_ssld_2x_coco_serving.tar.gz
)
|
| 目标检测 | yolov4 | PaddleDetection |
[
C++ Serving
](
../examples/C++/PaddleDetection/yolov4
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/paddle_hub_models/image/ObjectDetection/yolov4.tar.gz
)
|C++ Serving|
| 目标检测 |fcos_dcn_r50_fpn_1x_coco | PaddleDetection |
[
C++ Serving
](
../examples/C++/PaddleDetection/fcos_dcn_r50_fpn_1x_coco
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/pddet_demo/2.0/fcos_dcn_r50_fpn_1x_coco.tar
)
|
| 目标检测 | ssd_vgg16_300_240e_voc | PaddleDetection |
[
C++ Serving
](
../examples/C++/PaddleDetection/ssd_vgg16_300_240e_voc
)
|
[
.tar
](
https://paddle-serving.bj.bcebos.com/pddet_demo/2.0/ssd_vgg16_300_240e_voc.tar
)
|
| 目标检测 |yolov3_darknet53_270e_coco | PaddleDetection |
[
C++ Serving
](
../examples/C++/PaddleDetection/yolov3_darknet53_270e_coco
)
</br>
[
Pipeline Serving
](
../examples/Pipeline/PaddleDetection/yolov3
)
|
[
.tar
](
https://paddle-serving.bj.bcebos.com/pddet_demo/2.0/yolov3_darknet53_270e_coco.tar
)
|
| 目标检测 | faster_rcnn_r50_fpn_1x_coco | PaddleDetection |
[
C++ Serving
](
../examples/C++/PaddleDetection/faster_rcnn_r50_fpn_1x_coco
)
</br>
[
Pipeline Serving
](
../examples/Pipeline/PaddleDetection/faster_rcnn
)
|
[
.tar
](
https://paddle-serving.bj.bcebos.com/pddet_demo/2.0/faster_rcnn_r50_fpn_1x_coco.tar
)
|
| 目标检测 |ppyolo_r50vd_dcn_1x_coco | PaddleDetection |
[
C++ Serving
](
../examples/C++/PaddleDetection/ppyolo_r50vd_dcn_1x_coco
)
|
[
.tar
](
https://paddle-serving.bj.bcebos.com/pddet_demo/2.0/ppyolo_r50vd_dcn_1x_coco.tar
)
|
| 目标检测 | ppyolo_mbv3_large_coco | PaddleDetection |
[
Pipeline Serving
](
../examples/Pipeline/PaddleDetection/ppyolo_mbv3
)
|
[
.tar
](
https://paddle-serving.bj.bcebos.com/pddet_demo/2.0/ppyolo_mbv3_large_coco.tar
)
|
| 目标检测 | ttfnet_darknet53_1x_coco | PaddleDetection |
[
C++ Serving
](
../examples/C++/PaddleDetection/ttfnet_darknet53_1x_coco
)
|
[
.tar
](
https://paddle-serving.bj.bcebos.com/pddet_demo/ttfnet_darknet53_1x_coco.tar
)
|
| 目标检测 |YOLOv3-DarkNet | PaddleDetection |
[
C++ Serving
](
https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.3/deploy/serving
)
|
[
.pdparams
](
https://paddledet.bj.bcebos.com/models/yolov3_darknet53_270e_coco.pdparams
)
</br>
[
.yml
](
https://github.com/PaddlePaddle/PaddleDetection/blob/develop/configs/yolov3/yolov3_darknet53_270e_coco.yml
)
|
---
**六.文字识别**
模型部署示例请参阅下表:
| 场景| 模型 | 类型 | 示例使用的框架 | 下载 |
| --- | --- | --- | --- | ---- |
| 文字识别 |ocr_rec | PaddleOCR |
[
C++ Serving
](
../examples/C++/PaddleOCR/ocr
)
</br>
[
Pipeline Serving
](
../examples/Pipeline/PaddleOCR/ocr
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/paddle_hub_models/image/OCR/ocr_rec.tar.gz
)
|
| 文字识别 |ocr_det | PaddleOCR |
[
C++ Serving
](
../examples/C++/PaddleOCR/ocr
)
</br>
[
Pipeline Serving
](
../examples/Pipeline/PaddleOCR/ocr
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/ocr/ocr_det.tar.gz
)
|
| 文字识别 |ch_ppocr_mobile_v2.0_det | PaddleOCR |
[
Pipeline Serving
](
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.3/deploy/pdserving/README.md
)
|
[
model
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar
)
</br>
[
.yml
](
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.3/configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml
)
|
| 文字识别 |ch_ppocr_server_v2.0_det | PaddleOCR |
[
Pipeline Serving
](
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.3/deploy/pdserving/README.md
)
|
[
model
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar
)
</br>
[
.yml
](
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.3/configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml
)
|
| 文字识别 |ch_ppocr_mobile_v2.0_rec | PaddleOCR |
[
Pipeline Serving
](
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.3/deploy/pdserving/README.md
)
|
[
model
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar
)
</br>
[
.yml
](
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.3/configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml
)
|
| 文字识别 |ch_ppocr_server_v2.0_rec | PaddleOCR |
[
Pipeline Serving
](
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.3/deploy/pdserving/README.md
)
|
[
model
](
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar
)
</br>
[
.yml
](
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.3/configs/rec/ch_ppocr_v2.0/rec_chinese_common_train_v2.0.yml
)
|
| 文字识别 |ch_ppocr_mobile_v2.0 | PaddleOCR |
[
Pipeline Serving
](
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.3/deploy/pdserving/README.md
)
|
[
model
](
https://github.com/PaddlePaddle/PaddleOCR
)
|
| 文字识别 |ch_ppocr_server_v2.0 | PaddleOCR |
[
Pipeline Serving
](
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.3/deploy/pdserving/README.md
)
|
[
model
](
https://github.com/PaddlePaddle/PaddleOCR
)
|
---
**七.图像分割**
模型部署示例请参阅下表:
| 场景| 模型 | 类型 | 示例使用的框架 | 下载 |
| --- | --- | --- | --- | ---- |
| 图像分割 | deeplabv3 | PaddleSeg |
[
C++ Serving
](
../examples/C++/PaddleSeg/deeplabv3
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/paddle_hub_models/image/ImageSegmentation/deeplabv3.tar.gz
)
|
| 图像分割 | unet | PaddleSeg |
[
C++ Serving
](
../examples/C++/PaddleSeg/unet_for_image_seg
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/paddle_hub_models/image/ImageSegmentation/unet.tar.gz
)
|
---
**八.关键点检测**
模型部署示例请参阅下表:
| 场景| 模型 | 类型 | 示例使用的框架 | 下载 |
| --- | --- | --- | --- | ---- |
| 关键点检测 |faster_rcnn_hrnetv2p_w18_1x | PaddleDetection |
[
C++ Serving
](
../examples/C++/PaddleDetection/faster_rcnn_hrnetv2p_w18_1x
)
|
[
.tar.gz
](
https://paddle-serving.bj.bcebos.com/pddet_demo/faster_rcnn_hrnetv2p_w18_1x.tar.gz
)
|
---
**九.视频理解**
模型部署示例请参阅下表:
| 场景| 模型 | 类型 | 示例使用的框架 | 下载 |
| --- | --- | --- | --- | ---- |
| 视频理解 |PPTSN_K400 | PaddleVideo |
[
Pipeline Serving
](
../examples/Pipeline/PaddleVideo/PPTSN_K400
)
|
[
model
](
https://paddle-serving.bj.bcebos.com/model/PaddleVideo/PPTSN_K400.tar
)
|
Paddle Serving 代码库下模型部署示例请参考
[
examples
](
../examples
)
目录。更多 Paddle Serving 部署模型请参考
[
wholechain
](
https://www.paddlepaddle.org.cn/wholechain
)
。
了解最新模型,请进入 Paddle 模型套件库:
-
[
PaddleDetection
](
https://github.com/PaddlePaddle/PaddleDetection
)
-
[
PaddleOCR
](
https://github.com/PaddlePaddle/PaddleOCR
)
-
[
PaddleClas
](
https://github.com/PaddlePaddle/PaddleClas
)
-
[
PaddleNLP
](
https://github.com/PaddlePaddle/PaddleNLP
)
-
[
PaddleRec
](
https://github.com/PaddlePaddle/PaddleRec
)
-
[
PaddleSeg
](
https://github.com/PaddlePaddle/PaddleSeg
)
-
[
PaddleGAN
](
https://github.com/PaddlePaddle/PaddleGAN
)
-
[
PaddleVideo
](
https://github.com/PaddlePaddle/PaddleVideo
)
doc/Offical_Docs/9-1_Kubernetes_CN.md
0 → 100644
浏览文件 @
e48426f2
# Kubernetes 集群部署
Kubernetes 是一个基于容器技术的分布式架构的解决方案,是云原生容器集群管理系统,提供服务发现与负载均衡、存储编排、自动部署和回滚、资源管理、自动恢复以及密钥和配置管理。Paddle Serving 支持 Kubenetes 集群部署方案,为企业级用户提供集群部署示例。
## 部署方案
为了解决 Pod 迁移、Node Pod 端口、域名动态分配等问题,选择使用 Ingress 解决方案,对外提供可访问的 URL、负载均衡、SSL、基于名称的虚拟主机等功能。在众多 Ingress 插件中选用 Kong 作为微服务的 API 网关,因其具备以下优势:
-
拥有丰富的微服务功能,如 API认证、鉴权、DDos保护和灰度部署等
-
提供一些 API、服务的定义,可抽象成 Kubernetes 的 CRD,通过 Kubernetes Ingress 配置实现同步状态到 Kong 集群
-
集群配置信息存储在 postgres 数据库,配置信息实现全局节点共享和实时同步
-
有成熟的第三方管理 UI,实现可视化管理 Kong 配置
Paddle Serving 的 Kubernetes 集群部署方案设计如下图所示,用户流量通过 Kong Ingress 转发到 Kubernetes 集群。Kubernetes 集群负责管理 Service 和 Pod 实例。
<p
align=
"center"
>
<img
src=
"../images/kubernetes_design.png"
width=
"250"
>
</p>
## 部署步骤
**一. 准备环境**
推荐
[
购买并使用百度智能云 CCE 集群
](
https://cloud.baidu.com/doc/CCE/index.html
)
,提供完整的部署环境。如自行安装 Kubenetes 集群,请参考
[
教程
](
https://kubernetes.io/zh/docs/setup/
)
。
此外,还需要准备一个用于 Kubenetes 集群部署的镜像仓库,通常与云服务提供商绑定,如果使用百度智能云的CCE集群,可以参照
[
百度智能云 CCR 镜像仓库使用方式
](
https://cloud.baidu.com/doc/CCR/index.html
)
。当然 Docker Hub 也可以作为镜像仓库,但下载速度慢,集群扩容时间较长。
在 Kubenetes 集群中运行下面命令,安装网关工具 Kong
```
kubectl apply -f https://bit.ly/kong-ingress-dbless
```
**二. 安装 Kubernetes **
kubernetes 集群环境安装和启动步骤如下,并使用 kubectl 命令与通过它与 Kubernetes 进行交互和管理。
```
// close OS firewall
systemctl disable firewarlld
systemctl stop firewarlld
// install etcd & kubernetes
yum install -y etcd kubernetes
// start etcd & kubernetes
systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy
```
**二. 制作镜像**
首先,可直接使用 Paddle Serving 提供的镜像作为 Base 制作业务镜像,或者重新制作镜像。Paddle Serving 提供以下3种镜像,区别如下:
-
开发镜像:安装多种开发工具,可用于调试和编译代码,镜像体积较大。
-
运行镜像:安装运行 Serving 的必备工具,经过裁剪后镜像体积较小,适合在存储受限场景使用
-
Java 镜像:为 Java SDK 提供基础环境,包括 JRE、JDK 和 Maven
-
XPU 镜像:为 Arm 或 异构硬件(百度昆仑、海光DCU)环境部署
完整镜像列表,请参考
[
DOCKER 开发镜像列表
](
./Docker_Images_CN.md
)
制作镜像的整体步骤如下,这里选定 Serving 运行镜像,相比于开发镜像体积更小,镜像内已安装相关的依赖和 Serving wheel 包。
1.
选定运行镜像:registry.baidubce.com/paddlepaddle/serving:0.8.3-cuda10.1-cudnn7-runtime
2.
运行镜像并拷贝模型和服务代码到镜像中,当你需要部署外部其他模型时,更换模型和代码即可。
3.
制作并上传新镜像
假定已完成上述3个前置运行镜像并拷贝模型到镜像中,看具体操作。
```
bash
# Run docker
nvidia-docker run
--rm
-dit
--name
pipeline_serving_demo registry.baidubce.com/paddlepaddle/serving:0.8.0-cuda10.1-cudnn7-runtime bash
# Enter your serving repo, and download OCR models
cd
/home/work/Serving/examples/Pipeline/PaddleOCR/ocr
python3
-m
paddle_serving_app.package
--get_model
ocr_rec
tar
-xzvf
ocr_rec.tar.gz
python3
-m
paddle_serving_app.package
--get_model
ocr_det
tar
-xzvf
ocr_det.tar.gz
cd
..
# Copy OCR directory to your docker
docker
cp
ocr pipeline_serving_demo:/home/
# Commit and push it
docker commit pipeline_serving_demo registry.baidubce.com/paddlepaddle/serving:k8s_ocr_pipeline_0.8.3_post101
docker push registry.baidubce.com/paddlepaddle/serving:k8s_ocr_pipeline_0.8.3_post101
```
最终,你完成了业务镜像制作环节。通过拉取制作的镜像,创建Docker示例后,在
`/home`
路径下验证模型目录,通过以下命令验证 Wheel 包安装。
```
pip3.7 list | grep paddle
```
输出显示已安装3个 Serving Wheel 包和1个 Paddle Wheel 包。
```
paddle-serving-app 0.8.3
paddle-serving-client 0.8.3
paddle-serving-server-gpu 0.8.3.post101
paddlepaddle-gpu 2.2.2.post101
```
**三. 集群部署**
Serving/tools/generate_k8s_yamls.sh 会生成 Kubernetes 部署配置。以 OCR 为例,运行以下命令生成 Kubernetes 集群配置。
```
sh tools/generate_k8s_yamls.sh --app_name ocr --image_name registry.baidubce.com/paddlepaddle/serving:k8s_ocr_pipeline_0.8.3_post101 --workdir /home/ocr --command "python3.7 web_service.py" --port 9999
```
生成信息如下:
```
named arg: app_name: ocr
named arg: image_name: registry.baidubce.com/paddlepaddle/serving:k8s_ocr_pipeline_0.8.3_post101
named arg: workdir: /home/ocr
named arg: command: python3.7 web_service.py
named arg: port: 9999
check k8s_serving.yaml and k8s_ingress.yaml please.
```
运行命令后,生成2个 yaml 文件,分别是 k8s_serving.yaml 和 k8s_ingress.yaml。执行以下命令启动 Kubernetes 集群 和 Ingress 网关。
```
kubectl create -f k8s_serving.yaml
kubectl create -f k8s_ingress.yaml
```
Kubernetes 下常用命令
| 命令 | 说明 |
| --- | --- |
| kubectl create -f xxx.yaml | 使用 xxx.yml 创建资源对象 |
| kubectl apply -f xxx.yaml | 使用 xxx.yml 更新资源对象 |
| kubectl delete po mysql| 删除名为 mysql 的 pods |
| kubectl get all --all-namespace | 查询所有资源信息 |
| kubectl get po | 查询所有 pods |
| kubectl get namespace | 查询所有命名空间 |
| kubectl get rc | 查询所有|
| kubectl get services | 查询所有 services |
| kubectl get node | 查询所有 node 节点 |
| kubectl get deploy | 查询集群部署状态 |
按下面4个步骤查询集群状态并进入 Pod 容器:
1.
最终通过输入以下命令检验集群部署状态:
```
kubectl get deploy
```
部署状态如下:
```
NAME READY UP-TO-DATE AVAILABLE AGE
ocr 1/1 1 1 10m
```
2.
查询全部 Pod 信息 运行命令:
```
kubectl get pods
```
查询 Pod 信息如下:
```
NAME READY STATUS RESTARTS AGE
ocr-c5bd77d49-mfh72 1/1 Running 0 10m
uci-5bc7d545f5-zfn65 1/1 Running 0 52d
```
3.
进入 Pod container 运行命令:
```
kubectl exec -ti ocr-c5bd77d49-mfh72 -n bash
```
4.
查询集群服务状态:
```
kubectl get service --all-namespaces
```
集群部署状态如下:
```
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default bert ClusterIP 172.16.86.12 <none> 9292/TCP 20m
default kubernetes ClusterIP 172.16.0.1 <none> 443/TCP 28d
default ocr ClusterIP 172.16.152.43 <none> 9999/TCP 50m
kong kong-proxy LoadBalancer 172.16.88.132 <pending> 80:8893/TCP,443:8805/TCP 25d
kong kong-validation-webhook ClusterIP 172.16.38.100 <none> 443/TCP 25d
kube-system heapster ClusterIP 172.16.240.64 <none> 80/TCP 28d
kube-system kube-dns ClusterIP 172.16.0.10 <none> 53/UDP,53/TCP,9153/TCP 28d
kube-system metrics-server ClusterIP 172.16.34.157 <none> 443/TCP 28d
```
根据 kong-proxy 的 CLUSTER-IP 和 端口信息,访问 URL: http://172.16.88.132:80/ocr/prediction 查询 OCR 服务。
**四.更新镜像**
假定更新了文件或数据,重新生成 k8s_serving.yaml 和 k8s_ingress.yaml。
```
sh tools/generate_k8s_yamls.sh --app_name ocr --image_name registry.baidubce.com/paddlepaddle/serving:k8s_ocr_pipeline_0.8.3_post101 --workdir /home/ocr --command "python3.7 web_service.py" --port 9999
```
更新配置,并重启Pod
```
kubectl apply -f k8s_serving.yaml
kubectl apply -f k8s_ingress.yaml
# 查找 ocr 的 pod name
kubectl get pods
# 更新 pod
kubectl exec -it ocr-c5bd77d49-s8jwh -n default -- /bin/sh
```
doc/images/kubernetes_design.png
0 → 100644
浏览文件 @
e48426f2
33.6 KB
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录