核心要点
能点出静态批的痛点:同一批必须等最长序列生成完才整体结束,先完成的序列让 GPU 空转,存在「木桶效应」
能说出收益来源:GPU 始终保持高占用、批内有效 token 利用率更高,吞吐可数倍提升而不靠加硬件
能联系 PagedAttention:变长序列动态进出需要非连续 KV-cache 管理,PagedAttention 用分页显存使换入换出无碎片
标准回答
静态批处理的问题
传统做法把若干请求凑成一批、一起前向直到全部生成结束。但不同请求生成长度差异很大:短的早就该结束,却必须陪着最长的那条一起跑完,期间它占的算力被浪费。批越大、长度越参差,GPU 空转越严重——这是请求级(request-level)调度的木桶效应。
连续批处理怎么做
它把调度粒度从「一整批请求」降到「一次迭代」(iteration-level)。每生成一步后立即检查:哪些序列已经产出结束符或达到上限,就把它们换出并返回结果;同时把队列里等待的新请求填进腾出的位置。于是批的成员每一步都在动态变化,GPU 几乎不空转。
收益与配套
结果是有效 token 吞吐大幅提升、排队延迟下降,且无需增加硬件。难点在于序列动态进出导致 KV-cache 长度参差、频繁分配释放。vLLM 用 PagedAttention 把 KV-cache 按页(block)管理,像操作系统虚拟内存一样按需分配,消除显存碎片,让换入换出高效无损。详见 LLM 部署实践。
常见误区
⚠️ 常见踩坑
别把连续批处理说成「攒一个更大的静态批」——它的关键是迭代级动态进出,而非批更大;也别忽略它依赖灵活的 KV-cache 管理(如 PagedAttention),否则变长序列会造成严重显存碎片。
追问
追问 1:PagedAttention 在其中起什么作用?
把每条序列的 KV-cache 切成固定大小的 block 非连续存放,按需分配、用完即回收,像虚拟内存一样消除碎片,让序列随时进出而显存利用率接近满载,还支持前缀共享。
追问 2:它会增加单请求延迟吗?
通常不会显著增加,反而因排队等待缩短而降低端到端延迟。但极端高负载下,新请求频繁插入可能让单步略变慢,需用调度策略平衡吞吐与尾延迟。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。
📚 知识库
🛠️ AI 工具