问题域/PD-449

连续批处理调度

Continuous Batching & Scheduling

解决 LLM 推理中静态批处理导致 GPU 利用率低的问题,通过动态调度实现序列级别的连续批处理

子问题

1.Prefill/Decode 阶段分离

2.序列抢占与重新排队

3.动态 batch 组装约束

4.EOS 检测与序列完成

5.Prefix Caching 与抢占后重调度的交互:被抢占序列重新 prefill 时如何复用已缓存 block

6.跨进程序列序列化优化:decode 阶段只传 last_token 减少 IPC 开销

各项目的解法1 solutions

Signals

横向对比

维度nano-vllm
调度策略Prefill 绝对优先,waiting 非空时不做 decode
批组装约束max_num_seqs + max_num_batched_tokens 双约束门控
抢占机制LIFO 抢占 running 队尾序列,deallocate 全部 blocks
Prefix Cachingxxhash 链式 block 级内容寻址,allocate 时自动命中
状态机复杂度3 态(WAITING/RUNNING/FINISHED),无 SWAPPED 状态
代码规模Scheduler 72 行,极简教学级实现

最佳实践

1.Prefill 优先调度以降低首 token 延迟

2.内存不足时抢占最后加入的序列(LIFO)

3.被抢占序列 appendleft 到 waiting 头部,确保优先重新调度

4.can_append 精确判断:仅在 token 数 mod block_size == 1 时需要新 block

5.序列 __getstate__ 优化:decode 阶段不传完整 token_ids,只传 last_token