当你在 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、位元对编码):从原始字符出发、把最常一起出现的字符对逐次合并、最后得到约 50 000 个常用 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。