执行模型#

执行模型部分真正要回答的是:当 batch 已经形成、cache 已经准备好之后,系统内部到底还会发生什么。这里不再讲请求怎样进入,也不再讲 waiting queue 如何塑形,而开始讲 ForwardBatchModelRunner、sampling、speculative、输出处理和旁路返回语义怎样在一次执行循环里重新接起来。

这部分最容易被误读成“模型前向细节专栏”。更稳的理解是:它在讲运行时后半段的状态推进。也就是说,前一部分解释“哪些请求有资格被推进”,这一部分解释“被推进之后,状态怎样继续流动、怎样被裁剪、怎样被解释、什么时候停下、又怎样带着额外证据返回给调用方”。

这一部分怎么读#

更稳的读法不是顺着二十章标题往下数,而是按四组问题进入。

第一组:先建立最小执行闭环#

先读:

这组章节提供的是最小执行闭环:ForwardBatch 怎样进 ModelRunner,logits 怎样被处理,token 怎样被真正选出来,输出又怎样重新收口为 finish 语义和 streaming 边界。

第二组:再看采样边界怎样被改写#

然后读:

这组章节讲的是:采样从来不只是 sample() 一步。参数整理、vocab mask、grammar 约束、penalty、logit bias、工作集裁剪,这些都在真正选 token 之前重写了执行后半段。

第三组:再看复杂执行人格#

接着读:

这组章节的共同主题是:一旦系统进入 graph runner、overlap、speculative 这些人格,执行链就不再是单条顺滑的 forward loop,而会长出新的切片、接受长度传播和更复杂的后半段边界。

第四组:最后看非标准返回与非生成人格#

最后再读:

这组章节提醒读者:执行模型不只覆盖 token generation。非生成请求、旁路返回语义、MoE 执行证据和维护者调试视角,也都属于这同一套执行后半段的一部分。

这一部分最该反复抓的对象#

这部分真正贯穿全文的,是一批比章节标题更稳定的对象:

  • ForwardBatch
  • ModelRunner
  • SamplingParams
  • SamplingBatchInfo
  • LogitsProcessorOutput
  • Sampler
  • finish_reason

只要这些对象的边界稳住了,后面的结构化生成章节就不会像“外加约束专题”,而会自然被理解成“在执行边界上插入更多语义”。

这一部分和前后章节的关系#

这部分放在 4. 调度与内存 之后,是因为 batch 怎样成形、KV 怎样准备好、请求对象怎样稳定下来,决定了执行模型从什么状态起跑。它又必须放在 6. 结构化生成与 API 之前,因为后者真正要解释的是:约束、tool workflow 和 surface 字段怎样插进这里讲过的 sampler 边界与输出边界。

因此,第 5 节不是孤立的“模型内核篇”,而是整本书从调度资源层过渡到输出语义层的关键桥段。