preemption策略?KV cache的swap out?长文本请求的preemption策略?KV cache的swap out?
长文本请求占用的 KV cache 大、耗时长,若一直占着显存不释放,会阻塞新请求或导致 OOM。Preemption(抢占):在资源紧张或高优请求到达时,暂停或挂起当前长请求,释放其 KV cache 与算力,先服务高优或短请求,之后再恢复被挂起请求。难点在于:生成是状态化的(已生成 token、KV 状态),挂起需保存状态、恢复需还原,且要保证正确性与延迟体验。
KV cache swap out:把当前不需要参与计算的 KV 块从 GPU 显存换出到 CPU 内存(或 SSD),腾出显存给其他请求或同一请求的后续计算;需要时再换入回显存。这样长上下文不必一次性占满显存,可按「当前窗口」+ 换出历史实现长序列。实现要点:按 block 或 chunk 管理 KV,LRU 或按 attention 范围决定谁换出;换入时可能造成一次 stall,需与调度配合(如 preemption 时整请求 swap out,恢复时 swap in)。
策略可组合:时间片到则挂起长请求、swap out KV,让出 GPU;高优到达时挂起低优长请求;显存水位超阈值时对最不「划算」的请求(如已生成很多、剩余少)做 swap out 或终止。恢复时按 checkpoint 或 swap 回来的 KV 继续生成。PagedAttention、vLLM 等已支持类似逻辑,面试可结合具体系统说。
| 返回模块 | 返回总览 |