返回课堂

有人答完了,新请求为什么还在等?

V03/b0 · 先让 A 和 B 同时工作

两个生成槽 · A 需 2 步 · B 需 4 步 · C 需 2 步且已等待
槽位轮 1轮 2轮 3轮 4轮 5轮 6
槽 1AA…………
槽 2BB…………
第 2 轮:A 完成
C 等待入场

先保持两个已接纳请求,观察 A 完成后的空位。固定步长调度示意,不是 GPU 加速倍数。

先让 A 和 B 同时工作

我们把系统缩成两个同时生成的位置。A 需要两步,B 需要四步,C 需要两步、已经在等待。这里先假设新请求的入场准备已经完成,目的是只看调度。第一轮 A 和 B 各向前走一步,第二轮再各走一步,于是 A 完成退出,而 B 还有两步。我们逐轮看谁在工作,不把等待的请求偷偷算作已经完成。

教师备课:指图与模拟问答

指图与推进 · 不朗读教师指向当前高亮对象,随后推进。

V03/b1 · 固定整批的空位

两个生成槽 · A 需 2 步 · B 需 4 步 · C 需 2 步且已等待
槽位轮 1轮 2轮 3轮 4轮 5轮 6
槽 1AA空空CC
槽 2BBBB完成完成
第 2 轮:A 完成
固定整批:C 等到第 5 轮

先保持两个已接纳请求,观察 A 完成后的空位。固定步长调度示意,不是 GPU 加速倍数。

固定整批的空位

如果规定这一批必须一起结束才能接下一批,A 空下来的位置就继续空着,直到 B 做完第四轮,C 才能开始。请求输出长短不同,这种等待可能很常见。图里的空格表达的是调度机会被浪费,不是说 GPU 上每个请求真的永远占一块独立物理座位。

教师备课:指图与模拟问答

指图与推进 · 不朗读教师指向当前高亮对象,随后推进。

V03/b2 · 下一轮让 C 加入

两个生成槽 · A 需 2 步 · B 需 4 步 · C 需 2 步且已等待
槽位轮 1轮 2轮 3轮 4轮 5轮 6
槽 1AACC完成完成
槽 2BBBB完成完成
第 2 轮:A 完成
连续批处理:第 3 轮 C 补入

B 保持自己的四步生成;C 使用空下来的位置。固定步长调度示意,不是 GPU 加速倍数。

下一轮让 C 加入

连续批处理在每个生成轮次重新安排活跃请求:A 完成以后,下一轮让 C 补进来,B 继续自己的生成。这样可以更及时使用可用容量,减少排队。不过这张图只有轮次,没有真实毫秒,不能据此宣布 GPU 快了多少倍;新请求的输入处理、缓存与延迟要求都仍要考虑。后训练也经常批量生成候选,所以这种服务组织还会影响训练成本。现在收回到最初那份 A/B 实验材料:模型为什么能读懂、为什么按要求回答、这次请求又怎样真正执行?

教师备课:指图与模拟问答

指图与推进 · 不朗读教师指向当前高亮对象,随后推进。

补充推导、边界与来源

设系统每轮最多容纳两个请求,A 需要 2 个生成步,B 需要 4 步,C 需要 2 步;C 已在等待,并假设入场所需准备已完成。固定整批完成再接新的策略下,A 在第 2 轮退出后,C 仍要等 B 到第 4 轮结束。连续批处理可以在第 3 轮让 C 进入,B 继续生成。

这是固定步长的调度示意,只展示空位利用和等待顺序。真实请求还有不同的 prefill 工作、缓存占用、延迟约束和到达时间;一轮的耗时也会随活跃批量变化。因此不能把示意中减少的轮数直接宣布为真实 GPU 加速倍数。调度器需要在吞吐、首 token 延迟、后续出字延迟和资源上限之间取舍。

连续批处理也会影响后训练中的候选生成,但这里不新增真实吞吐结论。关于 精确前缀共享、prefill/decode资源分离与KV传输 以及 候选生成与训练成本,可沿本页说明继续展开。

本页证据与条件

固定轮次调度教学构造;不是实测耗时

进入主题正文