跳到内容

Ernie4.5 VL 模型使用指南

本指南介绍了如何使用原生 BF16 运行 ERNIE-4.5-VL-28B-A3B-PTERNIE-4.5-VL-424B-A47B-PT

安装 vLLM

Ernie4.5-VL 支持已最近添加到 vLLM 主分支,但尚未包含在任何官方发布版本中。

uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install -U vllm --torch-backend auto

运行 Ernie4.5-VL

注意:由于异构专家架构(视觉和文本专家),不支持 torch.compile 和 cuda graph。

# 28B model 80G*1 GPU
vllm serve baidu/ERNIE-4.5-VL-28B-A3B-PT \
  --trust-remote-code
# 424B model 140G*8 GPU with native BF16
vllm serve baidu/ERNIE-4.5-VL-424B-A47B-PT \
  --trust-remote-code \
  --tensor-parallel-size 8

如果您只想测试功能且只有 8×80G GPU,可以使用 --cpu-offload-gb 参数将部分权重卸载到 CPU 内存,并额外使用 FP8 在线量化进一步减少 GPU 内存。

# 424B model 80G*8 GPU with FP8 quantization and CPU offloading
vllm serve baidu/ERNIE-4.5-VL-424B-A47B-PT \
  --trust-remote-code \
  --tensor-parallel-size 8 \
  --quantization fp8 \
  --cpu-offload-gb 50

如果您的单节点 GPU 内存不足,原生 BF16 部署可能需要多节点,多节点部署请参考 vLLM 文档 来启动 ray 集群。然后在主节点上运行 vllm。

# 424B model 80G*16 GPU with native BF16
vllm serve baidu/ERNIE-4.5-VL-424B-A47B-PT \
  --trust-remote-code \
  --tensor-parallel-size 16

基准测试

对于基准测试,仅在服务启动后的第一次 vllm bench serve 进行,以确保不受前缀缓存的影响。

# Prompt-heavy benchmark (8k/1k)
vllm bench serve \
  --model baidu/ERNIE-4.5-VL-28B-A3B-PT \
  --host 127.0.0.1 \
  --port 8200 \
  --dataset-name random \
  --random-input-len 8000 \
  --random-output-len 1000 \
  --request-rate 10 \
  --num-prompts 16 \
  --ignore-eos \
  --trust-remote-code

基准测试配置

通过调整输入/输出长度测试不同的工作负载

  • 提示密集型:8000 输入 / 1000 输出
  • 解码密集型:1000 输入 / 8000 输出
  • 平衡型:1000 输入 / 1000 输出

通过更改 --num-prompts 来测试不同的批次大小,例如 1, 16, 32, 64, 128, 256, 512

预期输出

============ Serving Benchmark Result ============
Successful requests:                     16        
Request rate configured (RPS):           10.00     
Benchmark duration (s):                  61.27     
Total input tokens:                      128000    
Total generated tokens:                  16000     
Request throughput (req/s):              0.26      
Output token throughput (tok/s):         261.13    
Total Token throughput (tok/s):          2350.19   
---------------Time to First Token----------------
Mean TTFT (ms):                          15663.63  
Median TTFT (ms):                        21148.69  
P99 TTFT (ms):                           22147.85  
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          38.74     
Median TPOT (ms):                        38.90     
P99 TPOT (ms):                           39.92     
---------------Inter-token Latency----------------
Mean ITL (ms):                           43.27     
Median ITL (ms):                         36.35     
P99 ITL (ms):                            236.49    
==================================================