Qwen2.5-7B-Instruct模型推理速度与量化对比分析
本篇文档分析了Qwen2.5-7B-Instruct模型在不同输入长度、不同量化方式下,基于vLLM推理框架的性能表现,并给出实际部署和优化建议。
1. 推理速度对比表
- 本文数据来源于官方性能测试,具体速度会因硬件、驱动、vLLM版本等略有差异。
- 量化模型需结合实际业务场景进行精度和速度的权衡选择。
推理速度与量化方式分析
- BF16(半精度浮点):精度最高,但推理速度最慢。
- GPTQ-Int8/Int4:量化后速度显著提升,尤其是Int4,推理速度最高。
- AWQ:另一种高效量化方式,速度接近GPTQ-Int4。
- 输入长度越大,推理速度越慢,但量化优势依然明显。
技术应用建议
- 追求推理速度:建议优先选择GPTQ-Int4或AWQ量化模型,适合高并发、低延迟场景。
- 追求精度:可选择BF16,但需接受推理速度下降。
- 输入长度权衡:输入越长,速度越慢,需结合业务实际需求合理设置。
- 部署建议:推荐使用vLLM框架,结合Docker部署,合理配置
--ipc=host
等参数以提升性能。
2. V100推理服务速度基准测试
2.1 测试环境和指标
测试环境:
- GPU:Tesla V100-PCIE-32GB
- CUDA:12.1
- PyTorch:2.4.0+cu121
- Model:Qwen2.5-Coder-7B-Instruct-GPTQ-Int4
性能指标:
指标 | 英文名称 | 解释 |
---|---|---|
首次生成token时间 | TTFT (Time to First Token) | 从发送请求到生成第一个token的时间(以秒为单位) |
每输出token时间 | TPOT (Time Per Output Token) | 生成每个输出token所需的时间(以秒为单位) |
延迟时间 | Latency | 从发送请求到接收完整响应的时间(以秒为单位) |
输入token数 | Input tokens | 请求中输入的token数量 |
输出token数 | Output tokens | 响应中生成的token数量 |
吞吐量 | Throughput | 每秒输出的token数量(tokens/s) |
2.2 客户端测试结果
2.2.1 并发数对性能的影响
每个统计项运行10次,测试结果如下:
并发数 | TTFT (AVG/P90) | Latency (AVG/P90) | Throughput (AVG/P90) | 成功率 (%) |
---|---|---|---|---|
1 | 0.199 / 0.209 | 0.916 / 0.916 | 87.07 / 88.44 | 100.00 |
5 | 0.238 / 0.287 | 1.483 / 1.485 | 53.91 / 55.55 | 100.00 |
10 | 0.272 / 0.288 | 2.279 / 2.282 | 35.06 / 35.40 | 100.00 |
50 | 0.362 / 0.680 | 5.014 / 5.053 | 15.95 / 16.19 | 100.00 |
2.2.2 Prompt长度对性能的影响(5并发)
Prompt字符数 | TTFT (AVG/P90) | Latency (AVG/P90) | Throughput (AVG/P90) | 成功率 (%) |
---|---|---|---|---|
32 | 0.231 / 0.253 | 1.471 / 1.472 | 54.35 / 56.18 | 100.00 |
128 | 0.275 / 0.311 | 1.519 / 1.520 | 52.71 / 54.46 | 100.00 |
1024 | 0.319 / 0.435 | 1.106 / 1.402 | 38.68 / 49.28 | 100.00 |
2.2.3 输出长度对性能的影响(5并发、开放性prompt)
max_tokens | TTFT (AVG/P90) | Latency (AVG/P90) | Throughput (AVG/P90) | 成功率 (%) | 生成Token数 |
---|---|---|---|---|---|
80 | 0.425 / 0.466 | 1.589 / 1.737 | 46.72 / 49.89 | 100.00 | 75.1 |
128 | 0.428 / 0.468 | 2.475 / 2.507 | 51.01 / 51.92 | 100.00 | 126.2 |
1024 | 0.430 / 0.457 | 10.122 / 12.811 | 68.17 / 70.47 | 100.00 | 714.4 |
关键发现:
- Prompt长度对推理速度影响有限
- 推理速度主要与并发数和输出长度正相关
- 高并发场景下,TTFT和Latency都会显著增加
2.3 推理端测试结果
2.3.1 量化方式兼容性测试
- AWQ量化:V100架构不支持,无法启动
- GPTQ量化:低版本vLLM会报warning,升级到vLLM 0.8.1后影响不大
2.3.2 vLLM版本升级前后对比
升级前(低版本vLLM):
并发数 | TTFT (AVG/P90) | Latency (AVG/P90) | Throughput (AVG/P90) | 成功率 (%) |
---|---|---|---|---|
1 | 0.193 / 0.215 | 0.990 / 0.990 | 80.80 / 81.65 | 100.00 |
5 | 0.242 / 0.284 | 1.581 / 1.582 | 50.62 / 52.00 | 100.00 |
10 | 0.265 / 0.281 | 2.389 / 2.393 | 33.46 / 33.89 | 100.00 |
50 | 0.336 / 0.356 | 5.491 / 5.506 | 14.57 / 14.70 | 100.00 |
升级后(vLLM 0.8.1):
并发数 | TTFT (AVG/P90) | Latency (AVG/P90) | Throughput (AVG/P90) | 成功率 (%) |
---|---|---|---|---|
1 | 0.210 / 0.368 | 1.030 / 1.030 | 77.67 / 79.93 | 100.00 |
5 | 0.236 / 0.263 | 1.591 / 1.593 | 50.30 / 51.41 | 100.00 |
10 | 0.276 / 0.284 | 2.400 / 2.404 | 33.31 / 33.51 | 100.00 |
50 | 0.327 / 0.363 | 5.530 / 5.544 | 14.46 / 14.56 | 100.00 |
2.3.3 KV Cache优化测试
开启 --kv-cache-dtype fp8_e5m2
参数后,性能影响不大:
并发数 | TTFT (AVG/P90) | Latency (AVG/P90) | Throughput (AVG/P90) | 成功率 (%) |
---|---|---|---|---|
1 | 0.210 / 0.368 | 1.030 / 1.030 | 77.67 / 79.93 | 100.00 |
5 | 0.236 / 0.263 | 1.591 / 1.593 | 50.30 / 51.41 | 100.00 |
10 | 0.276 / 0.284 | 2.400 / 2.404 | 33.31 / 33.51 | 100.00 |
50 | 0.327 / 0.363 | 5.530 / 5.544 | 14.46 / 14.56 | 100.00 |
2.4 测试结论与优化建议
- 并发性能:V100在低并发(1-5)场景下表现优秀,TTFT约0.2秒,吞吐量可达80+ tokens/s
- 高并发限制:并发数超过10后,性能下降明显,建议根据业务需求合理设置并发数
- 量化兼容性:V100不支持AWQ量化,GPTQ-Int4是最佳选择
- 版本影响:vLLM版本升级对性能影响较小,建议使用最新稳定版本
- 优化参数:KV Cache优化在V100上效果有限,可选择性开启
3. Qwen2.5-Coder-7B-Instruct vLLM部署与环境配置
本节结合主流社区实践,详细梳理Qwen2.5-Coder-7B-Instruct模型在vLLM框架下的部署、推理参数配置、环境依赖与硬件适配要点。
3.1 远程端口映射与SSH隧道
ssh -CNg -L 8000:127.0.0.1:8000 root@your-server.com -p 22
用于将本地8000端口映射到远程服务器,便于本地访问远程vLLM服务。
3.2 vLLM服务启动命令与参数
python -m vllm.entrypoints.openai.api_server \
--model /root/autodl-tmp/Qwen2.5-Coder-7B-Instruct \
--served-model-name Qwen2.5-Coder-7B-Instruct \
--max-model-len=8192 \
-q gptq \
--dtype float16 \
--gpu-memory-utilization 0.96
--max-model-len 8192
:最大上下文长度-q gptq
:使用GPTQ量化--dtype float16
:数据类型为float16(V100显卡不支持bf16)--gpu-memory-utilization 0.96
:GPU显存利用率
3.3 Docker容器配置建议
如采用Docker部署,需在docker run
或docker-compose.yml
中添加:
ipc: host
以提升大模型推理的共享内存性能。
3.4 API调用参数示例
{
"prompt": "def bubble_sort(arr)",
"max_token": 80,
"stream": false
}
3.5 硬件与依赖环境说明
- V100显卡:仅支持fp16,无法使用bf16精度。
- 检查PyTorch版本:
python -c "import torch; print(torch.__version__)"
3.5.1 CUDA与PyTorch安装
- 安装CUDA 11.3
- 安装PyTorch 1.12.1及配套库:
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
3.5.2 FlashAttention安装(适配CUDA 11.3)
说明:
一般情况下,用户无需手动安装FlashAttention。主流大模型推理框架(如vLLM)的官方Docker镜像或安装包通常已自动集成FlashAttention相关依赖。只有在遇到兼容性问题、环境高度定制或报错提示缺少FlashAttention时,才需要参考下述步骤手动安装。
- 安装依赖:
pip install ninja packaging
- 编译安装FlashAttention 1.x:
git clone https://github.com/Dao-AILab/flash-attention cd flash-attention git checkout v1.0.9 # 兼容CUDA 11.3 pip install .
3.6 参考资料与社区实践
- 知乎:Qwen2.5-Coder-7B-Instruct vLLM部署实录
- CSDN:Qwen2.5-Coder-7B-Instruct vLLM部署与性能测试
- Datawhale:Qwen2.5-Coder-7B-Instruct vLLM部署调优
- FlashInfer-Python官方文档
本节内容结合社区最佳实践,便于快速完成Qwen2.5-Coder-7B-Instruct模型的高效推理部署。