加入 batch 时才开始 Prefill不是加入前。请求到达 │ ▼ 等待队列Waiting Queue │ ← 此时什么都没做不占 KV Cache 显存 │ ← 只在 CPU 内存中存着 prompt 文本 │ ▼ 调度器判断有足够 Block 吗 │ ├─ 没有 → 继续等 │ └─ 有 → 加入 batch立即 Prefill │ ▼ 分配 Block执行 PrefillKV Cache 写入 │ ▼ 同一个 iteration 中Prefill 完的结果直接参与生成 │ ▼ 后续 iteration 进入 Decode一个具体的 iteration 里发生了什么Iteration N: 当前 batch: [A(decode), B(decode)] 调度器检查还有 50 个空闲 Block 从等待队列取出请求 Cprompt 30 tokens需要 2 个 Block 这一次 iteration 做的事: A → 1 次 Decode生成 1 个 token B → 1 次 Decode生成 1 个 token C → Prefill处理整个 prompt得到第一个 token 三者是同一个 forward pass一起执行 Iteration N1: batch: [A(decode), B(decode), C(decode)] C 现在和 A、B 一样每 iteration 生成 1 个 token所以 Prefill 不是在 batch 外面单独做的而是和当前 batch 的 Decode 混在一起跑。GPU 一次 forward pass 同时处理了 A、B 的 Decode 和 C 的 Prefill。这也是为什么 Chunked Prefill 很重要——如果 C 的 prompt 有 8000 个 tokenPrefill 计算量巨大会拖慢 A 和 B 的 Decode 速度用户感知到生成突然变慢。切成 chunk 后每次 iteration 只做一部分 Prefill对 Decode 的影响就小多了。