一句话定义:推理抢占(Preemption)是指在 LLM 推理服务中,当显存或算力不够时,调度器主动暂停一个正在生成的请求,腾出资源给其他请求,之后再恢复它。
原理:显存是餐桌,KV Cache 是吃剩的菜
大模型生成回答分两步:预填充(Prefill)把整段提问读进去,算出一份键值缓存(AI 词典:KV Cache">KV Cache);解码(Decode)再一个 token 一个 token 往外吐。KV Cache 会一直占着显存,请求越长、并发越多,显存越紧。
可以把它想成一家只有几口锅的火锅店。一桌客人正在涮,又来了一桌更急的。服务员不能把新客人赶走,于是请某桌先让位——这就是抢占。问题是:让位之后,那桌原来涮到一半的食材怎么办?
两种典型做法:换出去,还是倒掉重做
| 做法 | 英文 | 做什么 | 代价 |
|---|---|---|---|
| 换出 | Swap | 把 KV Cache 从显存拷到 CPU 内存,恢复时再拷回来 | 占内存,费传输带宽,恢复有搬运延迟 |
| 重算 | Recompute | 直接丢弃 KV Cache,恢复时重新预填充上下文来重建 | 不占额外内存,但浪费算力,长上下文尤其贵 |
换出像把火锅连汤端进冰柜,回头端出来接着涮;重算像把锅倒掉,回头重新烧汤、重新下菜。前者省算力,后者省空间。
和相邻概念的区别
排队(Queueing)是请求还没开始跑;抢占是已经跑起来被暂停。连续批处理(Continuous Batching)是每一步动态决定哪些请求一起算,主要为了提升吞吐;抢占是它在资源不够时的补充手段——先让谁下桌。分页注意力(PagedAttention)管的是 KV Cache 怎么分块存放、减少碎片;抢占管的是资源不够时怎么取舍,两者常配合使用。
对从业者和普通人的意义
对做推理服务的人,抢占策略直接影响延迟和吞吐:短 prompt 多、GPU 算力有余,重算往往更简单;长上下文多、CPU 内存和传输带宽充足,换出能避免重复计算。抢占太频繁会让请求来回换入换出,尾延迟变差。具体开关和默认值,以所用框架的官方文档为准。
对普通人,聊天时突然卡住、排队变慢,甚至回答像“重新开始”,背后可能就有请求被抢占、稍后恢复。
