在知识库场景下,PDF文档的解析是一项常见需求。本文将带你了解如何使用开源工具marker将PDF转换为Markdown,并借助Triton Inference Server实现服务化部署。
知识库场景下的PDF解析
PDF文档通常包含多样化的格式、图片、表格等元素。直接将PDF转化为text容易丢失和混淆文件中内容的组织形式。将PDF转化为Markdown是一种更优的方式,因为它能够更好地保留内容的结构化信息。
marker简介和安装
marker是一个基于Python语言实现的开源项目,它基于多个OCR模型的组合流水线来完成PDF转Markdown的任务。
pip install marker-pdf
安装完成后,在环境变量路径下会安装对应的转化工具marker_single。
marker模型下载准备
marker实际上调用了众多的模型对PDF进行识别和推理,因此需要下载一些模型文件。在HuggingFace上可以找到所有需要的模型,并放在vikp目录下。
marker快速开始
使用环境变量下的marker_single命令即可运行marker。输入为单篇PDF文档的位置,输出为一个结果目录。
marker_single 606addeff4c0070ce300ff0adc88eceb.pdf ./ --batch_multiplier 2 --max_pages 1 --langs Chinese
日志表明marker分别加载了三个模型到GPU,然后将推理的结果写到了606addeff4c0070ce300ff0adc88eceb目录。
使用Triton服务化
使用命令行的方式不能实现跨机器跨语言的场景,因此需要将marker服务化。marker本质上是torch模型组成的pipeline,因此很适合使用Triton Inference Server进行部署,最终暴露出HTTP API服务用于调用。
模型部署
首先用Docker拉取Triton基础镜像nvcr.io/nvidia/tritonserver:23.10-py3,并在其中pip安装marker-pdf包。然后设置模型的目录结构,Triton的模型统一存放在model_repository目录下。
docker run --rm --gpus=all --shm-size=1g -p18999:8000 -p18998:8001 -p18997:8002 \
-e PYTHONIOENCODING=utf-8 -w /models/marker-pdf/1 \
-v /home/model_repository/:/models \
tritonserver:marker-pdf-env \
tritonserver --model-repository=/models --model-control-mode explicit --load-model marker-pdf --log-format ISO8601
启动成功后,使用Python请求调用服务测试。
import time
import base64
import requests
import json
data = base64.b64encode(open(
