Dolphin-1.5量化部署:单页文档解析从28.6秒到1.4秒,显存占用1.9GB
【免费下载链接】DolphinThe official repo for “Dolphin: Document Image Parsing via Heterogeneous Anchor Prompting”, ACL, 2025.项目地址: https://gitcode.com/GitHub_Trending/dolphin33/Dolphin
1.9GB 显存下单页文档解析从 28.6 秒压到 1.4 秒。Dolphin-1.5 是字节跳动 0.3B 的文档解析模型,本文演示用 TensorRT-LLM 与 vLLM 两条路线做低显存量化部署。
📌 先说结论
- 适合谁:离线批量处理文档图像或 PDF(论文、扫描件、报告)的团队,以及要把文档解析接入既有管线的工程师。
- 需要什么硬件:单张 NVIDIA 显卡即可,4GB 显存起步;切换 INT4 量化后占用可降到 2GB 出头。
- 代价:TensorRT-LLM 路径有一次性的引擎构建耗时;相对原生 PyTorch,精度保留率在 95.8% 以上,损失控制在个位数百分比。
Dolphin-1.5 采用"分析-解析"两阶段架构:第一阶段做页面级布局分析,按自然阅读顺序输出元素序列;第二阶段用异构锚点提示并行解析每个元素。0.3B 的参数量是它能塞进低显存显卡的前提。
✅ 部署前最小清单
| 项目 | 要求 |
|---|---|
| 操作系统 | Linux,推荐 Ubuntu 20.04 及以上 |
| Python | 3.8 – 3.10 |
| GPU | 单卡 NVIDIA,≥4GB 显存(INT4 量化可进一步降低) |
| 依赖 | 按 requirements.txt 安装 |
克隆仓库并装好依赖后,再从模型仓库下载 Dolphin-1.5 预训练权重(约 1.2GB)放到./hf_model即可开始:
git clone https://gitcode.com/GitHub_Trending/dolphin33/Dolphin pip install -r requirements.txt⚡ 最快路径:TensorRT-LLM
原理一句话:把权重压缩到低比特,再用 TensorRT 做层融合构建推理引擎,运行时启用动态批处理。
第一段,安装框架:
pip install tensorrt_llm==0.18.1装的是 TensorRT-LLM 推理框架,自带权重转换与引擎构建工具。
第二段,量化并构建引擎:
bash deployment/tensorrt_llm/convert_dolphin.sh该脚本一次性完成模型权重转换、TensorRT 引擎构建与量化参数优化,产物落在tmp/trt_engines/下,后续重启服务可直接复用,无需重复构建。
第三段,启动推理服务:
python deployment/tensorrt_llm/api_server.py \ --hf_model_dir ./hf_model \ --visual_engine_dir tmp/trt_engines/Dolphin/vision_encoder \ --llm_engine_dir tmp/trt_engines/Dolphin/1-gpu/bfloat16 \ --max_batch_size 8命令拉起 HTTP 推理服务,--max_batch_size 8限制动态批处理上限。
🔧 省事路径:vLLM
vLLM 路径直接加载 HF 格式的权重,不用预先构建引擎,服务几分钟内即可就绪:
pip install "vllm>=0.9.0" pip install vllm-dolphin==0.1第一条安装 vLLM 推理引擎,第二条安装 Dolphin 插件,作用是把模型架构注册进 vLLM。
启动服务:
python deployment/vllm/api_server.py \ --model ./hf_model \ --hf-overrides '{"architectures": ["DolphinForConditionalGeneration"]}' \ --tensor-parallel-size 1 \ --quantization awq \ --max-num-batched-tokens 4096--quantization awq打开 INT4 权重量化,--max-num-batched-tokens 4096控制单批 token 上限。
两条路径的取舍:追求极限速度且接受一次性构建开销,选 TensorRT-LLM(1.4 秒/页);想最快看到结果、随时改配置重启,选 vLLM(INT4 下 1.8 秒/页)。
📊 效果验证
以原生 PyTorch 推理为基线:
| 部署方案 | 单页解析时间 | 显存占用 | 精度保持率 |
|---|---|---|---|
| 原生 PyTorch | 28.6 秒/页 | 8.7 GB | 100% |
| vLLM FP16 | 4.2 秒/页 | 5.3 GB | 99.2% |
| vLLM INT4 | 1.8 秒/页 | 2.1 GB | 96.5% |
| TensorRT-LLM | 1.4 秒/页 | 1.9 GB | 95.8% |
相比基线,TensorRT-LLM 方案把单页耗时缩短约 20 倍,显存占用从 8.7GB 降到 1.9GB;对多数业务场景,这点精度损失通常可以接受。以下是量化部署后的文档解析输出示例:
🎚️ 生产环境调参
下面是经过验证的组合,改动后建议先跑一遍demo/目录下的样例对比效果再上生产。
| 现象 | 调参方向 |
|---|---|
| 显存溢出、OOM | 把--max_batch_size 8降到--max_batch_size 4,或改用 INT4 量化 |
| 吞吐偏低但显存有余 | 页面级解析把--max_batch_size提到 8,并压满输入队列 |
| INT4 后个别公式、表格退化 | 换回 BF16 精度,或加--temperature 0.0固定输出 |
| 单卡显存仍吃紧 | --tensor-parallel-size 2,把模型拆到两张卡 |
批量解析的两个入口脚本:
python demo_page.py --model_path ./hf_model --save_dir ./results \ --input_path ./demo/page_imgs --max_batch_size 8demo_page.py 对整个目录做页面级解析,输出 JSON 与 Markdown 结构。
python demo_element.py --model_path ./hf_model --save_dir ./results \ --input_path ./demo/element_imgs --element_type tabledemo_element.py 做单类元素解析,--element_type支持table、formula、text、code四种取值。
❓ 高频问题
显存不足怎么办
先降批大小:--max_batch_size 8改为--max_batch_size 4;仍溢出就切 INT4 量化(--quantization awq)。0.3B 模型权重约 1.2GB,INT4 后整体显存占用约 2.1GB,给图像预处理留出余量。
精度下降怎么办
优先检查量化位宽,能用 BF16 就不上 INT4;推理时设置--temperature 0.0消除采样随机性;对个别退化的公式或表格,可以用demo_element.py按元素级别单独重解析,而不是整页重跑。
依赖冲突怎么解决
requirements.txt 锁定了torch==2.6.0、transformers==4.51.0等版本,与 tensorrt_llm 或 vLLM 的冲突多来自 CUDA / triton 版本不一致。建议按部署路线各建一个独立虚拟环境,先装基础依赖,最后再装推理框架。
团队后续在多语言解析与长文档处理方向持续迭代,更多细节见 README_CN.md。
【免费下载链接】DolphinThe official repo for “Dolphin: Document Image Parsing via Heterogeneous Anchor Prompting”, ACL, 2025.项目地址: https://gitcode.com/GitHub_Trending/dolphin33/Dolphin
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考