困难serving推理系统vLLM面试高频字节跳动
vLLM 中一个请求被"抢占"(preemption)是怎么回事?如何缓解?
6 0 0
参考答案
**现象**:vLLM 用 PagedAttention + 连续批处理动态管理 KV Cache。当正在服务的序列不断变长、KV Cache 池耗尽,而新的解码步又需要更多块时,vLLM 会**抢占**部分序列——把它们的 KV Cache 暂时腾出,稍后再恢复。 **两种恢复方式**: - **Recompute(重算)**:丢弃被抢占序列的 KV,之后重新 prefill 恢复。省显存但费算力。 - **Swap(换出)**:把 KV Cache 换到 CPU 内存,需要时再换回。省算力但占 CPU 内存 + PCIe 带宽。 **监控信号**: - `vllm:num_preemptions_total` 上升。 - `gpu_cache_usage_perc` 持续 >90%,说明逼近 KV 上限。 **如何缓解**: 1. 提高 `--gpu-memory-utilization`(如 0.95)给 KV 池更多显存(别超 0.95,要留 activation/CUDA context 余量)。 2. 降低 `--max-num-seqs` 或 `--max-model-len`,减少并发/单序列上限。 3. 用量化(权重/KV)腾出显存。 4. 横向扩容(多实例)。 抢占是过载的信号,频繁抢占意味着容量规划不足或参数过激进。
讨论区(0)
还没有评论,来做第一个发言的人吧