1. vLLM 核心机制

vLLM 是开源 LLM 推理引擎中采用最广的方案,两个核心机制直接决定压测行为:

1.1 PagedAttention(KV Cache 分页)

传统实现为每个请求预分配"最大上下文"的连续显存,实际平均只用 20-40%,碎片严重。PagedAttention 把 KV Cache 切成固定大小的 block(类比 OS 虚拟内存分页),按需分配:

  • 显存利用率显著上升 → 同硬件可支撑更高并发(压测时"并发拐点"后移)
  • 支持 Copy-on-Write → beam search / 多候选分支共享前缀
  • 代价:间接寻址的访存开销(decode 阶段略增 TPOT,通常 <5%)

1.2 Continuous Batching(连续批处理)

请求级动态调度:batch 内某个请求生成完立即出列、等待队列里的请求立即补入,不用等整批完成。效果:

  • 吞吐接近理论上限,GPU 空转时间最小化
  • 压测含义:并发数超过 max-num-seqs 后请求进等待队列,TTFT 开始跳升——这个拐点就是调度容量,必须测出来

1.3 其他关键特性(压测时逐一开关验证)

特性作用测试动作
Prefix Caching相同前缀(如 system prompt)KV 复用,TTFT 大幅下降同 prompt 批量请求 vs 随机 prompt,对比 TTFT 与命中率指标
Tensor Parallelism模型切到多卡,每卡放 1/TP 权重TP=1/2/4 三档测吞吐与 TPOT,画通信开销曲线
投机解码(Speculative)小模型草稿+大模型校验,加速 decode同吞吐下 TPOT 降幅;注意接受率随领域变化,用业务语料测
量化加载(FP8/INT4)降低显存与访存压力见 量化与精度 章

2. 压测关键参数

参数作用压测注意
max-model-len最大上下文(输入+输出)它决定每请求 KV 上限,设 176K 会显著压低最大并发——容量规划的第一变量,见容量规划
max-num-seqs调度器同时处理的最大序列数压测拐点探测的核心变量
gpu-memory-utilization允许 vLLM 占用的显存比例默认 0.9;与 co-located 服务共存时必须下调并留 headroom
enable-prefix-caching前缀缓存开关真实场景(固定 system prompt)应开启测试,报告命中率
enforce-eager关闭 CUDA Graph基线模式 vs 图模式各测一轮,记录 TPOT 差异

3. 压测方案模板

  1. 基线:并发=1,短上下文(1K 输入/500 输出),跑 50 次取 P50/P95——作为所有对比的锚点。
  2. 并发梯度:1 → 2 → 4 → 8 → 16 → 32 → 64,每档持续 ≥10 分钟或 ≥200 请求,记录 TTFT/TPOT/吞吐/错误率/显存。找两条曲线:TPOT 开始陡升的拐点(decode 饱和)与 TTFT 开始陡升的拐点(排队开始)。
  3. 混合负载:按真实流量配比(如 70% 短问答 + 20% 长输入 + 10% 长输出),固定 prompt 池与长度分布,防止分布漂移污染结果。
  4. 长上下文专项:单独测 32K / 128K / 176K 输入的 TTFT 曲线(近似线性验证),以及长上下文与短请求混跑时的相互挤占(短请求 TPOT 恶化多少)。
  5. 稳定性:在设计并发点的 80% 持续压 ≥30 分钟,观察显存单调增长(泄漏)、延迟漂移、OOM/5xx。
  6. 极限与恢复:压到 OOM 或错误率 >5%,撤载后验证服务自恢复时间(KV 释放、调度器复位)。
📌 结论写法:容量结论必须绑定五元组「模型+量化+引擎版本+max-model-len+硬件」,任一变化即基线失效、重测。例:"Qwen 27B-FP8 + vLLM x.x + max-model-len=153600 + 双卡 TP=2,SLO(TTFT P95<2s, TPOT P95<80ms) 下 Goodput ≈ N 并发 / M tokens/s"。