跳到內容

預輸入(Prefill)

把回答問題想成寫考卷。你不會只看第一個字就開始作答,而是會先把題目讀完、整理重點,再開始寫答案。

LLM 也有類似的步驟:它會先處理 Prompt 裡的所有 Token,接著才一個 Token、一個 Token 地產生回答。這個先把輸入處理好的步驟,就稱為 Prefill;有些工具也會寫成 Prompt processing。

LLM 推論大致可以分成預輸入(Prefill)與生成(Decode)兩個階段。Prefill 會處理已知的完整輸入,計算後續生成需要的中間結果,並建立 KV Cache;因為許多輸入 Token 可以平行處理,在使用 GPU 加速時,這個階段通常較能充分利用 GPU 的運算能力。

Decode 則會根據前面的結果,一步一步產生新的 Token。兩個階段使用硬體資源的方式不同,所以「Prompt 處理得快」不一定代表「後續每秒生成的 Token 也同樣快」。

輸入越長,Prefill 通常需要處理的工作越多。當你貼入長文章、長對話或大量參考資料時,送出 Prompt 到看到第一個輸出之間的等待,可能就有相當一部分來自 Prefill。

在效能工具裡,你可能會看到 Prompt processing speed、Prefill throughput 或縮寫 pp。它們和逐 Token 生成速度是不同的測量項目;比較硬體或 Runtime 時,最好分開看。

「Prefill 是載入模型。」 不是。載入模型是把模型權重準備到記憶體;Prefill 是模型已能執行後,處理這一次輸入的推論階段。

「Prefill 很快,回答就一定生成得很快。」 不一定。Prefill 與 Decode 的運算特性不同,也可能遇到不同的硬體瓶頸。詳見〈LLM 的 Prompt 處理速度與文字生成速度都是看 GPU 有多快嗎?〉

「Prefill 會直接產生完整回答。」 不會。它準備後續生成需要的中間結果;回答仍要在 Decode 階段逐 Token 產生。

推論 · Decode(生成) · Token · KV Cache · Context Window

試著回答以下問題,來確認是否已學會。不確定答案的話,再回到對應段落複習。打勾狀態是方便你在這個頁面一一確認用,不會被儲存。

閱讀後自我確認