在【LLM】LLM 中 token 簡介與 bert 實操解讀一文中對 LLM 基礎定義進行了介紹,本文會對 LLM 中增量解碼與模型推理進行解讀。
一、LLM 中增量解碼定義
增量解碼(Incremental Decoding)是指在自回歸文本生成過程中,模型每次只計算并生成一個新的 token,并且會利用之前計算得到的中間結果,而不需要重新計算整個序列的表示,以此來提高生成效率和減少計算資源消耗。
在 GPT 系列模型生成對話回復、文章續寫等場景中廣泛應用了增量解碼。
二、增量解碼工作過程
- 初始輸入:在生成文本時,首先輸入一個初始的文本序列(比如一個問題或者提示詞 ),模型通過 Prefill 階段計算這個初始序列的隱藏狀態,同時生成并緩存與注意力機制相關的鍵(Key)和值(Value)矩陣,即 KV 緩存(KV Cache) 。
- 逐個生成 token:接下來進入解碼階段,模型會基于上一步生成的 token 和緩存的 KV 矩陣,計算當前位置的隱藏狀態,然后預測下一個 token。例如,在生成第一個 token 后,將其與之前緩存的 KV 矩陣結合,計算得到第二個 token 的隱藏狀態,進而預測第二個 token 。每生成一個新的 token,模型就更新相關的計算狀態,但不需要重新計算整個輸入序列的隱藏狀態,只是在之前計算結果的基礎上增量式地進行計算。
- 循環直至結束:重復上述步驟,直到達到預設的結束條件,比如生成了特定的結束標記、達到了最大文本長度限制或者滿足了其他停止生成的條件 。 總之,增量解碼通過復用計算結果和 KV 緩存,可以有效提升自回歸模型文本生成的效率和性能。
注意:當 KV cache 的長度超出閾值(例如 1024KB)會進行清理,清理策略取決于大模型的處理策略,有滑動窗口(清理最早的)和全部清理等。
三、新 token 選擇
模型在生成新 token 時,從可能的下一個詞表(token)中選擇一個特定的詞。詞表中有多個詞,詞的個數可以理解為 vocab size,其中每個位置的大小表示選取這個 token 的概率,如何基于這個信息選擇合適的 token 作為本次生成的 token。
- 貪婪采樣(Greedy Sampling) 在每一步,模型選擇概率最高的詞作為下一個詞。這種方法快速且計算成本低,但它可能導致重復。
- 隨機采樣(Random Sampling) 模型根據概率分布隨機選擇下一個詞。這種方法能夠引入隨機性,從而生成更多樣化的文本。但是,隨機性也可能導致文本質量下降,因為模型可能選擇低概率但不相關的詞。
- Top-k 采樣(Top-k Sampling) 這種方法首先選擇 k 個最可能的詞,然后從這個子集中隨機選擇下一個詞。這種方法旨在平衡貪婪采樣的確定性和隨機采樣的多樣性。
四、Prompt(提示詞)
Prompt 是用戶與 LLM 交互的入口,Prompt 進入 Prefill 階段處理,并成為生成后續內容的“上下文語境”。其核心作用是引導模型生成特定類型、風格或內容的輸出。簡單來說,Prompt 就是你告訴模型 “要做什么” 的一段話。
在大模型推理中,Prompt 是用戶與模型交互的起點,它在 Prefill 階段被模型處理,作為生成后續內容的基礎。例如:
Prompt: "請寫一首關于秋天的詩。"
LLM 根據此提示生成對應內容。
設計優質 Prompt 是激發 LLM 能力的關鍵,需要明確任務、約束條件和期望輸出,例如:明確任務指令/給出格式規范/提供上下文例子
五、模型推理:Prefill 與 Decode
參考鏈接:https://blog.csdn.net/firehadoop/article/details/146341556
LLM 推理分為兩個階段:
- Prefill 階段(批量處理)
- 輸入 token 序列一次性通過所有層。
- 并行計算生成每個 token 的 Key-Value (KV) 緩存,用于后續的高效生成。
- Decode 階段(自回歸處理)
- 每次生成一個新 token,需要經過模型所有層。
- 依賴 Prefill 階段生成的 KV 緩存。
- 推理過程是串行的,需等待前一個 token 生成完畢。
通過 KV Cache,避免了重復計算,提高生成效率。
prefill 與 decode 的關系類似于接力賽:Prefill 階段跑完第一棒,然后 Decode 階段接過接力棒,一個接一個地完成余下的路程。
以查詢 “介紹一下愛因斯坦” 為例,其核心流程如下:
5.1 初始化階段(Prefill)
- 輸入完整 prompt:“介紹一下愛因斯坦”
- 模型處理輸入并生成初始 KV 緩存(存儲注意力機制的鍵值對)
- 生成第一個輸出 token:“愛”
5.2 循環迭代解碼階段(Deocde)
- 關鍵機制:每次循環僅處理單個新 token,復用之前緩存的 KV 矩陣,計算復雜度從 O(N^2) 降至 O(N)。
- 輸出連貫性:新 token 的生成依賴于歷史所有 token (原始輸入+已生成內容)的語義信息,確保上下文邏輯一致。
5.3 小結
未來會再介紹 LLM 中評價指標與訓練部署~
六、MoE 簡介
一般來說,一個 MoE layer 包含 N 個 Experts(FFN 網絡)和一個 Gating Network。其中 Gating Network 可以將一個 token routing(Token 路由)到少數的專家進行計算。可參考下圖:
- 把不同領域專家模型(比如數學專家 LLM、編程專家 LLM ),抽象成 “專家 Token” 塞進一個 “元模型(meta LLM)” 的詞表。
- 用戶輸入問題時,元模型生成特殊 Token 來 “路由”(決定調用哪個專家模型 )。比如遇到數學題,就觸發 “數學專家 Token”,讓數學專家 LLM 處理;遇到編程問題,調用 “編程專家 Token”。
總結:Token routing 就是給不同重要性、不同功能的 Token,規劃調用不同專家模型,讓大模型更聰明分配算力、協同專家能力,最終實現 “又快又準又省資源” 的推理。
從整體看,MoE 在 LLM 模型的什么位置呢?如下圖:
參考 https://github.com/jingyaogong/minimind?tab=readme-ov-file
me-ov-file
[外鏈圖片轉存中…(img-yOYHNEwg-1756030828642)]
[外鏈圖片轉存中…(img-wwGuNHge-1756030828642)]
以上就是本文的全部介紹啦~