LLM 課程文件
深入瞭解大語言模型的文字生成推理
並獲得增強的文件體驗
開始使用
深入瞭解大語言模型的文字生成推理
到目前為止,我們已經探討了 Transformer 架構在文字分類或摘要等一系列離散任務中的應用。然而,大語言模型最常用於文字生成,這正是本章將要探討的內容。
在本頁中,我們將探討大語言模型推理背後的核心概念,全面瞭解這些模型如何生成文字以及推理過程中涉及的關鍵元件。
理解基礎知識
讓我們從基礎開始。推理是指使用經過訓練的大語言模型,根據給定的輸入提示生成類似人類的文字。語言模型利用其從訓練中獲得的知識,一次生成一個詞。模型利用從數十億引數中學到的機率來預測和生成序列中的下一個詞元(token)。這種順序生成的方式使得大語言模型能夠產出連貫且與上下文相關的文字。
注意力的作用
注意力機制賦予了大語言模型理解上下文和生成連貫回答的能力。在預測下一個詞時,句子中的每個詞並非都具有同等的重要性——例如,在句子“法國的首都是……”中,“法國”和“首都”這兩個詞對於確定下一個詞應該是“巴黎”至關重要。這種專注於相關資訊的能力就是我們所說的注意力。

這種識別最相關詞語以預測下一個詞元的過程已被證明非常有效。儘管訓練大語言模型的基本原則——預測下一個詞元——自 BERT 和 GPT-2 以來基本保持一致,但在擴充套件神經網路和使注意力機制能夠處理越來越長的序列、同時降低成本方面,已經取得了顯著的進步。
簡而言之,注意力機制是大語言模型能夠生成既連貫又具有上下文感知能力的文字的關鍵。它將現代大語言模型與前幾代語言模型區分開來。
上下文長度和注意力廣度
既然我們理解了注意力,讓我們來探討一個大語言模型實際上能處理多少上下文。這就引出了上下文長度,或者說模型的“注意力廣度”。
上下文長度指的是大語言模型一次可以處理的最大詞元(單詞或單詞的一部分)數量。你可以把它想象成模型的工作記憶大小。
這些能力受到幾個實際因素的限制:
- 模型的架構和規模
- 可用的計算資源
- 輸入和期望輸出的複雜性
在理想情況下,我們可以向模型提供無限的上下文,但硬體限制和計算成本使得這不切實際。這就是為什麼不同的模型被設計成具有不同的上下文長度,以在能力和效率之間取得平衡。
上下文長度是模型在生成響應時一次可以考慮的最大詞元數量。
提示詞的藝術
當我們向大語言模型傳遞資訊時,我們構建輸入的方式旨在引導大語言模型的生成朝著期望的輸出方向發展。這被稱為提示詞工程 (prompting)。
理解大語言模型如何處理資訊有助於我們撰寫更好的提示詞。由於模型的主要任務是透過分析每個輸入詞元的重要性來預測下一個詞元,因此你輸入序列的措辭就變得至關重要。
精心設計的提示詞可以更容易地引導大語言模型的生成朝著期望的輸出方向發展。
兩階段推理過程
現在我們理解了基本元件,讓我們深入瞭解大語言模型實際上是如何生成文字的。這個過程可以分為兩個主要階段:預填充(prefill)和解碼(decode)。這兩個階段像流水線一樣協同工作,每個階段都在生成連貫文字中扮演著至關重要的角色。
預填充階段
預填充階段就像烹飪中的備菜階段——所有初始食材都在這裡處理並準備好。這個階段包括三個關鍵步驟:
- 分詞 (Tokenization):將輸入文字轉換為詞元(可以將其視為模型理解的基本構建塊)
- 嵌入轉換 (Embedding Conversion):將這些詞元轉換為能夠捕捉其含義的數值表示
- 初始處理 (Initial Processing):將這些嵌入輸入模型的神經網路,以建立對上下文的豐富理解
這個階段計算量很大,因為它需要一次性處理所有輸入詞元。可以把它想象成在開始寫回應之前,先閱讀並理解整個段落。
你可以在下面的互動式演示中體驗不同的分詞器:
解碼階段
預填充階段處理完輸入後,我們就進入解碼階段——這是實際文字生成發生的地方。模型一次生成一個詞元,這個過程我們稱之為自迴歸過程(其中每個新詞元都依賴於之前的所有詞元)。
解碼階段涉及幾個關鍵步驟,這些步驟對每個新詞元都會發生:
- 注意力計算 (Attention Computation):回顧之前的所有詞元以理解上下文
- 機率計算 (Probability Calculation):確定每個可能的下一個詞元的可能性
- 詞元選擇 (Token Selection):根據這些機率選擇下一個詞元
- 繼續檢查 (Continuation Check):決定是繼續生成還是停止
這個階段對記憶體要求很高,因為模型需要跟蹤所有先前生成的詞元及其關係。
取樣策略
現在我們瞭解了模型如何生成文字,接下來讓我們探討控制這個生成過程的各種方法。就像作家可能會選擇更具創造性或更精確的表達方式一樣,我們可以調整模型如何選擇詞元。
你可以在這個 Space 中與 SmolLM2 互動,親自體驗基本的解碼過程(請記住,它會一直解碼直到遇到 EOS 詞元,對於這個模型來說是 <|im_end|>)
理解詞元選擇:從機率到詞元選擇
當模型需要選擇下一個詞元時,它會從詞彙表中每個單詞的原始機率(稱為 logits)開始。但我們如何將這些機率轉化為實際的選擇呢?讓我們分解一下這個過程:
- 原始 Logits:可以將其視為模型對每個可能的下一個單詞的初始直覺
- 溫度控制 (Temperature Control):就像一個創造力調節旋鈕——較高的設定 (>1.0) 使選擇更隨機、更具創造性,較低的設定 (<1.0) 使選擇更集中、更具確定性
- Top-p (核) 取樣 (Top-p (Nucleus) Sampling):我們不考慮所有可能的單詞,只關注那些加起來達到我們選擇的機率閾值(例如,前 90%)的最可能的單詞
- Top-k 過濾 (Top-k Filtering):另一種方法,我們只考慮 k 個最可能的下一個單詞
管理重複:保持輸出新鮮
大語言模型的一個常見挑戰是它們傾向於重複自己——就像一個演講者不斷回到相同的話題。為了解決這個問題,我們使用兩種懲罰:
- 存在懲罰 (Presence Penalty):對任何出現過的詞元施加固定的懲罰,無論其出現頻率如何。這有助於防止模型重複使用相同的詞語。
- 頻率懲罰 (Frequency Penalty):一種可伸縮的懲罰,根據詞元的使用頻率增加。一個詞出現的次數越多,它再次被選擇的可能性就越小。
這些懲罰在詞元選擇過程的早期應用,在應用其他取樣策略之前調整原始機率。可以把它們看作是鼓勵模型探索新詞彙的溫和推動。
控制生成長度:設定邊界
就像一個好故事需要適當的節奏和長度一樣,我們需要方法來控制我們的大語言模型生成多少文字。這對於實際應用至關重要——無論是生成一條推文長度的回覆還是一篇完整的部落格文章。
我們可以通過幾種方式控制生成長度:
- 詞元限制 (Token Limits):設定最小和最大詞元數量
- 停止序列 (Stop Sequences):定義標誌著生成結束的特定模式
- 序列結束檢測 (End-of-Sequence Detection):讓模型自然地結束其響應
例如,如果我們想生成一個段落,我們可能會設定最大 100 個詞元,並使用“\n\n”作為停止序列。這確保我們的輸出保持專注且大小適合其目的。
集束搜尋:向前看以獲得更好的連貫性
雖然我們迄今討論的策略是逐個詞元做決策,但集束搜尋 (beam search) 採用了一種更全面的方法。它不是在每一步都確定一個選擇,而是同時探索多個可能的路徑——就像一個棋手提前思考幾步棋。
其工作原理如下:
- 在每一步,維護多個候選序列(通常為 5-10 個)
- 為每個候選序列計算下一個詞元的機率
- 只保留最有希望的序列和下一個詞元的組合
- 繼續這個過程,直到達到期望的長度或停止條件
- 選擇總體機率最高的序列
你可以在這裡直觀地探索集束搜尋
這種方法通常能生成更連貫、語法更正確的文字,儘管它比簡單的方法需要更多的計算資源。
實際挑戰與最佳化
在結束對大語言模型推理的探索時,讓我們看看在部署這些模型時會面臨的實際挑戰,以及如何衡量和最佳化它們的效能。
關鍵效能指標
在與大語言模型合作時,四個關鍵指標將影響你的實施決策:
- 首個詞元時間 (TTFT):多久能得到第一個響應?這對使用者體驗至關重要,主要受預填充階段影響。
- 每個輸出詞元時間 (TPOT):生成後續詞元的速度有多快?這決定了整體生成速度。
- 吞吐量 (Throughput):能同時處理多少個請求?這影響了擴充套件性和成本效益。
- 視訊記憶體使用量 (VRAM Usage):需要多少 GPU 視訊記憶體?這通常成為實際應用中的主要限制因素。
上下文長度的挑戰
大語言模型推理中最重大的挑戰之一是有效地管理上下文長度。更長的上下文提供了更多資訊,但也帶來了巨大的成本:
- 記憶體使用量:隨上下文長度呈二次方增長
- 處理速度:隨上下文長度線性下降
- 資源分配:需要仔細平衡視訊記憶體使用
像 Qwen2.5-1M 這樣的最新模型提供了令人印象深刻的 100 萬詞元上下文視窗,但這以顯著減慢推理時間為代價。關鍵是為你的具體用例找到合適的平衡點。
(例如,4K 詞元)
∝ 長度²
∝ 長度
KV 快取最佳化
為了應對這些挑戰,最強大的最佳化之一是 KV(鍵值)快取。這項技術透過儲存和重用中間計算結果,顯著提高了推理速度。這種最佳化:
- 減少重複計算
- 提高生成速度
- 使長上下文生成變得可行
代價是額外的記憶體使用,但效能優勢通常遠大於此成本。
結論
理解大語言模型推理對於有效部署和最佳化這些強大的模型至關重要。我們已經涵蓋了關鍵組成部分:
- 注意力和上下文的基礎作用
- 兩階段推理過程
- 控制生成的各種取樣策略
- 實際挑戰與最佳化
透過掌握這些概念,你將能更好地構建有效且高效地利用大語言模型的應用程式。
請記住,大語言模型推理領域正在迅速發展,新的技術和最佳化方法層出不窮。保持好奇心,不斷嘗試不同的方法,以找到最適合你特定用例的方案。
< > 在 GitHub 上更新