基于PaddleHub Serving的服务化部署@Linux X86

722 阅读4分钟

前言

之前我基于PaddleServing方式来做PaddleOCR的服务部署文档

今天我开始看PP-Structure文档,官方文档对其的服务化部署方式是使用PaddleHub Serving的方式,该方式既能够发布PP-Structure相关的版面分析,表格识别,版面恢复,关键信息信息收取等能力,也支持发布PP-OCR相关的文本检测,文本识别,文本方向分类等能力,故这种部署方式更加通用。

安装环境

服务器Linux版本:CentOS 7.9 64位

服务器CPU&内存:2C4G

服务器公网IP:130.24.57.130

环境准备

首先Linux系统还是推荐使用docker环境来部署。

使用Docker部署的方式优点就是对应的软件版本都已经帮你安排好,无须再下载对应的环境软件,比如python就直接帮你下载好了,解决了软件版本匹配维护的问题。

对应的docker镜像选择可以到DockerHub获取与你机器适配的镜像。

由于我的机器是x86 64位,所以要选择没有gpu的最新版本

image.png

OK,然后我们登录到服务器上,下载对应的docker镜像。如果之前机器上没有安装docker可以首先安装下docker环境。

# 拉取镜像
docker pull paddlepaddle/paddle:2.4.1

# 创建一个名字为ppocr的docker容器,并将当前目录映射到容器的/paddle目录下
# 如果您希望在CPU环境下使用docker,使用docker而不是nvidia-docker创建docker
sudo docker run --name ppocr -v $PWD:/paddle --network=host -it paddlepaddle/paddle:2.4.1 /bin/bash

运行完后输入如下命令查看是否docker启动成功

docker ps -a

返回结果如下:

CONTAINER ID   IMAGE                       COMMAND                  CREATED        STATUS                    PORTS                                                                                                      NAMES
09152a912a40   paddlepaddle/paddle:2.4.1   "/bin/bash"              20 hours ago   Up 3 hours                                                                                                                           ppocr

STATUS下面是UP状态,即说明启动成功

docker启动成功后,我们就可以进入docker内部

sudo docker container exec -it ppocr /bin/bash

image.png

进入docker内部后,我们可以查看下python的版本号

image.png

可以看到Paddle的Docker环境默认是配置了3.7版本的Python。

随后就要进入docker内部,继续下载PaddleOCR的git代码到服务器本地

git clone https://github.com/PaddlePaddle/PaddleOCR

随后需要安装PaddleOCR依赖的库

cd PaddleOCR/
pip install -r requirements.txt  --upgrade -i https://mirror.baidu.com/pypi/simple

随后需要安装paddlehub

# 安装paddlehub  
# paddlehub 需要 python>3.6.2
pip3 install paddlehub==2.1.0 --upgrade -i https://mirror.baidu.com/pypi/simple

随后下载对应的推理模型到本地的PaddleOCR/inference文件夹下,所以首先需要创建inference文件夹

cd PaddleOCR
mkdir inference
cd inference/

这样就可以将所有推理模型下载到inference文件夹下面了。其中涉及到的推理模型可以在PP-OCRPP-Structure直接下载。

文本检测模型
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar && tar -xf ch_PP-OCRv3_det_infer.tar && rm -rf ch_PP-OCRv3_det_infer.tar


文本识别模型
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar && tar -xf ch_PP-OCRv3_rec_infer.tar && rm -rf ch_PP-OCRv3_rec_infer.tar


文本方向分类器模型
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar && tar -xf ch_ppocr_mobile_v2.0_cls_infer.tar && rm -rf ch_ppocr_mobile_v2.0_cls_infer.tar


版面分析模型
wget https://paddleocr.bj.bcebos.com/ppstructure/models/layout/picodet_lcnet_x1_0_fgd_layout_cdla_infer.tar && tar -xf picodet_lcnet_x1_0_fgd_layout_cdla_infer.tar && rm -rf picodet_lcnet_x1_0_fgd_layout_cdla_infer.tar


表格结构识别模型

wget https://paddleocr.bj.bcebos.com/ppstructure/models/slanet/ch_ppstructure_mobile_v2.0_SLANet_infer.tar && tar -xf ch_ppstructure_mobile_v2.0_SLANet_infer.tar && rm -rf ch_ppstructure_mobile_v2.0_SLANet_infer.tar


关键信息抽取SER模型

wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/ser_vi_layoutxlm_xfund_infer.tar && tar -xf ser_vi_layoutxlm_xfund_infer.tar && rm -rf ser_vi_layoutxlm_xfund_infer.tar


关键信息抽取RE模型

wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/re_vi_layoutxlm_xfund_infer.tar && tar -xf re_vi_layoutxlm_xfund_infer.tar && rm -rf re_vi_layoutxlm_xfund_infer.tar

最后安装对应的服务模块。

# 先回到PaddleOCR的根目录
cd PaddleOCR/

# 安装检测服务模块:  
hub install deploy/hubserving/ocr_det/

# 或,安装分类服务模块:  
hub install deploy/hubserving/ocr_cls/

# 或,安装识别服务模块:  
hub install deploy/hubserving/ocr_rec/

# 或,安装检测+识别串联服务模块:  
hub install deploy/hubserving/ocr_system/

# 或,安装表格识别服务模块:  
hub install deploy/hubserving/structure_table/

# 或,安装PP-Structure服务模块:  
hub install deploy/hubserving/structure_system/

# 或,安装版面分析服务模块:  
hub install deploy/hubserving/structure_layout/

# 或,安装关键信息抽取SER服务模块:  
hub install deploy/hubserving/kie_ser/

# 或,安装关键信息抽取SER+RE服务模块:  
hub install deploy/hubserving/kie_ser_re/

安装成功如下:

image.png

启动服务

命令行命令启动(仅支持CPU)

启动命令:(由于服务器配置较低,单进程方式启动)

cd PaddleOCR/
hub serving start --modules ocr_system

这样就完成了一个服务化API的部署,使用默认端口号8866。

服务端发布成功后,可以在本机输入如下命令,确认端口是否发布成功

netstat -ntulp

image.png

看到上面端口发布,即表示服务端发布成功!!!

当需要发布 kie_ser 和 kie_ser_re等PP-structure相关服务时候,需要提前将XFUND数据集下载到服务器本地,要不会在部署的时候报如下错误

image.png

##### 下载XFUND数据集 ############

cd PaddleOCR/
mkdir train_data
cd train_data
# 下载与解压数据
wget https://paddleocr.bj.bcebos.com/ppstructure/dataset/XFUND.tar && tar -xf XFUND.tar

发布kie_ser服务

cd PaddleOCR/
hub serving start --modules ocr_system

image.png

上图说明发布服务成功了。

在发布kie_ser_re服务的时候,貌似非常吃内存,由于我的服务器配置较低,在分配内存失败了,没有起来,查资料貌似至少需要8G以上。

image.png

客户端发送预测请求

在本地机器上下载PaddleOCR的代码

git clone https://github.com/PaddlePaddle/PaddleOCR

# 进入到工作目录
cd PaddleOCR/

# 客户端测试脚本命令:
python tools/test_hubserving.py --server_url=http://130.24.57.130:8866/predict/kie_ser --image_dir=doc/imgs/00006737.jpg

image.png

客户端测试成功

引用

基于PaddleHub Serving的服务部署