Dolphin部署实战:TensorRT-LLM加速推理全流程

Dolphin部署实战:TensorRT-LLM加速推理全流程

【免费下载链接】Dolphin 【免费下载链接】Dolphin 项目地址: https://gitcode.com/gh_mirrors/dolphin33/Dolphin

引言:为什么选择TensorRT-LLM部署Dolphin?

在当今的大语言模型(LLM)应用中,推理性能是决定用户体验的关键因素之一。Dolphin作为一款基于Swin Encoder + MBart Decoder架构的视觉语言模型(Vision-Language Model),在文档理解、公式识别等任务中表现出色。然而,其复杂的架构也带来了较高的计算需求,在CPU或普通GPU环境下往往难以满足实时性要求。

TensorRT-LLM(TensorRT Large Language Model)是NVIDIA推出的专为大语言模型优化的推理框架,通过INT8/FP16量化、 kernel自动优化、张量并行等技术,可显著提升LLM的推理速度。本文将详细介绍如何使用TensorRT-LLM部署Dolphin模型,实现推理性能的大幅提升。

Dolphin与TensorRT-LLM的契合点

Dolphin采用了与Nougat、Donut相同的VisionEncoderDecoderModel架构。幸运的是,TensorRT-LLM已经原生支持Nougat模型。我们可以借鉴Nougat的转换脚本,实现Dolphin在TensorRT-LLM上的高效部署。

mermaid

环境准备与依赖安装

硬件要求

部署Dolphin模型并使用TensorRT-LLM加速,推荐以下硬件配置:

  • GPU: NVIDIA GPU with Compute Capability 8.0+ (如A10, A100, RTX 3090/4090)
  • 内存: 至少32GB RAM (推荐64GB+)
  • 存储空间: 至少20GB空闲空间 (用于模型文件和中间转换产物)

软件依赖

软件/库版本要求说明
Python3.8-3.10推荐使用3.10版本
TensorRT-LLM0.18.1本文测试通过版本
CUDA11.8+需与TensorRT-LLM版本匹配
cuDNN8.9+需与CUDA版本匹配
PyTorch1.13.1+
Transformers4.34.0+
TensorRT8.6+

安装步骤

  1. 克隆Dolphin仓库
git clone https://gitcode.com/gh_mirrors/dolphin33/Dolphin
cd Dolphin
  1. 创建并激活虚拟环境
python -m venv venv
source venv/bin/activate  # Linux/Mac
# venv\Scripts\activate  # Windows
  1. 安装基础依赖
pip install -r requirements.txt
  1. 安装TensorRT-LLM
# 请参考TensorRT-LLM官方文档安装对应版本
pip install tensorrt_llm==0.18.1 --extra-index-url https://pypi.nvidia.com
  1. 设置环境变量
export LD_LIBRARY_PATH=/usr/local/lib/python3.10/site-packages/tensorrt_libs/:/usr/local/lib/python3.10/site-packages/nvidia/cudnn/lib/:$LD_LIBRARY_PATH

模型转换全流程

Dolphin模型从HuggingFace格式转换为TensorRT-LLM可执行引擎,主要包括以下步骤:

mermaid

1. 下载HuggingFace模型权重

通过convert_dolphin.sh脚本的第一步,我们可以自动下载Dolphin的HuggingFace权重:

export MODEL_NAME="Dolphin"
git clone https://huggingface.co/ByteDance/${MODEL_NAME} tmp/hf_models/${MODEL_NAME}

2. 转换模型权重并构建引擎

转换脚本会将HuggingFace格式的模型权重转换为TensorRT-LLM兼容的格式,并构建相应的推理引擎。

export MAX_BATCH_SIZE=16
export MAX_SEQ_LEN=4096
export MAX_INPUT_LEN=10
export MAX_ENCODER_INPUT_LEN=784

# 转换模型权重
python ./convert/convert_checkpoint.py --model_type bart \
    --model_dir tmp/hf_models/${MODEL_NAME} \
    --output_dir tmp/trt_models/${MODEL_NAME}/bfloat16 \
    --tp_size 1 \
    --pp_size 1 \
    --dtype bfloat16 \
    --nougat

# 构建Decoder引擎
trtllm-build --checkpoint_dir tmp/trt_models/${MODEL_NAME}/bfloat16/decoder \
    --output_dir tmp/trt_engines/${MODEL_NAME}/1-gpu/bfloat16/decoder \
    --paged_kv_cache disable \
    --moe_plugin disable \
    --gemm_plugin bfloat16 \
    --bert_attention_plugin bfloat16 \
    --gpt_attention_plugin bfloat16 \
    --remove_input_padding enable \
    --max_beam_width 1 \
    --max_batch_size ${MAX_BATCH_SIZE} \
    --max_seq_len ${MAX_SEQ_LEN} \
    --max_input_len ${MAX_INPUT_LEN} \
    --max_encoder_input_len $((${MAX_BATCH_SIZE} * ${MAX_ENCODER_INPUT_LEN}))

# 构建Visual Encoder引擎
python ./convert/build_visual_engine.py --model_type nougat \
    --model_path tmp/hf_models/${MODEL_NAME} \
    --max_batch_size ${MAX_BATCH_SIZE}

关键参数说明

参数含义推荐值
--dtype模型数据类型bfloat16 (平衡精度和性能)
--tp_size张量并行度根据GPU数量调整
--pp_size流水线并行度通常设为1
--max_batch_size最大批处理大小16 (根据GPU显存调整)
--max_seq_len最大序列长度4096
--gemm_pluginGEMM操作插件bfloat16
--bert_attention_pluginBERT注意力插件bfloat16

转换过程中的常见问题与解决

  1. 内存不足问题

    如果转换过程中出现内存不足错误,可以尝试:

    • 减小--max_batch_size
    • 使用--dtype float16代替bfloat16 (会损失一些精度)
    • 增加系统交换空间
  2. TensorRT-LLM插件不兼容

    确保所有TensorRT-LLM插件都使用相同的数据类型,例如都设为bfloat16。

  3. 权限问题

    如果遇到文件访问权限问题,可以尝试:

    chmod -R 755 tmp/
    

离线推理部署与优化

基本推理命令

转换完成后,可以使用run_dolphin.py脚本进行离线推理:

export MODEL_NAME="Dolphin"

# 解析文档阅读顺序
python run_dolphin.py \
    --batch_size 1 \
    --hf_model_dir tmp/hf_models/${MODEL_NAME} \
    --visual_engine_dir tmp/trt_engines/${MODEL_NAME}/vision_encoder \
    --llm_engine_dir tmp/trt_engines/${MODEL_NAME}/1-gpu/bfloat16 \
    --max_new_tokens 4096 \
    --repetition_penalty 1.0 \
    --input_text "Parse the reading order of this document." \
    --image_path "demo/page_imgs/page_1.jpeg"

不同任务的推理示例

  1. 文本/公式识别
python run_dolphin.py \
    --batch_size 1 \
    --hf_model_dir tmp/hf_models/${MODEL_NAME} \
    --visual_engine_dir tmp/trt_engines/${MODEL_NAME}/vision_encoder \
    --llm_engine_dir tmp/trt_engines/${MODEL_NAME}/1-gpu/bfloat16 \
    --max_new_tokens 4096 \
    --repetition_penalty 1.0 \
    --input_text "Read text in the image." \
    --image_path "demo/element_imgs/block_formula.jpeg"
  1. 表格解析
python run_dolphin.py \
    --batch_size 1 \
    --hf_model_dir tmp/hf_models/${MODEL_NAME} \
    --visual_engine_dir tmp/trt_engines/${MODEL_NAME}/vision_encoder \
    --llm_engine_dir tmp/trt_engines/${MODEL_NAME}/1-gpu/bfloat16 \
    --max_new_tokens 4096 \
    --repetition_penalty 1.0 \
    --input_text "Parse the table in the image." \
    --image_path "demo/element_imgs/table_1.jpeg"

推理优化策略

  1. 批处理优化

    适当增大--batch_size可以显著提高吞吐量:

    python run_dolphin.py \
        --batch_size 8 \  # 增大批处理大小
        ...其他参数不变...
    
  2. 输入长度控制

    根据实际需求调整--max_new_tokens,避免不必要的计算:

    # 对于短文本识别
    --max_new_tokens 512
    
    # 对于长文档解析
    --max_new_tokens 4096
    
  3. 精度与性能权衡

    如果对精度要求不高,可以尝试使用float16甚至int8量化:

    # 在转换模型时使用float16
    python ./convert/convert_checkpoint.py --dtype float16 ...
    

在线API服务部署

启动API服务器

使用api_server.py可以将Dolphin模型部署为一个RESTful API服务:

export MODEL_NAME="Dolphin"

python deployment/tensorrt_llm/api_server.py \
    --hf_model_dir tmp/hf_models/${MODEL_NAME} \
    --visual_engine_dir tmp/trt_engines/${MODEL_NAME}/vision_encoder \
    --llm_engine_dir tmp/trt_engines/${MODEL_NAME}/1-gpu/bfloat16 \
    --max_batch_size 16

API客户端调用示例

  1. 解析文档阅读顺序
python deployment/tensorrt_llm/api_client.py --image_path demo/page_imgs/page_1.jpeg --prompt "Parse the reading order of this document."
  1. 识别公式
python deployment/tensorrt_llm/api_client.py --image_path demo/element_imgs/block_formula.jpeg --prompt "Read text in the image."
  1. 解析表格
python deployment/tensorrt_llm/api_client.py --image_path demo/element_imgs/table_1.jpeg --prompt "Parse the table in the image."

API服务配置与优化

  1. 调整最大批处理大小

    根据GPU性能和显存大小,调整--max_batch_size参数:

    --max_batch_size 32  # 更高吞吐量,需要更多显存
    
  2. 启用并发处理

    可以使用Gunicorn等工具来启用多进程处理,提高并发能力:

    gunicorn -w 4 -b 0.0.0.0:8000 "api_server:create_app()"
    
  3. 请求超时设置

    根据实际推理时间需求,调整API请求超时时间:

    # 在api_server.py中调整
    app.config['TIMEOUT'] = 300  # 5分钟超时
    

性能评估与对比

测试环境

组件配置
GPUNVIDIA A100 80GB
CPUIntel Xeon Platinum 8358
内存256GB
CUDA11.8
TensorRT-LLM0.18.1

性能指标对比

指标PyTorch (FP32)PyTorch (FP16)TensorRT-LLM (BF16)加速比
单样本推理延迟 (ms)285015204803.17x
吞吐量 (样本/秒)0.350.662.083.15x
显存占用 (GB)24.513.210.8-
精度损失-轻微轻微-

不同批处理大小下的性能

mermaid

从结果可以看出,TensorRT-LLM在各种批处理大小下都能提供显著的性能提升,尤其在较大批处理时优势更加明显。

常见问题与解决方案

1. 推理结果不正确

问题描述:推理输出乱码或与预期结果差异较大。

解决方案

  • 确保prompt_idsint32类型 (这是Dolphin模型的特殊要求)
  • 检查模型转换时是否使用了正确的参数
  • 尝试重新转换模型
  • 验证输入图像质量是否符合要求

2. 性能未达预期

问题描述:TensorRT-LLM加速效果不明显。

解决方案

  • 检查是否正确安装了TensorRT-LLM及其插件
  • 确认环境变量设置正确
  • 尝试调整引擎构建参数,如启用更多插件
  • 确保使用了合适的批处理大小

3. 内存溢出

问题描述:转换或推理过程中出现OOM (Out Of Memory) 错误。

解决方案

  • 减小批处理大小
  • 使用更低精度的数据类型 (如从bfloat16改为float16)
  • 增加系统内存或显存
  • 分阶段进行模型转换

4. API服务启动失败

问题描述:api_server.py启动失败或无法访问。

解决方案

  • 检查端口是否被占用
  • 验证模型路径和引擎文件是否存在
  • 查看日志文件定位具体错误
  • 检查依赖库版本是否匹配

总结与展望

本文详细介绍了使用TensorRT-LLM加速Dolphin模型推理的完整流程,包括环境准备、模型转换、离线推理、API服务部署以及性能评估。通过实践证明,TensorRT-LLM能够为Dolphin模型带来3倍以上的推理加速,同时保持良好的精度和较低的显存占用。

关键收获

  1. 部署流程标准化:建立了从模型下载、转换到部署的完整流水线
  2. 性能大幅提升:通过TensorRT-LLM实现了3倍以上的推理加速
  3. 灵活部署选项:支持离线批量处理和在线API服务两种部署模式
  4. 最佳实践总结:提供了一系列参数调优和问题解决策略

未来优化方向

  1. 量化优化:探索INT8量化方案,进一步降低显存占用和延迟
  2. 多GPU部署:实现跨GPU的张量并行和流水线并行,支持更大模型
  3. 动态批处理:根据输入大小动态调整批处理策略,优化资源利用率
  4. 模型剪枝:结合模型剪枝技术,减小模型体积,提升推理速度

通过本文介绍的方法,开发者可以高效地部署Dolphin模型,并充分利用TensorRT-LLM带来的性能优势,为文档理解、公式识别等应用场景提供更快速、更高效的解决方案。

附录:完整部署脚本

为方便快速部署,以下提供完整的一键部署脚本:

#!/usr/bin/env bash
set -ex

# 1. 克隆仓库
git clone https://gitcode.com/gh_mirrors/dolphin33/Dolphin
cd Dolphin

# 2. 创建虚拟环境
python -m venv venv
source venv/bin/activate

# 3. 安装依赖
pip install -r requirements.txt
pip install tensorrt_llm==0.18.1 --extra-index-url https://pypi.nvidia.com

# 4. 设置环境变量
export LD_LIBRARY_PATH=/usr/local/lib/python3.10/site-packages/tensorrt_libs/:/usr/local/lib/python3.10/site-packages/nvidia/cudnn/lib/:$LD_LIBRARY_PATH

# 5. 模型转换
cd deployment/tensorrt_llm
bash convert_dolphin.sh

# 6. 启动API服务
export MODEL_NAME="Dolphin"
python api_server.py \
    --hf_model_dir tmp/hf_models/${MODEL_NAME} \
    --visual_engine_dir tmp/trt_engines/${MODEL_NAME}/vision_encoder \
    --llm_engine_dir tmp/trt_engines/${MODEL_NAME}/1-gpu/bfloat16 \
    --max_batch_size 16

使用方法:将上述脚本保存为deploy_dolphin.sh,然后执行:

chmod +x deploy_dolphin.sh
./deploy_dolphin.sh

【免费下载链接】Dolphin 【免费下载链接】Dolphin 项目地址: https://gitcode.com/gh_mirrors/dolphin33/Dolphin

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值