LLM-Inferenz umfassende Anleitung: KV-Cache und die Cache-Revolution von DeepSeek V4

ChainNewsAbmedia

當 du 在 ChatGPT、Claude 或 DeepSeek 輸入一段話、模型在幾百毫秒內就開始一個字一個字回覆——這個過程感覺很簡單、實際上是現代運算中最精細的工程之一。本文整理 AI 工程師 Akshay Pachaar 的完整推論流程解析、從 tokenization、embedding、attention、到 prefill/decode 兩階段、KV cache、量化、與 DeepSeek V4 為何把快取體積砍到原本 10%。

核心心智模型:LLM 只是「猜下一個 token」、然後反覆做

大型語言模型本質上只做一件事:預測下一個 token。它接收你輸入的 token 序列、計算下一個 token 的機率分布、抽樣產生一個 token、把該 token 接到輸入末尾、再預測下一個——不停重複、直到模型輸出停止符或達到上限。

整個推論流程的關鍵問題不是「它怎麼預測」、而是「為什麼第二個 token 比第一個快很多?」這個答案、會牽出現代 LLM 服務最重要的兩個概念:prefill 與 decode 兩階段、以及 KV cache。

Step 1:Tokenization 把文字變數字

神經網路不讀文字、只讀向量。所以你的提示詞首先會經過 tokenization、被切成一塊一塊的「token」、每個 token 對應一個整數 ID。現代 LLM 多數採用 BPE(Byte Pair Encoding、位元對編碼):從原始字元出發、把最常一起出現的字元對逐次合併、最後得到約 5 萬個常用 token 的詞彙表。

這一步的影響比多數人想像得大。在 tokenizer 訓練資料中比重低的語言、會被切成更多 token、推論成本就上升、速度就變慢。中文、繁體中文在許多英文導向的 tokenizer 中、每個字常被拆成 2 至 3 個 token、這是中文使用者推論成本偏高的根本原因之一。

Step 2:Embedding 把整數變向量、再注入位置資訊

每個 token 的整數 ID 會去查一張巨大的「embedding 表」。如果模型詞彙是 50K、隱藏維度是 4096、這張表的形狀就是 [50000, 4096]。每個 token 取出一行向量、就是它的 4096 維表徵。

這些向量不是隨機的——訓練時模型會把語意相近的 token 推到同一片空間區域、king 和 queen 在某個方向相鄰、python(語言)和 javascript 在另一個方向相鄰、python 和 snake(蟒蛇)又在第三個方向相鄰。

位置資訊也在這一步被注入、因為 attention 機制本身不知道哪個 token 在前哪個在後。當前主流模型多採用 RoPE(Rotary Position Embedding、旋轉位置編碼)、依 token 位置旋轉向量、把順序資訊隱含在向量本身。

Step 3:Self-Attention 是 Transformer 的核心

向量序列接著進入 32 層(或更多)transformer 層、每層做兩件事:用 self-attention 在 token 之間混合資訊、再用 feed-forward 在每個 token 內部混合資訊。

Self-attention 的運作是:每個 token 透過三個學習得到的權重矩陣 Wq、Wk、Wv、產生 query(查詢)、key(鍵)、value(值)三個向量。每個 token 用自己的 query 對其他所有 token 的 key 做內積、得到「該 token 應從別的 token 拉多少資訊進來」的權重、再以此加權混合 value。

這就是 attention 的魔法:每個 token 自行決定要看上下文中的哪幾個位置、把有用的資訊拉進自己的向量。32 層疊起來、模型就能跨越上千 token 追蹤指涉。Attention 後接的 feed-forward 網路、則承擔模型大部分的「知識」、attention 負責搬運資訊、feed-forward 負責處理資訊。

Prefill 與 Decode:同個 GPU、兩種完全不同的瓶頸

這是本篇最關鍵的分界。生成一段 200 字的回覆、實際上是兩個性質完全不同的任務、跑在同一張 GPU 上。

Prefill 階段——當你送出提示詞、模型必須先把所有輸入 token 跑過一次、才能生成第一個 token。這一步可以「並行」處理所有輸入 token:每個 token 的 Q、K、V 同時計算、attention 是大型矩陣對矩陣乘法。GPU 為這種運算而生、運算單元(Tensor Cores)滿載、瓶頸在「算力」。這個階段的延遲指標叫 TTFT(Time to First Token、首字延遲)。

Decode 階段——第一個 token 出來後、模型切換模式。產生第 51 個 token 時、它只需要計算這個新 token 的 Q、K、V、過去 50 個 token 的 K、V 都已算過、不必重來。問題是:每個 token 計算量很小、但 GPU 仍要從顯存把整個模型權重與整段 KV 歷史載入、做一次微小運算、再丟回去。瓶頸從「算力」翻轉到「記憶體頻寬」。這個階段的延遲指標叫 ITL(Inter-Token Latency、token 間延遲)、它決定了模型「打字」感受快不快。

所以 prefill 是 compute-bound、decode 是 memory-bound——同樣的模型、同樣的硬體、卻有完全不同的效能特性。

KV Cache:讓 LLM 推論可行的關鍵優化

Decode 階段「不重算過去 token 的 K、V」、靠的就是 KV cache。每個 transformer 層維護兩個張量、分別存所有歷史 token 的 K 與 V、新 token 算出 K、V 後就 append 進去、attention 時直接讀整段歷史。

沒有 KV cache、生成 1,000 個 token 的回覆每一步都要重算整個成長中的序列、複雜度二次方爆炸。有了 KV cache、長生成可以加速 5 倍以上。但代價是:cache 住在 GPU 顯存裡、每多生成一個 token、cache 就增大一份。13B 規模的模型、每個 token 約佔 1MB;4K 上下文就燒掉 4GB 顯存、單純存放這個 cache。

這就是「長上下文很慢、很貴」的真正原因——不是模型「想」不過來、而是 cache 把顯存吃光、單張 GPU 能服務的同時用戶數隨之大跌。常見的優化手段包括:把 cache 量化成 INT8 或 INT4、用 sliding window 丟掉太舊的 token、用 grouped-query attention(GQA)讓多個 attention head 共用 K、V、或像 vLLM 採用的 PagedAttention 把 cache 分頁管理(類似作業系統管理記憶體)。

DeepSeek V4 的快取革命:1M context 下砍到原本 10%

量化和分頁把 KV cache 當成「固定成本」優化。DeepSeek 2025 年底預覽的 V4 系列走更激進的路線:直接重新設計 attention、讓 cache 從一開始就很小。

V4 採用混合機制、結合稀疏與密集兩種壓縮 attention 變體、兩者都在高度壓縮過的 KV 流上運作。在百萬 token 上下文下、V4-Pro 報告 KV cache 體積僅前代的約 10%、每 token 計算量僅約 27%。意義不只是「DeepSeek 又便宜了」、而是 KV cache 已成為整個 LLM 領域被優化的瓶頸——當 attention 機制本身被重新設計來縮小 cache、代表整個技術社群的「限制條件」已徹底位移。

對台灣讀者更實用的訊息是:DeepSeek V4-Flash 已上 Ollama Cloud 與美國主機(參見 abmedia 4/24 報導)、Claude Code、OpenClaw 已可一鍵串接、不必自架就能驗證新一代 attention 在長上下文場景的優勢。

Quantization:用精度換速度與顯存

訓練需要高精度、推論不需要。多數正式部署改用 FP16 或 BF16 取代 FP32、立即把顯存與 throughput 加倍。更激進的做法把權重量化為 INT8、甚至 INT4。

數字直觀:7B 參數模型在 FP32 下需 28GB、FP16 下 14GB、INT8 下 7GB、INT4 下僅 3,5GB。這就是為什麼一般筆電顯卡也能跑 7B 模型。GPTQ 與 AWQ 等方法會挑選每個通道的縮放係數、讓有損壓縮造成的品質損失最小化——設計得好的 INT4、在多數標竿上的表現只比原版差 1 個百分點以內。

把所有步驟串起來:一段提示詞的完整旅程

把上面所有環節串起來、一次推論的完整路徑是:(1)Tokenize——文字變整數 ID。(2)Embed——ID 變向量、注入位置資訊。(3)Prefill——所有層對所有輸入 token 並行運算、屬於 compute-bound、KV cache 被建立、第一個輸出 token 生成。(4)Decode loop——每次只投影新 token 的 Q、對 cache 中的 K、V 做 attention、跑 feed-forward、抽樣輸出、把新 K、V 寫回 cache、屬於 memory-bound。(5)Detokenize——token ID 轉回字元、串流輸出到螢幕。

vLLM、TensorRT-LLM、Text Generation Inference 等服務框架在這個迴圈外加上連續批次(不同用戶的 token 可在同一個 GPU step 中交錯)、speculative decoding(小模型先打草稿、大模型驗證)、與精細的記憶體管理——這就是單張 GPU 服務數十用戶的方法。

給開發者的實務 takeaway:你該關心 TTFT 還是 ITL?

當推論流程的全貌清楚、幾個實務判斷會自然浮現:

長提示詞會放大 TTFT、長輸出會放大 ITL——它們壓力來源不同、別把優化資源放在錯的指標上。Context 不是免費的、上下文加倍不只翻倍計算、還會壓縮 KV cache 可容納的批次大小。量化是當前最高槓桿的旋鈕、FP16 換到 INT8 經常能砍掉一半延遲、品質損失極小。GPU 使用率(utilization)也常是誤導指標——prefill 階段把 GPU 拉滿、decode 階段可能只用 30%、解法不是更多算力、而是更快的記憶體或更小的 cache。

Transformer 架構吸引最多目光、但推論效能其實活在「無聊的細節」裡:記憶體配置、cache 管理、位元寬度。當有人說「這個模型很慢」、下一個問題該問的不是「換 GPU」、而是「慢在『開始』還是『串流』?」——答案決定整個優化路徑。

這篇文章 LLM 推論完整教學:KV cache 與 DeepSeek V4 的快取革命 最早出現於 鏈新聞 ABMedia。

Disclaimer: The information on this page may come from third parties and does not represent the views or opinions of Gate. The content displayed on this page is for reference only and does not constitute any financial, investment, or legal advice. Gate does not guarantee the accuracy or completeness of the information and shall not be liable for any losses arising from the use of this information. Virtual asset investments carry high risks and are subject to significant price volatility. You may lose all of your invested principal. Please fully understand the relevant risks and make prudent decisions based on your own financial situation and risk tolerance. For details, please refer to Disclaimer.
Kommentieren
0/400
Keine Kommentare