9–12 t/s 偏低。同卡同方案(单卡 3090、单流 C1、冷缓存、功耗墙 300W)实测 116K 上下文约 31 t/s、159K 约 19.9 t/s,所以先按下面几条定位,通常不用换方案。
先分清瓶颈在显存带宽还是 KV 落 host。跑 decode 时看 nvidia-smi dmon:SM 高、mem 也高是正常带宽受限;如果 SM 不高、但 PCIe 有明显流量,基本是 KV/权重被 offload 到 CPU,长 ctx 下每 token 读 KV 全走 PCIe,就是这个掉到 10 t/s 的形态。
看 vLLM 启动日志里 GPU KV cache size: N tokens 是否覆盖你的实际上下文。--max-model-len 开太大(比如 256K)会按上限分配 block,24G 上更容易触发抢占/换页,按实际要用的长度设准。
确认 KV 精度真的走了 k4v2:KV 相关的开关要显式打开。退回 fp16 KV 时长 ctx 每 token 读取字节翻倍,decode 会直接掉一半。
查并发/抢占:vLLM 日志里搜 Preemption。多人同时请求会把单流压到几条,先按 C1 单流测基线。
关掉非必要开销:--enforce-eager 若开着(禁用 CUDA graph)会牺牲 decode 性能;采样用默认,别叠 grammar 或大 JSON 约束。
把启动命令、模型版本/commit、实际 max-model-len,以及一段 decode 时的 nvidia-smi dmon(含 SM%/mem%/power)贴出来,我对着数据判断是 offload、KV 精度还是调度问题。