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
→
→ 是 →
→ 否 (SHARED block) → recompute preempt
丢弃 KV → 重算 Prefill ~200ms
● SWAP-IN — decode 阶段 GPU block 空闲时
→
→
→ 序列恢复, 继续 decode
核心权衡
swap ~100μs << recompute ~200ms → 省 ~2000×
但 ref_count>1 的共享 block 不能 swap
→
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 三层
LRU eviction + 自动 swap
BlockManager.swapped_block_tables
kv_swap.swap_blocks (copy_)
vLLM — GPU ↔ CPU ↔ NVMe 三层
--cpu-offload-gb 64--swap-space 4 (NVMe)LRU eviction + 自动 swap