1. 学到这里,系统能力才是真正的分水岭
如果你一路跟着这个系列学下来,能坚持到第14期这个位置,说明你已经不是刚碰LLM大模型的新手了。前面那些期我们花了大量篇幅把Transformer原理、训练策略、微调方法、RAG、Agent这些地基一块块垒起来,到了现在这个阶段,你会看到一个很现实的分野:模型本身已经不是稀缺品,稀缺的是把模型稳定、高效、可控地跑起来的系统能力。
2026年了,开源模型的整体水平已经很高,随便一个中等规模的团队都能拿到性能不错的底座模型。但同样是拿一个模型做产品,有的团队两周就能上线,日活稳定、成本可控;有的团队模型调得不错,一上生产就出状况:显存爆掉、延迟高得离谱、没人说得清线上效果到底怎么样。差别通常不在模型,而在系统。
这一期我就把“LLM大模型系统学习”这条线里最核心的部分串一遍:推理优化怎么做、服务化怎么落地、评测和监控怎么搭。不绕弯子,直接上思路和能照做的步骤。适合已经掌握模型基础、准备把大模型真正部署到业务里的同学参考,也适合那些模型训练没问题、一谈工程就抓瞎的读者对照着补课。
1.1 模型能力之外的隐性门槛
我接触过不少做应用落地的团队,大家普遍存在一个认知偏差:以为微调做好了,项目就成功了一大半。实际在交付阶段,推理性能、服务稳定性、可观测性这些东西才是真正吃时间的部分,而且它们有一个共同特点——不出问题的时候你完全感觉不到,一出问题就是连锁反应。
举一个真实的例子。某团队做了一个基于大模型的文档问答系统,单测效果不错,结果压测时发现并发一上去,新请求要等前面十几个请求全部跑完才能排上,用户体感就是“一直转圈”。排查到最后,问题出在推理服务的批处理策略上:他们的实现是每个请求进来就独占一块显存,结果显存迅速耗尽,后面的请求全部陷入长队列等待。这本质上不是模型问题,而是系统设计问题。
所以到学习后期,我强烈建议把重心从“改进模型”切换到“改进系统”。同一个模型,系统做得好和做得差,吞吐能差好几倍,单次调用成本能差一个数量级。
1.2 2026年的学习重心:从“会调模型”到“会做系统”
系统学习具体学什么?我的建议是四条线并行:
- 推理优化:搞懂模型在GPU上到底怎么跑的,瓶颈在算力还是带宽,用量化、KV Cache等手段把性能榨出来。
- 服务化:把模型包成稳定、可扩展的在线服务,动态批处理、流式输出、负载控制都要亲手做一遍。
- 评测与监控:建立一套能量化模型质量和系统性能的指标体系,让每次改动都有数据说话。
- 成本与容量规划:能根据业务量反推需要多少算力资源,算清楚单位请求成本。
这四条线对应一个大模型系统工程师日常工作的核心内容。这一期先把前三条讲透,成本规划会穿插在容量计算实例里一并说清楚。
2. 推理优化:先搞清楚瓶颈在哪
2.1 显存和带宽才是真正的天花板
很多人一说推理优化,第一反应是“换更好的显卡”“上多卡并行”。但如果你不清楚瓶颈在哪,加再多资源也只是肉包子打狗。大模型推理可以分成两个阶段:预填充阶段和解码阶段。
预填充阶段是用户把整段输入一次性交给模型,模型并行计算所有输入token的注意力,这个阶段基本是算力密集,GPU的计算单元能充分跑起来。解码阶段则完全不同:模型逐个生成输出token,每生成一个,都要把整个模型的权重从显存重新读一遍,这个阶段是典型的内存带宽密集——GPU的计算单元大部分时间在等数据,而不是在算。
有个非常粗略但好用的估算方法:解码阶段每生成一个token,需要读到的权重数据量约等于模型参数量乘以每个参数的字节数。一个70B参数量的模型,用FP16存储,每生成一个token就要读 70B × 2字节 = 140GB 的数据。一块主流数据中心GPU的显存带宽大约在2TB/s上下,算下来每秒最多生成十几个token——这是物理层面的天花板,跟用什么引擎、什么框架关系不大。
这个结论直接决定了优化方向:解码阶段你能做的核心事情只有两件——一是减少每次读取的数据量(也就是量化),二是让每一次读取同时服务更多请求(也就是批处理)。下面挨个说。
2.2 量化:性价比最高的第一刀
量化就是把模型权重从高精度降到低精度。FP16一个参数占2字节,INT8是1字节,INT4是0.5字节。还是那个70B模型,从FP16压到INT8,每生成一个token要读取的数据直接从140GB降到70GB,解码速度理论上直接翻倍,而且显存占用几乎减半。
当前社区主流的量化方案分两类:
- 训练后量化:训练好的模型直接转精度,不用重新训练。通常做法是拿一小部分校准数据,统计权重和激活值的分布,算出缩放因子。优点是快、成熟,适合绝大多数业务场景。
- 量化感知训练:在训练或微调阶段就模拟量化误差,让模型在低精度下学会补偿。效果更稳,但成本和门槛高,一般只在量化后质量掉点严重的场景才需要。
很多同学一上来就追求极致的4比特量化,结果模型输出质量明显下滑,再花大力气去调。这里给一条经过验证的经验:先上8比特,够用就不要再往低走。8比特量化对绝大多数任务的质量影响能控制得很小,性价比最高;4比特省的那点显存,往往不足以抵消质量损失。
量化之后必须做质量验证,别只看显存数字降了多少。我的习惯是准备200到500条覆盖业务主要场景的测试问题,量化前后各跑一遍,逐条对比回答质量。有明显变差就退回上一档,没明显差异再继续往下试。很多团队最后把模型定在8比特,不是因为4比特做不了,而是业务场景不值得冒那个险。
2.3 KV Cache优化与连续批处理
权重量化之外,第二个大头是KV Cache。模型生成每个token时,都要把前面所有token的K向量和V向量缓存下来,避免重复计算。它的显存占用随上下文长度线性增长,长文本场景里KV Cache占的显存甚至比模型权重还高。
优化分两个方向。
方向一:减少KV Cache本身的开销。比如对KV Cache再做一次低精度量化,或者改进注意力机制的计算方式来降低缓存量。这些属于进阶内容,建议先把本节基础打牢再去碰。
方向二:让已有的KV Cache被充分利用。这才是吞吐优化的大头。单个请求独占一块显存时,模型权重读取的时间远大于实际计算时间,GPU大部分时间是“忙等”状态。如果能把多个请求拼在一起,让它们共享同一次权重读取,吞吐就能成倍增长。连续批处理干的就是这件事:传统批处理必须等一批全部结束才能开下一批,连续批处理则允许新请求随时插入,把GPU的空闲窗口填满。
现在主流的推理服务框架基本都内置了连续批处理,不需要你自己造轮子。你需要做的是在部署时把相关配置打开,并根据业务并发量调好最大批大小、排队策略等参数。这里有个实操建议:压测时不要只盯着单请求延迟,要看吞吐和延迟的平衡点。逐步加大并发,观察每秒处理请求数和单请求延迟的变化,找到那个“再压就崩”的拐点,那才是合理的容量上限。
3. 服务化落地:从离线模型到在线服务
3.1 三层架构:别把所有逻辑塞进一个脚本
模型本身是离线资产,要变成产品能力,必须包一层服务。我的建议是三层分离:
- 推理层:核心引擎,负责加载权重、执行推理、管理显存。
- 调度层:接收请求、管理队列、做动态批处理、控制并发。
- 接入层:对外提供统一接口,处理鉴权、限流、超时、重试这些通用问题。
很多刚入门的同学喜欢把逻辑全部写在一个脚本里,“起一个HTTP服务,里面直接调模型”。短期demo可以,请求量一上来就四处着火:没有队列控制导致瞬间打爆显存、没有超时机制导致一个慢请求拖垮整体、没有限流导致某个用户把资源全占掉。三层分离是最简单有效的避坑架构。
选型时注意三点:推理引擎要支持你选定的量化格式和批处理策略;调度层要能配置最大并发数、队列长度、排队超时;接入层必须支持流式输出——大模型回答动不动几百字,不流式输出用户等不起。
3.2 容量规划:从业务数字反推硬件规模
这块是很多教程不讲、但实际项目最刚需的能力。直接上一个完整实例。
假设业务目标:日均10万次请求,大部分集中在2小时高峰时段,要求单请求平均延迟不超过3秒,支持流式输出。选定模型是7B参数量的开源模型,8比特量化后,实测单卡跑16并发时,单请求平均生成速度约每秒30个token,一次回答平均生成200个token。
第一步,算高峰每秒请求数。10万请求集中在7200秒内,平均值是 100000 ÷ 7200 ≈ 13.9 请求/秒。业务流量通常有潮汐,设个2倍高峰系数,峰值就是 13.9 × 2 ≈ 28 请求/秒。
第二步,算单请求处理时长。生成200个token,按30 tokens/s的生成速度,纯生成时间约6.7秒,加上排队和调度开销算7秒。
第三步,算容量。16并发、每个请求7秒,单处理单元每秒能抗约 16 ÷ 7 ≈ 2.3 个请求。要扛住28请求/秒,需要 28 ÷ 2.3 ≈ 12 个这样的处理单元。
这个推算过程本身就是系统学习的价值所在:你不仅要会调模型,还要能从业务数字反推出资源需求和单位成本。实际的数字务必用压测校准,但先按这个思路估算再验证,方向不会错。
3.3 服务化改造的几个关键细节
架构定了之后,几个细节直接决定系统稳不稳。
动态批处理窗口。调度层不会来一个请求就立刻丢给推理引擎,而是攒一个很短的时间窗(比如几十毫秒),把窗口内到达的请求合成一个批次再送进去。窗口太短,凑不出批量;太长,单请求延迟增大。这个参数没有万能默认值,要靠实测调。
排队超时与主动降级。排队时间过长的请求要果断返回繁忙提示,而不是让用户无限等下去。实践中比较有效的策略是:排队超过N秒直接拒绝,同时给出可重试提示。这比让用户干等几十秒体验好得多。
流式链路的逐段打点。流式输出时,每个token都要走推理层、调度层、接入层,链路稍长就会出现“首token很快、后续一卡一卡”的怪现象。排查思路是逐段加耗时统计,先分清是推理引擎输出本身变慢,还是中间传输、后端消费拖了节奏。我见过不少团队在这个问题上瞎猜半天,最后发现是接入层逐字转发时反复加锁导致的。
4. 评测与监控:没有度量就没有优化
4.1 离线评测:给每次改动上一道质检线
系统做完,怎么知道它好不好?靠直觉不行,靠人工抽几遍也不行。必须有一套可重复执行的离线评测机制。我的做法是维护三个测试集:
- 核心能力集:覆盖业务主要场景的几百条问题,每次模型、提示词或系统参数变更后全量跑一遍。
- 边界与攻击集:专门收集容易翻车的输入,比如诱导性提问、超长上下文、多轮历史很多的对话。
- 回归基线集:固定不变的一组标准问题,用于跨版本长期对比。
评测方式建议自动化打分加人工抽检结合。自动化打分目前最主流的是“大模型当裁判”——用另一个更强的模型给回答打分,从相关性、完整性、忠实度等维度评估。注意裁判模型也要选好,不同裁判的评分倾向不一样,定下来之后尽量别换,否则跨版本的分数没有可比性。
一条铁律:任何变更都要出对比报告,哪怕只是改了一个标点。我见过太多“改着改着模型效果悄悄变差、但没人发现”的案例,等发现问题时已经积累了一堆变更,根本定位不到是谁引入的。
4.2 线上监控:盯住四个核心指标
部署上线后,监控就是眼睛。我建议至少盯四类指标:
| 指标类别 | 核心指标 | 说明 |
|---|---|---|
| 性能 | 首token延迟 | 用户发出请求到收到第一个token的时间,直接决定体感 |
| 性能 | 平均生成速度 | tokens/s,反映解码阶段健康度 |
| 容量 | GPU利用率、显存占用 | 判断资源是否吃紧、批处理是否生效 |
| 质量 | 错误率、超时率、用户反馈 | 线上质量出问题时的第一信号 |
这里特别想强调首token延迟。很多团队只统计总耗时,完全忽略了首token延迟。流式输出场景里,用户最快感知的是第一个字什么时候出来。首token高,多半是排队等待过久,说明容量规划不足;首token快而整体慢,则是生成速度问题。两者的整改方向完全不同,别混在一起。
4.3 提示词与模型的版本管理
大模型应用迭代快,提示词今天改一句、明天换一段,模型过两周又升一版。没有版本管理,线上出了质量问题,你根本定位不了是哪个环节引入的。
推荐做法:提示词当代码管理,每次修改记录人和改动内容;模型文件、量化配置、服务参数打包成一个可复现的部署清单,记清楚“什么时间换了什么版本、配套评测结果如何、谁负责发布的”。这样每次发版都有据可查,出问题能快速回滚。这套东西前期不起眼,真出事的时候能救命。
5. 生产环境避坑记录:踩过的那些问题
5.1 常见问题速查表
| 现象 | 可能原因 | 排查方向 | 解决方案 |
|---|---|---|---|
| 显存溢出(OOM) | 并发设置过高、批处理窗口过大 | 看显存监控、看当前最大批大小 | 降最大并发、开KV Cache量化 |
| 响应越来越慢 | 长时运行后显存碎片化 | 观察显存占用趋势曲线 | 设置定期重启或碎片整理策略 |
| 首token延迟高 | 请求排队太长 | 看队列长度与平均等待时间 | 扩容、缩短批处理窗口、加限流 |
| 输出质量突然下降 | 模型换版 / 提示词改动 / 上下文污染 | 对比最近一次版本变更 | 回滚版本、查变更记录 |
| 流式输出卡顿 | 接入层逐字处理过慢 | 分段耗时统计 | 优化中间链路、批量增量转发 |
5.2 两个典型案例复盘
案例一:量化后模型“变笨了”。某团队做客服问答,为省显存把模型压到4比特,结果回答开始出现明显的信息遗漏。复盘发现两个原因:一是校准数据选得太窄,只用了短问题,没覆盖长文档场景;二是客服问答有大量数字、金额、条款细节,这类强事实任务对量化误差格外敏感。最终方案退回8比特,并扩充了校准数据,质量恢复,显存代价也在可接受范围。结论:量化方案必须绑定业务场景,不能只盯着显存数字。
案例二:并发上去后延迟非线性飙升。压测时并发从8加到16,吞吐没怎么涨,延迟却翻了近三倍。排查发现所有请求堆在同一个队列里,批处理窗口设置过长,大量请求时间都耗在排队上。调整方案是缩短批处理窗口、给队列长度加监控告警,问题明显缓解。结论:参数调优要靠压测数据说话,别照搬框架默认值。
5.3 排查方法论:从现象到根因的四步套路
最后分享一套我一直在用的排查思路,遇到故障别慌,按顺序来:
- 先定性:是性能问题还是质量问题?延迟高、显存爆、吞吐低属于性能类;回答错、答非所问属于质量类。两条路线的排查手段完全不同。
- 再分段:把链路切成接入层、调度层、推理层三段,逐段加耗时统计,先定位瓶颈在哪一段。
- 后对照:出问题之前做过什么变更?模型、提示词、配置、数据,哪一项动过就从哪一项开始查。
- 最后验证:定位到根因后,用最小化方式复现验证——单独跑一个请求、临时关掉某个功能、回滚某一项配置,确认问题真的解决。
这套方法看着朴素,但真按它走能省大量时间。很多同学遇到问题习惯“猜一个原因、改一下试试”,连续改了好几处都无效,最后发现是初始方向就错了,白白搭进去好几天。
我个人的体会是,大模型系统这条路最忌讳贪多求快。先把最简单的完整链路跑通,让监控日志齐了,再一项项做优化。每一轮改动都留下对比数据,比任何骚操作都管用。这一期讲的推理优化、服务化落地、评测监控和排查方法,每一步都是我在真实项目里反复验证过的,你照着做一遍再结合自己的业务调整,能少踩不少坑。