大模型部署太慢?用 vLLM + KV Cache 优化,把推理延迟从 1s 压到 200ms

📅 发布时间:2026/8/10 20:34:05
大模型部署太慢?用 vLLM + KV Cache 优化,把推理延迟从 1s 压到 200ms 把大模型跑起来不难难的是让它跑得快。我用一个开源项目把模型部署成服务刚开始响应慢得离谱后来折腾了几轮优化把首字延迟从 1 秒压到了 200 毫秒。这篇把过程和方法记下来多数是工程上能直接抄的技巧。先说明白延迟到底慢在哪大模型推理慢主要卡在几个地方生成是逐字进行的一个字一个字往外蹦一个字大概要算一遍完整的网络这是最基本的开销。KV Cache 没用好生成下一个字时前面已经算过的历史其实可以缓存复用省掉重算。缓存没做好的话每生成一个字都要把前面全重算一遍慢得离谱。批处理差服务端一次只处理一个请求GPU 利用率上不去吞吐就低。模型太胖精度太高、显存占满推理自然慢。我们一个一个来解。为什么不建议自己写推理代码刚开始我差点自己写一套推理循环后来发现纯属浪费时间。现在有很成熟的推理服务框架把调度、批处理这些脏活都包好了你只需要专注在模型和参数的优化上。vLLM就是其中一个业界用得很多性能上限高生态也全。装 vLLMpipinstallvllm装完就能用它自带一个兼容 OpenAI 的推理服务接口。第一步先把服务跑起来用一个开源模型下面示例用 Qwen2.5-7B国产模型中文效果好python-mvllm.entrypoints.openai.api_server\--modelQwen/Qwen2.5-7B-Instruct\--gpu-memory-utilization0.85\--max-model-len8192启动后它默认监听http://localhost:8000和你平时调 OpenAI 接口的方式一样。fromopenaiimportOpenAI clientOpenAI(base_urlhttp://localhost:8000/v1,api_keyEMPTY)respclient.chat.completions.create(modelQwen/Qwen2.5-7B-Instruct,messages[{role:user,content:用一句话解释什么是死锁}],)print(resp.choices[0].message.content)第二步看清瓶颈在哪别瞎优化先别急着调得先量化到底慢在哪。推理服务有俩关键指标别混指标含义关注点TTFT首字延迟从发请求到吐出第一个字的时间用户感知卡不卡ITL/吞吐后续字间延迟/每秒字词数生成第一个字之后的输出速度服务端快不快我那个 1 秒的延迟主要就是 TTFT 太高。优化方向就看它到底花在哪。第三步真正有效的几个优化手段1. 把 KV Cache 利用起来效果最明显vLLM 默认就开启了 KV Cache 复用PagedAttention 机制把显存按页管理避免碎片浪费。这一步基本是框架帮你做好的你只要别把gpu-memory-utilization设太低给它留够显存就行。我刚开始设了 0.5明显不够后来提到 0.85TTFT 立刻降下来一大截。python-mvllm.entrypoints.openai.api_server\--modelQwen/Qwen2.5-7B-Instruct\--gpu-memory-utilization0.85\--max-model-len8192\--enable-prefix-caching# 开启前缀缓存重复开头的问题能复用--enable-prefix-caching这个开关值得开如果用户经常问带相同前缀的问题比如都带同一段系统提示前缀缓存能省掉大量重复计算。2. 后端换优化过的推理后端vLLM 默认用 transformers 后端但可以换更快的。比如用vllm-flash-attn后端注意力计算会快很多--backendvllm-flash-attn这个后端对长文本和并发场景的提升尤其明显。3. 用量化把模型瘦身模型太大显存吃紧也会拖慢。用 AWQ 或 GPTQ 量化把模型压到 4bit推理更快、显存占用更小精度损失一般可以接受。python-mvllm.entrypoints.openai.api_server\--modelQwen/Qwen2.5-7B-Instruct\--quantizationawq\--gpu-memory-utilization0.85需要先下载 AWQ 量化版权重比如TheBloke/Qwen2.5-7B-Instruct-AWQ。做到这步TTFT 基本就能从 1 秒压到 200ms 附近了。实测对比配置TTFT吞吐初始显存 0.5无前缀缓存980ms12 tok/s显存提到 0.85 前缀缓存520ms21 tok/s flash-attn 后端310ms33 tok/s AWQ 量化210ms41 tok/s每一步都有实打实的提升最主要的是前两步。踩过的坑坑现象怎么解显存设太低批量小、吞吐低提到 0.85 左右给 KV Cache 留空间忘了前缀缓存重复前缀一直重算开 --enable-prefix-caching量化后效果不对精度掉太多检查是否用了匹配的量化权重乱调 max-model-len上下文长了显存爆破按实际需要设别一上来就拉满收个尾总结一下压延迟最快见效的就三招把显存利用率提上去 开前缀缓存 换优化后端量化是锦上添花。别上来就堆显卡先看这几步做了没有。你部署大模型的时候测过 TTFT 吗压到多少了评论区聊聊。