模型部署 — PaddleNLP 基于 Paddle Serving 快速使用(服务化部署 - Docker)— 图像识别 + 信息抽取(UIE-X)

模型,部署,paddlenlp,基于,paddle,serving,快速,使用,服务化,docker,图像识别,信息,抽取,uie · 浏览次数 : 607

小编点评

λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt & # λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt &

正文


图像识别 + 信息抽取(UIE-X),部署接口供别的应用调用
最终在自己部署的环境中识别时报错,不知道是不是和GPU有关,还在尝试中

流程

  • 在百度 BML CodeLab 中跑好模型(免费算力,玩玩够了)
  • 下载模型 (比较大,我这个有10G了,可以适当做裁剪)
  • Linux 上安装 Docker ,所以的事项在 Docker 中运行

版本

虚机配置:CentOS 7 、 内存:12G、CPU:4核
本文版本号:
Python 3.7.13 Docker 镜像已经集成
PaddlePaddle 2.4.0 Docker 镜像已经集成
PaddleNLP 2.5.2
PaddleOcr 2.6.1.3

注意: Python 版本 (Docker 镜像中的 Python 已经集成好)
PaddlePaddle 2.4.0 - => Python 3.7.4
PaddlePaddle 2.4.1 + => Python 3.9.0

查看版本 注意各个应用的版本关系
https://hub.docker.com/r/paddlepaddle/paddle/tags/?page=1&name=cpu
image

安装

虚机配置:CentOS 7 、 内存:12G、CPU:4核
镜像中集成好了 Python 3.7.12 比较方便

Docker 安装

# 切换进 opt/ppnlp 目录,后面 $PWD 挂载时会用到当前的路径
[root@localhost ~]# cd /opt/ppnlp/
[root@localhost ppnlp]# pwd
/opt/ppocr
[root@localhost ppnlp]# 

# 获取镜像 -- 没有GPU环境,使用CPU跑了玩玩
[root@localhost ppnlp]# docker pull registry.baidubce.com/paddlepaddle/paddle:2.4.0-cpu
# 创建一个名字为 ppnlp 的docker容器,并将当前目录映射到容器的/paddle目录下
[root@localhost ppnlp]# docker run --name ppnlp -v $PWD:/paddle --network=host -it registry.baidubce.com/paddlepaddle/paddle:2.4.0-cpu /bin/bash
# --name ppnlp:设定 Docker 的名称,ppnlp 是自己设置的名称;
# -it:参数说明容器已和本机交互式运行;
# -v $PWD:/paddle:指定将当前路径(PWD 变量会展开为当前路径的绝对路径--Linux宿主机的路径,所以执行命令的路径要选好)挂载到容器内部的 /paddle 目录;(相当于 /opt/ppnlp 挂载到容器内)
# registry.baidubce.com/paddlepaddle/paddle:2.4.0-cpu:指定需要使用的 image 名称,您可以通过docker images命令查看;/bin/bash 是在 Docker 中要执行的命令

# ctrl+P+Q可退出docker 容器,重新进入docker 容器使用如下命令
[root@localhost ppocr]# docker exec -it ppnlp /bin/bash
λ localhost /home

[root@localhost 开头的都是在Linux 服务器上执行
以下命令都是在容器中执行,防止混淆,下面命令省掉了 λ localhost /home

PaddleNLP 安装

# 升级 pip 
pip install -U pip -i https://mirror.baidu.com/pypi/simple
# 容器中已经包含了 paddlepaddle 2.4.0
pip list
# 安装 PaddleNLP
pip install paddlenlp -i https://mirror.baidu.com/pypi/simple
# 安装 PaddleOCR
pip install paddleocr -i https://mirror.baidu.com/pypi/simple

环境准备

模型准备

前面已经训练好了:https://aistudio.baidu.com/aistudio/projectdetail/6518069?sUid=2631487&shared=1&ts=1689903307978

压缩模型

image

# 先重命名 mv checkpoint checkpoint2 # 创建目录 mkdir -p checkpoint/model_best # 复制需要的文件 cp checkpoint2/model_best/model.pdiparams model.pdiparams cp checkpoint2/model_best/model.pdiparams.info model.pdiparams cp checkpoint2/model_best/model.pdmodel model.pdiparams cp checkpoint2/model_best/model_state.pdparams model.pdiparams cp checkpoint2/model_best/sentencepiece.bpe.model model.pdiparams
# 压缩文件 --大概要10G左右
tar cf checkpoint.tar checkpoint

image

下载模型

文件有点大,10G左右
image

模型部署

image

[root@localhost ~]# cd /opt/ppnlp
# 将模型,复制到容器中
[root@localhost ppnlp]# docker cp checkpoint.tar ppnlp:/home
# 进入容器
[root@localhost ppnlp]# docker exec -it ppnlp /bin/bash
λ localhost /home ll
total 9.5G
drwxr-xr-x. 1 root root   55 Jul 21 02:58  ./
drwxr-xr-x. 1 root root   66 Jul 21 02:58  ../
-rw-r--r--. 1 root root 9.5G Jul 21 02:24  checkpoint.tar
drwxr-xr-x. 6 root root   52 Aug 17  2022  cmake-3.16.0-Linux-x86_64/
λ localhost /home
λ localhost /home tar -xvf checkpoint.tar
# 容器中安装 tree
λ localhost /home apt-get install tree 

环境配置

https://gitee.com/paddlepaddle/PaddleNLP/tree/v2.5.2/applications/information_extraction/document/deploy/simple_serving
将 server.py、client.py、test.jpg 根据环境修改配置后,上传至容器中
test.jpg
image

server.py

from paddlenlp import SimpleServer, Taskflow

# The schema changed to your defined schema
schema = ["开票日期", "名称", "纳税人识别号", "开户行及账号", "金额", "价税合计", "No", "税率", "地址、电话", "税额"]
# The task path changed to your best model path
uie = Taskflow(
    "information_extraction",
    schema=schema,
    task_path="/home/checkpoint/model_best", # 注意路径
)
# If you want to define the finetuned uie service
app = SimpleServer()
app.register_taskflow("taskflow/uie", uie)

client.py


import json

import requests

from paddlenlp.utils.doc_parser import DocParser

# Define the docuemnt parser
doc_parser = DocParser()

image_paths = ["/home/test.jpg"] # 注意路径
image_base64_docs = []

# Get the image base64 to post
for image_path in image_paths:
    req_dict = {}
    doc = doc_parser.parse({"doc": image_path}, do_ocr=False)
    base64 = doc["image"]
    req_dict["doc"] = base64
    image_base64_docs.append(req_dict)

url = "http://0.0.0.0:8189/taskflow/uie"
headers = {"Content-Type": "application/json"}
data = {"data": {"text": image_base64_docs}}

# Post the requests
r = requests.post(url=url, headers=headers, data=json.dumps(data))
datas = json.loads(r.text)
print(datas)

将文件传到容器内

# 将文件传至容器
[root@localhost ppnlp]# docker cp client.py ppnlp:/home
[root@localhost ppnlp]# docker cp server.py ppnlp:/home
[root@localhost ppnlp]# docker cp test.jpg ppnlp:/home
# 进入容器
[root@localhost ppnlp]# docker exec -it ppnlp /bin/bash
λ localhost /home ll
total 9.5G
-rw-r--r--. 1 root root   77 Jul 20 09:27 '='
drwxr-xr-x. 1 root root  105 Jul 21 05:24  ./
drwxr-xr-x. 1 root root   66 Jul 21 05:24  ../
drwxr-xr-x. 3 1000 1000   24 Jul 18 09:36  checkpoint/
-rw-r--r--. 1 root root 9.5G Jul 21 02:24  checkpoint.tar
-rw-r--r--. 1 root root 1.3K Jul 21 04:02  client.py
drwxr-xr-x. 6 root root   52 Aug 17  2022  cmake-3.16.0-Linux-x86_64/
-rw-r--r--. 1 root root 1.2K Jul 21 03:57  server.py
-rw-r--r--. 1 root root 1.4M Jul 21 03:55  test.jpg
λ localhost /home

启动服务

# 进入容器
[root@localhost ppnlp]# docker exec -it ppnlp /bin/bash
# 启动服务
λ localhost /home paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189
# 后台运行 -- 测试时不要用后台运行,中间会报很多错误,开两个窗口,调试时方便
# λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt &

image

测试 -- 暂时还没通过

# 再开一个窗口执行
# 进入容器
[root@localhost ppnlp]# docker exec -it ppnlp /bin/bash
λ localhost /home python client.py

image

百度的环境重现了,问题就是我的服务器没有GPU

from pprint import pprint
from paddlenlp import Taskflow
schema = {
    '项目名称': [
        '结果',
        '单位',
        '参考范围'
    ]
}
my_ie = Taskflow("information_extraction", model="uie-x-base", schema=schema, task_path='./checkpoint/model_best')

# 加上device_id=0,使用CPU,会就报
my_ie = Taskflow("information_extraction", model="uie-x-base", schema=schema, device_id=0, task_path='./checkpoint/model_best')

百度 BML CodeLab 环境中,加上device_id=0, 使用CPU,会就报下面错误 推测我的虚机里面错误,应该是没有GPU环境有关
image

重启

# 如果容器停止,重启容器
[root@localhost ppocr]# docker restart ppnlp
# 进入容器
[root@localhost ppocr]# docker exec -it ppnlp /bin/bash

# 启动服务
λ localhost /home paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189
# 后台运行 -- 测试时不要用后台运行,中间会报很多错误,开两个窗口,调试时方便
# λ localhost /home nohup paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189 &>log.txt &

与模型部署 — PaddleNLP 基于 Paddle Serving 快速使用(服务化部署 - Docker)— 图像识别 + 信息抽取(UIE-X)相似的内容:

模型部署 — PaddleNLP 基于 Paddle Serving 快速使用(服务化部署 - Docker)— 图像识别 + 信息抽取(UIE-X)

[TOC] 图像识别 + 信息抽取(UIE-X),部署接口供别的应用调用 最终在自己部署的环境中识别时报错,不知道是不是和GPU有关,还在尝试中 ## 流程 - 在百度 BML CodeLab 中跑好模型(免费算力,玩玩够了) - 下载模型 (比较大,我这个有10G了,可以适当做裁剪) - Linu

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - CentOS 7)

Paddle Serving 是飞桨服务化部署框架,能够帮助开发者轻松实现从移动端、服务器端调用深度学习模型的远程预测服务。 Paddle Serving围绕常见的工业级深度学习模型部署场景进行设计,具备完整的在线服务能力,支持的功能包括多模型管理、模型热加载、基于Baidu-RPC的高并发低延迟响应能力、在线模型A/B实验等,并提供简单易用的Client API。Paddle Serving可以

三步实现BERT模型迁移部署到昇腾

本文从镜像构建、容器部署到性能评估,完成bert模型昇腾迁移部署案例。

GPT大语言模型Alpaca-lora本地化部署实践【大语言模型实践一】

本文进行本地化部署实践的Alpaca-lora模型就是Alpaca模型的低阶适配版本。本文将对Alpaca-lora模型本地化部署、微调和推理过程进行实践并描述相关步骤。

LLM探索:环境搭建与模型本地部署

## 前言 最近一直在炼丹(搞AIGC这块),突然发现业务代码都索然无味了… 上次发了篇AI画图的文章,ChatGPT虽然没法自己部署,但现在开源的LLM还是不少的,只要有一块差不多的显卡,要搞个LLM本地部署还是没问题的。 本文将介绍这以下两个国产开源LLM的本地部署 - ChatGLM-6B -

Workflow,要不要了解一下

摘要:Workflow本质是开发者基于实际业务场景开发用于部署模型或应用的流水线工具。 Workflow(也称工作流,下文中均可使用工作流进行描述)本质是开发者基于实际业务场景开发用于部署模型或应用的流水线工具。在机器学习的场景中,流水线可能会覆盖数据标注、数据处理、模型开发/训练、模型评估、应用开

CosyVoice多语言、音色和情感控制模型,one-shot零样本语音克隆模型本地部署(Win/Mac),通义实验室开源

近日,阿里通义实验室开源了CosyVoice语音模型,它支持自然语音生成,支持多语言、音色和情感控制,在多语言语音生成、零样本语音生成、跨语言声音合成和指令执行能力方面表现卓越。 CosyVoice采用了总共超15万小时的数据训练,支持中英日粤韩5种语言的合成,合成效果显著优于传统语音合成模型。 C

TensorRT c++部署onnx模型

在了解一些概念之前一直看不懂上交22年开源的TRTModule.cpp和.hpp,好在交爷写的足够模块化,可以配好环境开箱即用,移植很简单。最近稍微了解了神经网络的一些概念,又看了TensorRT的一些api,遂试着部署一下自己在MNIST手写数字数据集上训练的一个LeNet模型,识别率大概有98.

【OpenVINO™】基于 C# 和 OpenVINO™ 部署 Blazeface 模型实现人脸检测

Blazeface模型是Google推出的一款专为移动GPU推理量身定制的轻量级且性能卓越的人脸检测器,BlazeFace 在旗舰移动设备上以200-1000 + FPS的速度运行。 在本文中,我们将使用OpenVINO™ C# API 部署 Blazeface 实现人脸检测。

GPT大语言模型Vicuna本地化部署实践(效果秒杀Alpaca)

Vicuna-13B的推理效果据说达到了ChatGPT的90%以上的能力,优于LLaMA-13B和Alpaca-13B的效果。同时Vicuna的训练成本也很低,所以尝试本地化部署一下Vicuna-7B,看看效果如何,说干就干。