4. 调度与内存

调度与内存#

调度与内存部分关注的是系统如何在请求并发、batch 组织与缓存占用之间做权衡。这个主题在 SGLang 里很重要,但它不应该提前侵入请求生命周期章节,否则读者会在还没建立边界之前,就被一组局部优化问题拖进细节里。

这一部分的核心不是孤立地解释一个 scheduler.py 文件,而是把几组经常被混读的对象拆开:Scheduler 负责从等待队列和运行队列里选 batch,ScheduleBatch 负责把“请求集合”组织成可执行单元,ReqToTokenPoolTokenToKVPoolAllocator 负责把逻辑请求映射到物理缓存,而 RadixCacheChunkCache 决定缓存究竟怎样复用或回收。

本节包含什么#

本节第一章是 4.1 Scheduler、批次与 KV Cache。这一章会把 Scheduler.get_next_batch_to_run()PrefillAdderScheduleBatchmemory_pool.pyRadixCache/ChunkCache 放在同一个叙事里,解释为什么调度策略和内存布局必须一起读。

这一部分不会替代执行模型章节。它不展开每个 attention backend 的 kernel 细节,也不讨论所有 speculative decoding 变体。它只回答一个更基础的问题:当请求一边进入系统、一边占用上下文缓存时,SGLang 靠哪些数据结构维持“还能继续收新请求,同时不把已在跑的请求弄乱”。