KV Cache Offloading — 存储层次与块交换

nano-vllm 真实行为: preempt 时 swap-out 到 CPU → decode 时空闲 swap-in 回 GPU  |  教学演示
GPU HBM
1-3 TB/s | ~80 GB
$15/GB
CPU DRAM (swapped seq blocks)
50-100 GB/s | ~512 GB
$3/GB

nano-vllm swap 机制

● PREEMPT — HBM 满时 scheduler 选一个 seq
can_swap_out(seq) : ref_count==1 ?
swap_out : 整序列 block 搬到 CPU
(SHARED block) → recompute preempt
   丢弃 KV → 重算 Prefill ~200ms

● SWAP-IN — decode 阶段 GPU block 空闲时
can_swap_in(seq) : CPU 有空闲 block?
swap_in : CPU block 拷回 GPU
→ 序列恢复, 继续 decode

核心权衡
swap ~100μs << recompute ~200ms → 省 ~2000×
ref_count>1 的共享 block 不能 swap

nano-vllm vs vLLM

nano-vllm GPU CPU 两层
BlockManager.swapped_block_tables
kv_swap.swap_blocks (copy_)

vLLM GPU CPU NVMe 三层
--cpu-offload-gb 64
--swap-space 4 (NVMe)
LRU eviction + 自动 swap