24G 显存跑 14B 的模型,按说够,起服务报 CUDA out of memory。
第一反应是减小 gpu_memory_utilization,从 0.9 调到 0.7,还是 OOM。
后来发现真因不是权重占显存,是 KV cache 预分配。vLLM 启动时会按 max_model_len 预留 KV cache,长度设成 32768 的时候,光是 cache 就要好几个 G。
改法:
- max_model_len 降到 8192(实际业务用不到那么长)
- gpu_memory_utilization 设 0.85
- 开 enable_prefix_caching,重复的 system prompt 能复用
改完正常起来了,并发还不错。
另一条经验:报 OOM 的时候先看日志里「KV cache memory」那几行,vLLM 会打印详细的内存分配计划,比看显卡占用有用得多。
主楼这条对新手很不友好,建议补个最小示例。
补充一个:如果是多机部署,记得加分布式锁,不然会重复执行。
补充:证书这块记得验证链完整,openssl s_client 看一眼。
继续逛逛