答案在于计算模式和硬件效率的根本不同。Prefill是计算密集型(Compute-Bound),而Decoding是访存密集型(Memory-Bound)。

我们通过一个具体的例子来解释。


实例解析

场景设定:一个具体的例子

假设我们有以下配置:

我们将这个任务分解为两个阶段:

  1. Prefill 阶段: 并行处理输入的512个token。
  2. Decoding 阶段: 生成第513个token。

第1阶段: Prefill (处理输入的512个token)

在这个阶段,模型接收全部的512个token,并一次性地、并行地计算出这512个位置对应的隐藏状态(Hidden States),最终目的是为了预测第513个token。

1. I/O (访存):