在【LLM】LLM 中 token 簡(jiǎn)介與 bert 實(shí)操解讀一文中對(duì) LLM 基礎(chǔ)定義進(jìn)行了介紹,本文會(huì)對(duì) LLM 中增量解碼與模型推理進(jìn)行解讀。
一、LLM 中增量解碼定義
增量解碼(Incremental Decoding)是指在自回歸文本生成過(guò)程中,模型每次只計(jì)算并生成一個(gè)新的 token,并且會(huì)利用之前計(jì)算得到的中間結(jié)果,而不需要重新計(jì)算整個(gè)序列的表示,以此來(lái)提高生成效率和減少計(jì)算資源消耗。
在 GPT 系列模型生成對(duì)話回復(fù)、文章續(xù)寫等場(chǎng)景中廣泛應(yīng)用了增量解碼。
二、增量解碼工作過(guò)程
初始輸入:在生成文本時(shí),首先輸入一個(gè)初始的文本序列(比如一個(gè)問(wèn)題或者提示詞 ),模型通過(guò) Prefill 階段計(jì)算這個(gè)初始序列的隱藏狀態(tài),同時(shí)生成并緩存與注意力機(jī)制相關(guān)的鍵(Key)和值(Value)矩陣,即 KV 緩存(KV Cache) 。
逐個(gè)生成 token:接下來(lái)進(jìn)入解碼階段,模型會(huì)基于上一步生成的 token 和緩存的 KV 矩陣,計(jì)算當(dāng)前位置的隱藏狀態(tài),然后預(yù)測(cè)下一個(gè) token。例如,在生成第一個(gè) token 后,將其與之前緩存的 KV 矩陣結(jié)合,計(jì)算得到第二個(gè) token 的隱藏狀態(tài),進(jìn)而預(yù)測(cè)第二個(gè) token 。每生成一個(gè)新的 token,模型就更新相關(guān)的計(jì)算狀態(tài),但不需要重新計(jì)算整個(gè)輸入序列的隱藏狀態(tài),只是在之前計(jì)算結(jié)果的基礎(chǔ)上增量式地進(jìn)行計(jì)算。
循環(huán)直至結(jié)束:重復(fù)上述步驟,直到達(dá)到預(yù)設(shè)的結(jié)束條件,比如生成了特定的結(jié)束標(biāo)記、達(dá)到了最大文本長(zhǎng)度限制或者滿足了其他停止生成的條件 。 總之,增量解碼通過(guò)復(fù)用計(jì)算結(jié)果和 KV 緩存,可以有效提升自回歸模型文本生成的效率和性能。
注意:當(dāng) KV cache 的長(zhǎng)度超出閾值(例如 1024KB)會(huì)進(jìn)行清理,清理策略取決于大模型的處理策略,有滑動(dòng)窗口(清理最早的)和全部清理等。
三、新 token 選擇
模型在生成新 token 時(shí),從可能的下一個(gè)詞表(token)中選擇一個(gè)特定的詞。詞表中有多個(gè)詞,詞的個(gè)數(shù)可以理解為 vocab size,其中每個(gè)位置的大小表示選取這個(gè) token 的概率,如何基于這個(gè)信息選擇合適的 token 作為本次生成的 token。
貪婪采樣(Greedy Sampling) 在每一步,模型選擇概率最高的詞作為下一個(gè)詞。這種方法快速且計(jì)算成本低,但它可能導(dǎo)致重復(fù)。
隨機(jī)采樣(Random Sampling) 模型根據(jù)概率分布隨機(jī)選擇下一個(gè)詞。這種方法能夠引入隨機(jī)性,從而生成更多樣化的文本。但是,隨機(jī)性也可能導(dǎo)致文本質(zhì)量下降,因?yàn)槟P涂赡苓x擇低概率但不相關(guān)的詞。
Top-k 采樣(Top-k Sampling) 這種方法首先選擇 k 個(gè)最可能的詞,然后從這個(gè)子集中隨機(jī)選擇下一個(gè)詞。這種方法旨在平衡貪婪采樣的確定性和隨機(jī)采樣的多樣性。
四、Prompt(提示詞)
Prompt 是用戶與 LLM 交互的入口,Prompt 進(jìn)入 Prefill 階段處理,并成為生成后續(xù)內(nèi)容的“上下文語(yǔ)境”。其核心作用是引導(dǎo)模型生成特定類型、風(fēng)格或內(nèi)容的輸出。簡(jiǎn)單來(lái)說(shuō),Prompt 就是你告訴模型 “要做什么” 的一段話。
在大模型推理中,Prompt 是用戶與模型交互的起點(diǎn),它在 Prefill 階段被模型處理,作為生成后續(xù)內(nèi)容的基礎(chǔ)。例如:
Prompt: "請(qǐng)寫一首關(guān)于秋天的詩(shī)。"
LLM 根據(jù)此提示生成對(duì)應(yīng)內(nèi)容。
設(shè)計(jì)優(yōu)質(zhì) Prompt 是激發(fā) LLM 能力的關(guān)鍵,需要明確任務(wù)、約束條件和期望輸出,例如:明確任務(wù)指令/給出格式規(guī)范/提供上下文例子
五、模型推理:Prefill 與 Decode
參考鏈接:https://blog.csdn.net/firehadoop/article/details/146341556
通過(guò) KV Cache,避免了重復(fù)計(jì)算,提高生成效率。
prefill 與 decode 的關(guān)系類似于接力賽:Prefill 階段跑完第一棒,然后 Decode 階段接過(guò)接力棒,一個(gè)接一個(gè)地完成余下的路程。
以查詢 “介紹一下愛(ài)因斯坦” 為例,其核心流程如下:
5.1 初始化階段(Prefill)
輸入完整 prompt:“介紹一下愛(ài)因斯坦”
模型處理輸入并生成初始 KV 緩存(存儲(chǔ)注意力機(jī)制的鍵值對(duì))
生成第一個(gè)輸出 token:“愛(ài)”
5.2 循環(huán)迭代解碼階段(Deocde)
5.3 小結(jié)
未來(lái)會(huì)再介紹 LLM 中評(píng)價(jià)指標(biāo)與訓(xùn)練部署~
六、MoE 簡(jiǎn)介
一般來(lái)說(shuō),一個(gè) MoE layer 包含 N 個(gè) Experts(FFN 網(wǎng)絡(luò))和一個(gè) Gating Network。其中 Gating Network 可以將一個(gè) token routing(Token 路由)到少數(shù)的專家進(jìn)行計(jì)算??蓞⒖枷聢D:
把不同領(lǐng)域?qū)<夷P停ū热鐢?shù)學(xué)專家 LLM、編程專家 LLM ),抽象成 “專家 Token” 塞進(jìn)一個(gè) “元模型(meta LLM)” 的詞表。
用戶輸入問(wèn)題時(shí),元模型生成特殊 Token 來(lái) “路由”(決定調(diào)用哪個(gè)專家模型 )。比如遇到數(shù)學(xué)題,就觸發(fā) “數(shù)學(xué)專家 Token”,讓數(shù)學(xué)專家 LLM 處理;遇到編程問(wèn)題,調(diào)用 “編程專家 Token”。
總結(jié):Token routing 就是給不同重要性、不同功能的 Token,規(guī)劃調(diào)用不同專家模型,讓大模型更聰明分配算力、協(xié)同專家能力,最終實(shí)現(xiàn) “又快又準(zhǔn)又省資源” 的推理。
從整體看,MoE 在 LLM 模型的什么位置呢?如下圖:
參考 https://github.com/jingyaogong/minimind?tab=readme-ov-file
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。