一次 LLM 推理的完整旅程:从你按下回车到最后一个字吐出
一次 LLM 推理的完整旅程从你按下回车到最后一个字吐出你给大模型发了一段 2000 token 的 prompt它回复了 500 token。这中间服务端到底发生了什么为什么第一个字要等一会儿后面却像打字机一样往外蹦为什么输出 token 比输入 token 贵好几倍为什么缓存命中的输入又便宜一个数量级这些问题的答案全部藏在推理过程的两个阶段里Prefill和Decode。理解了这两个阶段的本质区别API 计费规则、延迟表现、各种推理优化技术就全部通了。一、总览一次推理的四个步骤假设你发送了一段 2000 token 的 prompt模型回复 500 token。服务端实际发生的事情可以分成四步Tokenize分词文本切成 token 序列转成 ID 数组Prefill预填充并行处理全部输入 token生成 KV Cache 和第一个输出 tokenDecode解码自回归循环一次一个 token吐出剩下的 499 个终止与释放碰到停止符或达到max_tokens结束并释放资源。其中 Prefill 和 Decode 是两种性质截然不同的负载——一个吃算力一个吃内存带宽。下面逐个展开。二、Tokenize文本变数字模型不认识文字只认识数字。Tokenizer 把你的文本按词表切成 token 序列再映射成整数 ID 数组今天天气不错 → [今天, 天气, 不, 错] → [45012, 8823, 191, 7756]英文大约 4 个字符对应 1 个 token中文大约 1~2 个汉字对应 1 个 token取决于词表。这一步是纯 CPU 上的字符串处理耗时通常在毫秒级开销可以忽略。但它决定了后面所有环节的计量单位——你账单上的每一分钱、上下文窗口的每一格容量都是按 token 数的。三、Prefill并行吞下整个 prompt算力受限模型对这 2000 个输入 token 做一次并行的前向计算。关键在于输入是已知的。第 1500 个 token 是什么不需要等第 1499 个算完才知道——它们本来就在你的 prompt 里。因此这 2000 个 token 可以同时通过整个网络Transformer 每一层的注意力和 MLP 都是大规模矩阵乘法GPU 的算力单元被吃得很满。这个阶段是**算力受限compute-bound**的瓶颈在于 GPU 每秒能做多少次浮点运算而不是数据搬运。Prefill 产出两样东西KV Cache全部 2000 个输入 token 在每一层注意力中的 Key/Value 向量被写入显存缓存。这是后续 Decode 阶段的记忆——没有它每生成一个新 token 都要把整个上下文重算一遍KV Cache 的详细原理可以单独展开成一篇这里只需要知道它把重复计算换成了显存占用。第一个输出 token最后一个输入 token 位置上的概率分布采样出第一个回复 token。你感受到的首字延迟TTFT, Time To First Token基本就是 prefill 的耗时。prompt 越长prefill 要算的矩阵越大首字越慢——这就是为什么塞了几万 token 上下文的请求第一个字要等好几秒。四、Decode一次一个 token 的自回归循环带宽受限从第二个输出 token 开始进入完全不同的模式。每一步循环只做一件事处理一个token——读取全部模型权重 已积累的 KV Cache做一次前向计算对最后一层输出的概率分布采样出下一个 token把这个新 token 的 K/V 追加进 Cache进入下一步。循环 500 次就是你看到的 500 个字逐个蹦出来的打字机效果。为什么 Decode 慢——GPU 在等数据这个阶段每步的计算量极小只有一个 token 的矩阵乘但每步都要把全部模型权重从显存搬到计算单元。算一笔账就明白了一个 70B 参数模型FP16 精度下权重约140 GB一张 A100 的显存带宽约2 TB/s每生成一个 token 至少要完整读一遍权重140 GB ÷ 2 TB/s ≈70 ms/token也就是说单条请求不做任何优化理论上限只有14 token/s左右——而此时 GPU 的算力单元利用率可能不到 1%。这就是内存带宽受限memory-bound瓶颈不是算得不够快而是数据喂不过来GPU 大部分时间在等权重从显存搬运过来。这也解释了为什么推理芯片的竞争核心指标是显存带宽HBM以及为什么权重量化INT8/INT4能直接提升 decode 速度——权重体积减半搬运时间就减半。采样概率分布如何变成具体的字前向计算的输出不是一个 token而是整个词表上的概率分布。怎么从分布里挑出下一个字由采样参数控制temperature温度越低分布越尖锐趋向确定性输出越高越随机top-p / top-k:只在概率最高的候选集合里采样砍掉长尾greedytemperature0永远取概率最高的那个。这就是为什么同一个 prompt 每次回答不完全一样——decode 的每一步都在掷骰子。五、终止与释放Decode 循环在两种情况下结束采样到停止符EOS token或你指定的 stop sequence——模型自己说完了达到max_tokens上限——被强行截断这就是回答说到一半戛然而止的原因。结束后这个请求占用的 KV Cache 被释放显存归还给调度器分配给其他请求。或者——按缓存策略保留一段时间如果几秒后同一个对话又来了下一轮前缀的 KV Cache 还在就能跳过大部分 prefill。这就是Prefix Caching前缀缓存的原理也是 API 厂商prompt caching 命中的输入 token 便宜 10 倍的技术来源命中的部分根本不用重新计算只是从显存/内存里读出来。六、生产环境的真相Continuous Batching以上是单条请求的视角。真实的推理服务上一张 GPU 同时挂着几十上百个请求各自处于完全不同的阶段有的刚进来在 prefill有的在 decode 第 300 步有的马上要结束。老式的做法是静态批处理凑一批请求一起跑全部生成完才接下一批。问题很明显——批里有人生成 50 个 token 就完了有人要生成 2000 个先完成的只能干等着GPU 利用率被最慢的请求拖垮。现代推理引擎vLLM、TensorRT-LLM、SGLang 等用的是Continuous Batching连续批处理调度以步为粒度——每一步动态决定这一批算谁。谁生成完谁立刻退出、腾出位置新请求随时插入prefill 和 decode 的请求可以拼在同一批里跑。这样把 decode 阶段每步都要搬全部权重的固定成本摊到几十个请求头上反正权重都要读一遍多算几十个 token 几乎不增加时间。批处理是 decode 吞吐的第一杠杆。配套的关键技术还有PagedAttentionKV Cache 像操作系统内存分页一样管理按小块分配而不是预留整段连续显存消灭碎片同一张卡能塞下多好几倍的并发请求vLLM 的成名作Chunked Prefill把一个超长 prompt 的 prefill 切成小块和其他请求的 decode 步交错执行避免一个大 prefill 把整张卡霸占几百毫秒、让所有正在 decode 的用户卡顿Prefill/Decode 分离部署更激进的架构——既然两种负载性质完全不同干脆用两组机器分别跑 prefill 和 decodeKV Cache 通过高速互联传输各自按最优配置调度。七、更快的 Decode投机解码与注意力变体除了批处理还有两类正交的优化在攻击 decode 的单步成本投机解码Speculative Decoding用一个小模型或模型自带的轻量预测头快速猜出后面 4~8 个 token再让大模型一次前向并行验证这串猜测。猜对了就一步等于多步猜错了从错的位置重来正确性完全无损数学上等价于大模型自己逐个生成。本质是把 decode 的串行搬运成本换成了一次类似 prefill 的并行验证——用便宜的算力换昂贵的带宽。注意力头共享MQA / GQA / MLA标准多头注意力里每个头都有独立的 K/VKV Cache 巨大。Multi-Query Attention 让所有头共享一组 K/VGrouped-Query Attention 折中分组共享Llama 系采用DeepSeek 的 MLA 则把 KV 压缩成低秩隐向量。KV Cache 小了每步搬运的数据少了能塞的并发也多了。八、关键结论计费规则的物理解释现在回到最初的问题。把两个阶段的性质放在一起看Prefill输入 tokenDecode输出 token计算方式全部 token 一次并行一次一个串行循环瓶颈算力compute-bound显存带宽memory-boundGPU 利用率高低靠 batching 拯救单 token 成本低高数倍用户感知首字延迟 TTFT逐字生成速度 TPOTPrefill 吞吐高、按 token 算便宜Decode 慢、每个 token 都要读一遍全模型单位成本高得多。于是 API 价格表上的一切都有了物理解释输出 token 比输入贵 3~5 倍——不是定价策略是 decode 的真实成本就是高缓存命中的输入再便宜一个数量级——命中前缀的 KV Cache 连 prefill 都省了几乎零计算长 prompt 首字慢——prefill 计算量随输入长度增长注意力部分还是平方增长长对话越聊越慢、越聊越贵——每轮都携带全部历史KV Cache 线性膨胀每一步 decode 要读的缓存也越来越大。对开发者的直接启示也是这四条的镜像能缓存的前缀system prompt、few-shot 例子、文档放在 prompt 开头且保持逐字节稳定让 prefix caching 命中能省的输出就省要 JSON 别要散文设置合理的 max_tokens对延迟敏感就用流式输出让用户在 TTFT 之后立刻开始阅读感知延迟骤降。一句话总结输入是批发输出是零售——记住这一点大模型推理的性能、成本和一切优化技术就都在同一张地图上了。

相关新闻

标准IO与系统调用的性能差异及优化策略

标准IO与系统调用的性能差异及优化策略

1. 理解标准IO与系统调用的本质差异第一次接触Linux系统编程时,我常常困惑于fread()和read()的区别。直到有次调试一个高并发日志服务,发现使用标准IO库的函数会出现奇怪的缓冲问题,才真正意识到这两者的本质差异。标准IO(stdio&a…

2026/7/27 2:26:51阅读更多 →
菲尔兹奖得主加入OpenAI:数学理论如何推动AI技术突破

菲尔兹奖得主加入OpenAI:数学理论如何推动AI技术突破

最近科技圈有个重磅消息:刚刚获得数学界最高荣誉菲尔兹奖的顶尖学者,在颁奖现场直接宣布加入OpenAI。这个消息一出,整个AI圈都炸了锅——这不仅仅是个人职业选择,更预示着AI研究正在迎来质的飞跃。1. 菲尔兹奖与AI研究的深度结合1…

2026/7/27 2:26:51阅读更多 →
七月评测体系建设复盘:从零到可重复评测流水线的搭建之路

七月评测体系建设复盘:从零到可重复评测流水线的搭建之路

七月评测体系建设复盘:从零到可重复评测流水线的搭建之路 一、评测不是跑分,是建立信任 一个模型上线前经过了"充分评测":MMLU 得分 72.3,C-Eval 得分 68.1,人工评估 10 个 case 全部通过。上线后第三个小时…

2026/7/27 2:24:50阅读更多 →
BM1684X芯片部署Qwen3-32B大模型实战指南

BM1684X芯片部署Qwen3-32B大模型实战指南

1. BM1684X算力盒子与Qwen3-Agent开发全景解读在边缘计算与AI大模型融合的浪潮中,算丰BM1684X芯片凭借其15TOPS(INT8)的本地算力,正在成为轻量化部署大语言模型的首选平台。最近我们团队基于这块芯片成功部署了Qwen3-32B模型&…

2026/7/27 4:01:05阅读更多 →
基于改进PSO优化SVM的电力负荷预测方法

基于改进PSO优化SVM的电力负荷预测方法

1. 项目概述电力负荷预测是电力系统运行和规划中的关键环节。传统的时间序列预测方法如ARIMA在处理非线性负荷数据时表现有限,而支持向量机(SVM)凭借其出色的非线性建模能力成为理想选择。但SVM的性能高度依赖参数选择,这正是粒子群优化(PSO)算法可以发挥…

2026/7/27 4:01:05阅读更多 →
计算机视觉与多媒体设计实战数据集解析

计算机视觉与多媒体设计实战数据集解析

1. 项目概述与核心价值这个多媒体数据集是我在指导毕业设计过程中积累的实战资源包,特别适合计算机视觉和数字媒体专业的学生进行算法训练和创意研究。包里包含4个MP4格式的体育赛事视频(篮球、足球各2场)和3组创意设计图片(动态海…

2026/7/27 4:01:05阅读更多 →
R3nzSkin:游戏个性化修改技术的开源学习典范

R3nzSkin:游戏个性化修改技术的开源学习典范

R3nzSkin:游戏个性化修改技术的开源学习典范 【免费下载链接】R3nzSkin Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin 在当今游戏开发与逆向工程领域,内存操作与实时修改技术始终是技术爱好者…

2026/7/27 4:01:05阅读更多 →
西门子S7-1214 PLC的PID控制与通信模板应用解析

西门子S7-1214 PLC的PID控制与通信模板应用解析

1. 西门子S7-1214 PLC的PID控制与通信模板应用全景解析在工业自动化领域,西门子S7-1200系列PLC凭借其出色的性价比和强大的功能,已成为中小型控制系统的首选。其中S7-1214型号作为该系列的明星产品,其内置的PID控制功能和灵活的通信模板配置&…

2026/7/27 4:01:05阅读更多 →
2026年AI论文降重工具实测与手改技巧

2026年AI论文降重工具实测与手改技巧

## 1. 项目背景与评测意义去年帮学弟改论文时发现个现象:现在高校对AI生成内容的检测严格到令人发指。某985院校直接给用ChatGPT写综述的学生记过处分,逼得学生们开始疯狂寻找各种"洗稿"工具。但市面上的论文降AI工具质量参差不齐,…

2026/7/27 3:59:05阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/27 1:14:34阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/27 1:14:52阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/27 1:14:56阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:24阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:24阅读更多 →
2007-2023年各市区县生态文明建设示范区DID

2007-2023年各市区县生态文明建设示范区DID

数据简介 自改革开放以来,我国依赖高投入、高资源消耗和高污染等传统发展模式实现了经济短期内的快速增长, 然而这也导致了严重的生态环境危机。因此,国家有力于推动企业高质量经济发展,协同生态保护的方针,从而从201…

2026/7/27 0:00:24阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/25 23:03:25阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/26 19:05:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/26 19:05:21阅读更多 →