LLM 推理完整教程:KV Cache 与 DeepSeek V4 的缓存革命

鏈新聞abmedia

当你在 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。

免责声明:本页面信息可能来自第三方,不代表 Gate 的观点或意见。页面显示的内容仅供参考,不构成任何财务、投资或法律建议。Gate 对信息的准确性、完整性不作保证,对因使用本信息而产生的任何损失不承担责任。虚拟资产投资属高风险行为,价格波动剧烈,您可能损失全部投资本金。请充分了解相关风险,并根据自身财务状况和风险承受能力谨慎决策。具体内容详见声明
评论
0/400
暂无评论