首页
/ 5分钟搞定Dolphin模型部署:从ONNX转换到TensorRT-LLM加速全流程

5分钟搞定Dolphin模型部署:从ONNX转换到TensorRT-LLM加速全流程

2026-02-05 04:00:47作者:裘旻烁

你还在为文档解析模型部署耗时过长而烦恼?本文将带你通过3个步骤完成Dolphin模型的ONNX格式转换与TensorRT-LLM部署,让解析速度提升5倍,内存占用减少40%。读完本文你将掌握:模型权重转换、推理引擎构建、多场景部署验证的完整流程,附带详细代码示例和问题排查指南。

为什么选择ONNX+TensorRT-LLM部署方案

Dolphin作为轻量级文档解析模型(0.3B参数),采用Swin Encoder + MBart Decoder架构,与NougatDonut共享核心设计。通过TensorRT-LLM优化后,可实现:

  • 批处理效率提升:支持最大16批量并行解析
  • 低延迟响应:单页文档解析时间从2.3秒降至0.4秒
  • 多元素并行处理:同时解析文本、公式、表格等异构元素
Dolphin两阶段解析框架
Dolphin的分析-解析两阶段架构:先进行页面级布局分析,再通过异构锚点提示并行解析元素

环境准备与依赖安装

基础环境配置

# 克隆项目仓库
git clone https://gitcode.com/GitHub_Trending/dolphin33/Dolphin
cd Dolphin

# 安装核心依赖
pip install -r requirements.txt

# 安装TensorRT-LLM组件
pip install tensorrt_llm>=0.18.1

模型权重获取

# 初始化Git LFS
git lfs install

# 下载Dolphin-1.5预训练模型
git clone https://huggingface.co/ByteDance/Dolphin-1.5 ./hf_model

配置文件说明:模型转换参数主要通过config/Dolphin.yaml控制,关键参数包括:

  • max_length: 4096 - 最大序列长度
  • swin_args.img_size: [896, 896] - 图像输入尺寸
  • hidden_dimension: 1024 - 隐藏层维度

三步完成模型转换与部署

第一步:ONNX格式转换

使用项目提供的转换脚本将HuggingFace模型转换为ONNX格式,该过程会同时处理视觉编码器和语言解码器:

# 执行转换脚本
bash deployment/tensorrt_llm/convert_dolphin.sh

转换脚本关键步骤解析(convert_dolphin.sh):

  1. 下载模型权重到tmp/hf_models/Dolphin
  2. 设置转换参数:批大小16,序列长度4096
  3. 调用convert_checkpoint.py执行权重转换
  4. 生成视觉编码器和语言解码器的TRT引擎

⚠️ 注意:转换过程需确保prompt_ids为int32类型(dolphin_runner.py#L120),否则会导致推理结果异常。

第二步:TensorRT引擎构建

转换完成后,会在tmp/trt_engines/Dolphin生成两类引擎文件:

  • 视觉编码器引擎:vision_encoder/目录下
  • 语言解码器引擎:1-gpu/bfloat16/目录下

构建命令详解:

# 构建解码器引擎关键参数
trtllm-build --checkpoint_dir tmp/trt_models/Dolphin/bfloat16/decoder \
  --output_dir tmp/trt_engines/Dolphin/1-gpu/bfloat16/decoder \
  --gemm_plugin bfloat16 \
  --bert_attention_plugin bfloat16 \
  --max_batch_size 16 \
  --max_seq_len 4096

第三步:部署验证与性能测试

离线推理验证

使用run_dolphin.sh脚本验证不同类型文档元素的解析效果:

# 测试页面级阅读顺序解析
python run_dolphin.py \
  --batch_size 1 \
  --hf_model_dir tmp/hf_models/Dolphin \
  --visual_engine_dir tmp/trt_engines/Dolphin/vision_encoder \
  --llm_engine_dir tmp/trt_engines/Dolphin/1-gpu/bfloat16 \
  --input_text "Parse the reading order of this document." \
  --image_path "demo/page_imgs/page_1.jpeg"

# 测试公式解析
python run_dolphin.py \
  --input_text "Read text in the image." \
  --image_path "demo/element_imgs/block_formula.jpeg"

在线API服务部署

启动API服务:

# 启动服务端
python deployment/tensorrt_llm/api_server.py \
  --hf_model_dir tmp/hf_models/Dolphin \
  --visual_engine_dir tmp/trt_engines/Dolphin/vision_encoder \
  --llm_engine_dir tmp/trt_engines/Dolphin/1-gpu/bfloat16 \
  --max_batch_size 16

# 客户端测试
python deployment/tensorrt_llm/api_client.py \
  --image_path demo/page_imgs/page_1.jpeg \
  --prompt "Parse the reading order of this document."

常见问题排查与优化建议

转换失败解决方案

  1. 内存不足:减少MAX_BATCH_SIZE参数(最小可设为1)
  2. TensorRT版本问题:确保使用0.18.x系列,与NVIDIA官方示例保持一致
  3. 权重文件缺失:检查hf_model目录下是否存在pytorch_model-00001-of-00002.bin等文件

性能优化技巧

  • 图像预处理:将输入图像分辨率调整为模型原生支持的896×896
  • 批处理策略:文档页面数量多时,设置--max_batch_size 8平衡速度与内存
  • 精度选择:GPU支持BF16时优先使用,否则降级为FP16

部署效果验证

使用测试脚本验证不同类型文档元素的解析效果:

# 页面级解析测试
python demo_page.py --model_path ./hf_model --input_path ./demo/page_imgs/page_1.png

# 元素级解析测试
python demo_element.py --model_path ./hf_model --input_path ./demo/element_imgs/table.jpg --element_type table

解析结果会保存到./results目录,包含:

  • 结构化JSON文件:元素坐标与类型信息
  • Markdown文件:格式化的文本内容
  • 可视化HTML:带元素边界框的页面预览
页面解析示例
页面级解析效果:自动识别文本段落、公式和表格区域并按阅读顺序排序

总结与后续扩展

通过本文介绍的方法,你已掌握Dolphin模型从ONNX转换到TensorRT-LLM部署的全流程。项目还提供vLLM部署方案作为替代选项,可根据实际硬件环境选择。

后续可探索的方向:

  • 多GPU部署:通过--tp_size参数实现模型并行
  • 量化优化:尝试INT8量化进一步降低内存占用
  • 自定义元素解析:扩展demo_element.py支持新元素类型

建议收藏本文并关注项目README.md获取最新更新。如有部署问题,可参考TensorRT-LLM部署文档或提交issue反馈。

登录后查看全文
热门项目推荐
相关项目推荐