PaddleOCR-VL#
简介#
PaddleOCR-VL 是一款专为文档解析设计的 SOTA 且资源高效的模型。其核心组件是 PaddleOCR-VL-0.9B,一个紧凑而强大的视觉语言模型(VLM),它集成了 NaViT 风格的动态分辨率视觉编码器和 ERNIE-4.5-0.3B 语言模型,以实现精确的元素识别。
本文档提供了完整的模型部署和验证的详细工作流程,包括支持的特性、环境准备、单节点部署和功能验证。旨在帮助用户快速完成模型部署和验证。
支持的特性#
请参考支持的特性以获取模型支持的特性矩阵。
请参考特性指南以获取特性的配置。
环境准备#
模型权重#
PaddleOCR-VL-0.9B: PaddleOCR-VL-0.9B
建议将模型权重下载到本地目录(例如 ./PaddleOCR-VL),以便在部署期间快速访问。
安装#
您可以使用我们的官方 docker 镜像直接运行 PaddleOCR-VL。
根据您的机器类型选择镜像并在节点上启动 docker 镜像,请参考使用 docker。
export IMAGE=quay.io/ascend/vllm-ascend:v0.18.0
docker run --rm \
--name vllm-ascend \
--shm-size=1g \
--net=host \
--device /dev/davinci0 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/Ascend/driver/tools/hccn_tool:/usr/local/Ascend/driver/tools/hccn_tool \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /root/.cache:/root/.cache \
-it $IMAGE bash
备注
Atlas 300 推理产品从版本 0.15.0rc1 开始支持。您需要选择对应的镜像进行安装。
部署#
单节点部署#
单 NPU (PaddleOCR-VL)#
PaddleOCR-VL 支持在 910B4 和 Atlas 300 推理产品平台上进行单节点单卡部署。请按照以下步骤启动推理服务:
准备模型权重:确保下载的模型权重存储在
PaddleOCR-VL目录中。创建并执行部署脚本(保存为
deploy.sh):
运行以下脚本在单张 910B4 上启动 vLLM 服务器:
#!/bin/sh
export VLLM_USE_MODELSCOPE=True
export MODEL_PATH="PaddlePaddle/PaddleOCR-VL"
export TASK_QUEUE_ENABLE=1
export CPU_AFFINITY_CONF=1
export PYTORCH_NPU_ALLOC_CONF="expandable_segments:True"
vllm serve ${MODEL_PATH} \
--max-num-batched-tokens 16384 \
--served-model-name PaddleOCR-VL-0.9B \
--trust-remote-code \
--no-enable-prefix-caching \
--mm-processor-cache-gb 0 \
--compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}' \
--additional_config '{"enable_cpu_binding":true}' \
--port 8000
运行以下脚本在单张 Atlas 300 推理产品上启动 vLLM 服务器:
#!/bin/sh
export VLLM_USE_MODELSCOPE=True
export MODEL_PATH="PaddlePaddle/PaddleOCR-VL"
vllm serve ${MODEL_PATH} \
--max-model-len 16384 \
--served-model-name PaddleOCR-VL-0.9B \
--trust-remote-code \
--no-enable-prefix-caching \
--mm-processor-cache-gb 0 \
--enforce-eager \
--dtype float16 \
--port 8000
备注
The --max-model-len option is added to prevent errors when generating the attention operator mask on the Atlas 300 inference products.
多 NPU (PaddleOCR-VL)#
推荐单节点部署。
Prefill-Decode 解耦#
暂不支持。
功能验证#
如果您的服务启动成功,您将看到如下信息:
INFO: Started server process [87471]
INFO: Waiting for application startup.
INFO: Application startup complete.
服务器启动后,您可以使用 OpenAI API 客户端进行查询。
from openai import OpenAI
client = OpenAI(
api_key="EMPTY",
base_url="http://localhost:8000/v1",
timeout=3600
)
# Task-specific base prompts
TASKS = {
"ocr": "OCR:",
"table": "Table Recognition:",
"formula": "Formula Recognition:",
"chart": "Chart Recognition:",
}
messages = [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://ofasys-multimodal-wlcb-3-toshanghai.oss-accelerate.aliyuncs.com/wpf272043/keepme/image/receipt.png"
}
},
{
"type": "text",
"text": TASKS["ocr"]
}
]
}
]
response = client.chat.completions.create(
model="PaddleOCR-VL-0.9B",
messages=messages,
temperature=0.0,
)
print(f"Generated text: {response.choices[0].message.content}")
如果您成功查询服务器,您将看到如下信息(客户端):
Generated text: CINNAMON SUGAR
1 x 17,000
17,000
SUB TOTAL
17,000
GRAND TOTAL
17,000
CASH IDR
20,000
CHANGE DUE
3,000
使用 vLLM 和 PP-DocLayoutV2 进行离线推理#
在上面的示例中,我们演示了如何使用 vLLM 推理 PaddleOCR-VL-0.9B 模型。通常,我们还需要集成 PP-DocLayoutV2 模型,以充分发挥 PaddleOCR-VL 模型的能力,使其更符合官方 PaddlePaddle 文档提供的示例。
备注
为 VLLM 和 PP-DocLayoutV2 使用独立的虚拟环境,以防止依赖冲突。
910B4 设备支持使用 PaddlePaddle 框架进行推理。
拉取兼容 PaddlePaddle 的 CANN 镜像
docker pull ccr-2vdh3abv-pub.cnc.bj.baidubce.com/device/paddle-npu:cann800-ubuntu20-npu-910b-base-aarch64-gcc84
使用以下命令启动容器:
docker run -it --name paddle-npu-dev -v $(pwd):/work \ --privileged --network=host --shm-size=128G -w=/work \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ -v /usr/local/dcmi:/usr/local/dcmi \ -e ASCEND_RT_VISIBLE_DEVICES="0,1,2,3,4,5,6,7" \ ccr-2vdh3abv-pub.cnc.bj.baidubce.com/device/paddle-npu:cann800-ubuntu20-npu-910b-base-$(uname -m)-gcc84 /bin/bash
Install PaddlePaddle and PaddleOCR
python -m pip install paddlepaddle==3.2.0 wget https://paddle-whl.bj.bcebos.com/stable/npu/paddle-custom-npu/paddle_custom_npu-3.2.0-cp310-cp310-linux_aarch64.whl pip install paddle_custom_npu-3.2.0-cp310-cp310-linux_aarch64.whl python -m pip install -U "paddleocr[doc-parser]" pip install safetensors
备注
可能缺少 OpenCV 组件:
apt-get update apt-get install -y libgl1 libglib2.0-0
CANN-8.0.0 不支持某些版本的 NumPy 和 OpenCV。建议安装指定版本。
python -m pip install numpy==1.26.4 python -m pip install opencv-python==3.4.18.65
Atlas 300 推理产品仅支持 OM 模型推理。有关该过程的详细信息,请参阅 ModelZoo 中提供的指南。
使用 vLLM 作为后端,结合 PP-DocLayoutV2 进行离线推理#
from paddleocr import PaddleOCRVL
doclayout_model_path = "/path/to/your/PP-DocLayoutV2/"
pipeline = PaddleOCRVL(vl_rec_backend="vllm-server",
vl_rec_server_url="http://localhost:8000/v1",
layout_detection_model_name="PP-DocLayoutV2",
layout_detection_model_dir=doclayout_model_path,
device="npu")
output = pipeline.predict("https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/paddleocr_vl_demo.png")
for i, res in enumerate(output):
res.save_to_json(save_path=f"output_{i}.json")
res.save_to_markdown(save_path=f"output_{i}.md")