GuideLLM 压测实战指南:给大模型推理服务做一次完整 SLA 评估

随着大模型推理服务陆续上线,服务端性能不再只是 "能跑起来",而是要能回答几个关键问题:系统能承载多少并发?延迟会在哪里明显恶化?吞吐饱和点在哪里?TTFT、TPOT、RPS 是否满足 SLA?

GuideLLM 是 vLLM 官方开源的推理压测工具,专门面向大模型推理服务做负载测试。它兼容所有 OpenAI‑Compatible HTTP 后端,能够帮助团队快速完成并发扫描、稳态压测、饱和点识别,并输出完整的性能报告。

一、GuideLLM 是什么

GuideLLM 的定位很明确:给大模型推理服务做压测,而不是做模型训练。

它主要解决以下问题:

  • 推理服务在不同并发下的性能表现如何
  • 系统吞吐什么时候到达拐点
  • TTFT、TPOT、P50/P90/P95/P99 延迟变化情况
  • RPS、Token 吞吐量是否满足业务目标
  • 不同后端、不同模型、不同并发策略之间如何对比

GuideLLM 支持两种核心压测模式:

表格

模式 适用场景
sweep 从低并发逐步抬升,自动扫描系统性能拐点,适合先找饱和点
fixed 固定并发持续压测,适合做稳态验证和 SLA 回归

在流量模型上,GuideLLM 支持:

表格

流量模型 说明
poisson 泊松流量,更接近真实业务请求到达模式
constant 恒定速率,适合做基准对比测试

输出方面,GuideLLM 可以生成:

表格

输出类型 用途
CSV 原始时序指标,方便导入 Excel 对比
JSON 结构化报告,适合程序解析和 CI 自动化
HTML 交互式报告,查看分位延迟和曲线最方便
PNG 离线性能曲线图,适合文档和汇报

二、安装 GuideLLM

1. PyPI 安装(推荐)

复制代码
pip install guidellm[recommended] -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install guidellm[plot] -i https://pypi.tuna.tsinghua.edu.cn/simple

2. Git 源码安装

复制代码
git clone https://github.com/vllm-project/guidellm.git
cd guidellm
pip install -e ".[recommended,plot]" -i https://pypi.tuna.tsinghua.edu.cn/simple

3. 验证安装

复制代码
guidellm --help
guidellm version

建议 Python ≥ 3.9,推荐 3.10 / 3.11。

三、核心参数快速理解

GuideLLM 的命令结构并不复杂,重点掌握这几个参数即可:

复制代码
guidellm run [OPTIONS]

表格

参数 作用
--backend 指定推理后端,通常使用 openai_http
--tokenizer 指定 Tokenizer,必须和推理服务一致
--profile 选择压测模式:sweepfixed
--data 请求数据源:synthetic_textjsonl
--constraint 设置压测停止条件
--output 指定输出报告格式

1. Backend:连接推理服务

复制代码
--backend kind=openai_http,target=http://127.0.0.1:8000/v1,model=模型名

如果服务需要鉴权,可以加上 api_key

复制代码
--backend kind=openai_http,target=http://127.0.0.1:8000/v1,model=模型名,api_key="sk-xxxx"

2. Tokenizer:必须和推理服务一致

复制代码
--tokenizer kind=huggingface_auto,model=/data/models/模型目录

这是非常关键的一点:Tokenizer 不一致,token 统计就会失真,后续 TPOT、吞吐等指标都会受影响。

3. Profile:选择压测方式

sweep 适合先做容量探测:

复制代码
--profile kind=sweep,sweep_size=15,strategy_type=poisson

fixed 适合固定并发压测:

复制代码
--profile kind=fixed,concurrency=16,strategy_type=poisson

4. Data:合成数据或真实数据集

合成数据:

复制代码
--data kind=synthetic_text,prompt_tokens=512,output_tokens=512

真实数据:

复制代码
--data kind=jsonl,source=./test_dataset.jsonl

JSONL 示例:

复制代码
{"prompt": "your input prompt", "output_tokens": 256}

5. Constraint:控制压测停止条件

复制代码
--constraint kind=max_duration,seconds=120
--constraint kind=over_saturation
--constraint kind=max_errors,rate=0.05

常用组合是:

  • 每个档位最长运行 120 秒
  • 开启过饱和检测
  • 错误率超过 5% 自动停止

四、实战示例:一次完整的 sweep 压测

下面这个命令适合作为标准模板使用:先通过 sweep 找到系统饱和点,再决定后续 fixed 稳态压测的并发档位。

复制代码
guidellm run \
  --backend kind=openai_http,target=http://127.0.0.1:8000/v1,model=DeepSeek-R1-Distill-Qwen-7B \
  --tokenizer kind=huggingface_auto,model=/data/models/DeepSeek-R1-Distill-Qwen-7B \
  --profile kind=sweep,sweep_size=15,strategy_type=poisson \
  --data kind=synthetic_text,prompt_tokens=512,output_tokens=512 \
  --constraint kind=max_duration,seconds=120 \
  --constraint kind=over_saturation \
  --output kind=csv,path=./guidellm_reports/DeepSeek-R1-Distill-Qwen-7B/sweep_result.csv \
  --output kind=json,path=./guidellm_reports/DeepSeek-R1-Distill-Qwen-7B/sweep_result.json \
  --output kind=html,path=./guidellm_reports/DeepSeek-R1-Distill-Qwen-7B/report.html \
  --output kind=plot,path=./guidellm_reports/DeepSeek-R1-Distill-Qwen-7B/preview_plot.png

这条命令的含义是:

  • 目标后端:http://127.0.0.1:8000/v1
  • 测试模型:DeepSeek-R1-Distill-Qwen-7B
  • 压测模式:sweep
  • 扫描档位:15 档
  • 流量模型:泊松流量
  • 输入 token:512
  • 输出 token:512
  • 每档最长运行:120 秒
  • 自动检测饱和点
  • 输出 CSV、JSON、HTML、PNG 全套报告

五、固定并发压测模板

如果已经知道目标并发,也可以直接使用 fixed 模式:

复制代码
guidellm run \
  --backend kind=openai_http,target=http://127.0.0.1:8000/v1,model=DeepSeek-R1-Distill-Qwen-7B \
  --tokenizer kind=huggingface_auto,model=/data/models/DeepSeek-R1-Distill-Qwen-7B \
  --profile kind=fixed,concurrency=16,strategy_type=poisson \
  --data kind=synthetic_text,prompt_tokens=512,output_tokens=512 \
  --constraint kind=max_duration,seconds=120 \
  --output kind=json,path=./guidellm_reports/DeepSeek-R1-Distill-Qwen-7B/sweep_result.json \
  --output kind=html,path=./guidellm_reports/DeepSeek-R1-Distill-Qwen-7B/report.html \
  --output kind=plot,path=./guidellm_reports/DeepSeek-R1-Distill-Qwen-7B/preview_plot.png

六、输出报告怎么看

GuideLLM 生成的四类报告,建议这样使用:

表格

报告 怎么看
report.html 最常用,直接查看分位延迟、吞吐曲线和饱和点
sweep_result.csv 适合导入 Excel,做多轮压测对比
sweep_result.json 适合脚本解析、CI 自动化
preview_plot.png 适合离线汇报或文档插图

重点关注以下指标:

  • TTFT:首 token 延迟,直接影响用户等待感
  • TPOT:每输出 token 间隔,影响生成速度体验
  • RPS:每秒完成请求数,反映请求级吞吐
  • Token 吞吐量:反映模型实际处理能力
  • P50 / P90 / P95 / P99:判断延迟尾部表现
  • 饱和拐点:判断系统能力上限

七、常见问题与排错

1. Token 指标不准

这是最常见问题。

原因:Tokenizer 和推理服务不一致。

解决方式:

  • 优先使用本地模型目录
  • 不建议混用不同来源的 Tokenizer
  • 确保 --tokenizer 指向和推理服务完全一致的模型目录

2. sweep 跑得太久

sweep_size 不是越大越好。

建议:

  • sweep_size 控制在 10--15 档
  • max_duration 不要过长
  • 先粗扫找到拐点,再用 fixed 做精细验证

3. over_saturation 没有触发

如果一直跑到最高并发,说明当前并发还没有真正打满后端能力。

可以尝试:

  • 调大 end_concurrency
  • 检查后端 GPU/CPU/ 内存是否真的饱和
  • 确认压测客户端本身没有成为瓶颈

4. 连接 OpenAI 后端失败

检查项:

  • 是否带了 /v1 后缀
  • model 名称是否和服务端部署名称完全一致
  • 是否需要 api_key
  • 目标地址是否可达

八、建议的压测流程

更推荐的压测策略不是一上来就固定并发,而是分两步:

第一步:sweep 探测饱和点

复制代码
sweep → 找拐点 → 看 P95/P99 与吞吐变化

第二步:fixed 做稳态验证

复制代码
fixed → 固定并发 → 做 SLA 回归

这样既能快速评估系统容量,也能更稳地做版本变更前后的性能对比。

九、总结

GuideLLM 的价值不在于把压测命令写得复杂,而在于帮助团队用统一、可复现的方式回答一个更关键的问题:大模型推理服务到底能稳稳定承受到什么程度?

一个比较好的实践是:

  • 新版本上线前做一次 sweep
  • 找到饱和点后,用 fixed 做稳态回归
  • 重点看 TTFT、TPOT、RPS、Token 吞吐和 P95/P99 延迟
  • 每次保留 CSV、JSON、HTML 报告,方便横向对比

对很多团队来说,GuideLLM 可以作为大模型推理服务的标准性能评估工具,把 "大概能用" 变成 "有数据证明能用"。

相关推荐
cpolar技术支持5 小时前
本地 Playwright 测试报告怎么远程复盘?Trace Viewer 跑起来后,用 cpolar 分享失败现场
前端·自动化测试·测试工具·cpolar·playwright
测试狗科研平台1 天前
材料热传导能力表征——热导率计算方法与流程解析
科技·测试工具·材料工程
Luminbox紫创测控1 天前
GB/T 34515—2026新规航天热平衡试验:太阳模拟器该怎么选
测试工具·安全性测试·测试标准·航天器热平衡
蒸鱼Yuzheng1 天前
Unity 与 Unreal 测试工具怎么回答:Profiler、日志、自动化与证据链
测试工具·unity·性能分析·游戏测试·unrealengine
匠测AI说2 天前
XCUITest 自动化全解:同进程白盒、XCTest 架构、自动同步机制与 iOS 端选型指南
测试工具·ios·自动化
xfilm埃利测量2 天前
四探针法测电阻:原理讲透 + 常见问题一次说清
测试工具·平面·四探针·薄膜电阻测量
PhotonixBay3 天前
增材制造表面粗糙度测量:3D共聚焦多尺度方法
功能测试·测试工具·共聚焦显微镜·增材制造·测试标准
硬禾科技4 天前
连接世界的工程哲学
嵌入式硬件·测试工具·自动化·硬件工程