在 AI 推理性能有关的讨论里,“下一代模型将快 100 倍”是一句传播度很高、也最容易产生歧义的判断。公开表达过类似观点的人包括 Stability AI 创始人 Emad Mostaque,他长期强调开源模型、高效推理和更激进的技术路线。不过,这类判断真正值钱的不是口号本身,而是它背后的工程路线能不能落地。不同人听到“快 100 倍”时,心里想的可能是首字延迟从 3 秒变成 0.03 秒,可能是同样一台 GPU 上服务并发数翻 100 倍,也可能是每百万 token 的成本下降 100 倍。这三条路径依赖的技术栈并不相同。
这篇文章不替任何观点站台,而是把它当做一个可拆解的工程问题处理:如果下一代模型真的要快 100 倍,模型结构、权重精度、解码方式、服务引擎和硬件环境分别需要发生什么;作为开发者,如何判断自己的任务能不能吃到这种红利;以及在做性能验证时,哪些错误最容易让结论失真。文章会从指标定义、模型层优化、推理引擎、硬件带宽、组合路线、测量方法和后续行动展开,适合部署过大模型推理服务、正在做技术选型,或者准备进入大模型应用开发的人阅读。
1. 先厘清“快 100 倍”指的是哪个指标
1.1 端到端延迟、单 token 速度和服务吞吐是三个指标
“快 100 倍”这句话如果不在指标层面统一,讨论就没有任何意义。一个在线对话系统里至少能拆出三个性能指标,它们受不同瓶颈制约,优化手段也不一样。
TTFT(Time To First Token)是指从客户端发出请求到收到第一个 token 的时间。它主要由预填充阶段决定,预填充要处理整个输入 prompt,是典型的计算密集型过程。输入越长,TTFT 越高。
TPOT(Time Per Output Token)是指生成每个输出 token 的平均耗时。它对应人们感知的“打字速度”,主要由解码阶段决定。解码阶段每个 token 都要读取模型全部权重,是典型的显存带宽密集型过程。
吞吐量(Throughput)通常指单位时间内生成的 token 总数,或者单位时间完成的请求数。它决定一台 GPU 能支撑多少并发,直接影响服务成本和容量规划。
| 指标 | 含义 | 用户感受 | 主要瓶颈 |
|---|---|---|---|
| TTFT | 从发出请求到收到第一个 token | 首字延迟 | 预填充与模型参数量 |
| TPOT | 生成每个输出 token 的平均耗时 | 逐字速度 | 显存带宽与解码方式 |
| E2E 延迟 | 首字到最后完成的整体耗时 | 总等待时间 | TTFT 加上 TPOT 乘以输出长度 |
| 吞吐量 | 每秒生成的 token 数或请求数 | 服务容量 | 批处理、显存、调度策略 |
通常“快 100 倍”在不同语境下指向不同指标。如果是指模型本身的计算效率,更多说的是同样质量下每个 token 所需算力大幅下降;如果是指用户体验,必须说明 TTFT 下降多少、TPOT 下降多少;如果是指成本,还要加上硬件、功耗和服务利用率。指标不统一,后面的对比、踩坑和优化都无从谈起。
1.2 当前模型慢在哪一层:预填充、解码和显存搬运
要理解下一代模型为什么可能更快,先要知道现在慢在哪里。
Transformer 架构下,请求处理分为两个阶段。预填充阶段把整个输入 prompt 一次性送入模型,计算量正比于输入长度和模型参数规模,属于计算密集。解码阶段一次只生成一个 token,生成第 N 个 token 时,模型中所有层的权重都要被读取一遍。虽然单次计算量不大,但因为权重读取是串行的,速度会被显存带宽卡住。
还有一个被低估的因素是注意力机制的复杂度。标准自注意力的计算量随序列长度平方增长,上下文越长,预填充越慢,KV Cache 占用越大。KV Cache 是解码阶段为每个请求保存的中间键值对,它随着并发数和上下文长度线性增长,最终成了显存占用的大头。
所以当前推理慢,不是单一原因,而是四层因素叠加:模型结构决定了计算复杂度,权重精度决定了每轮要搬运多少字节,自回归解码决定了必须串行生成多少步,推理引擎决定了 GPU 利用率能到多少。下一代模型要变快,这四层都要动。
1.3 一个可量化的分解思路
把“快 100 倍”拆成倍数叠加,比整句讨论更容易判断可行性。下面这段代码说明了组合优化的思路,数字只用于演示叠加逻辑,不代表任何厂商承诺。
base = 20.0 # 基线:常见 7B FP16 模型单卡解码吞吐,约 20 tokens/s factors = { "INT4 量化": 1.9, "投机解码": 2.2, "推理框架优化": 2.5, "下一代硬件": 1.8, } current = base for name, factor in factors.items(): current *= factor print(f"{name}: x{factor:.1f} -> {current:.1f} tokens/s")这个示例中,四个两倍左右的优化叠起来大概只有 19 倍,离 100 倍还差很远。要凑到 100 倍,必须出现一个数量级级别的变化,比如新的模型架构本身把推理步数或计算量降一个数量级,再叠加量化和推理引擎优化。因此“快 100 倍”在工程上更像一个组合命题:10 倍的架构级变化,乘以 2 倍的精度优化,乘以 2 倍的解码优化,乘以 2.5 倍的服务化优化,最后才接近 100 倍。
这一点很重要:任何单一技术都不太可能独立带来 100 倍。判断时应该先问问题出在哪一层,再决定投资哪一层。
2. 模型层加速:架构、压缩与蒸馏决定上限
2.1 Attention 的复杂度问题与线性序列模型
标准 Transformer 使用自注意力机制计算任意两个 token 之间的关系,计算量和显存占用都会随序列长度平方增长。短文本看不出来,到了 32K、128K 上下文,预填充时间和 KV Cache 占用会迅速失控。
针对这个问题出现了两类改进方向。一类是做稀疏注意力和局部注意力,只让每个 token 关注附近窗口和少数全局位置,典型代表是滑动窗口注意力。另一类是引入状态空间模型,如 Mamba 及其变体,用固定大小的隐状态替代随序列增长的注意力矩阵,把复杂度从平方降到线性。
需要注意的是,新架构不是全面取代注意力。工程上更常见的是混合结构:大部分层用高效结构,少数层保留注意力,用于完成信息检索和长距离依赖任务。实际效果因任务而异,不能因为论文指标好就直接迁移到生产环境。
容易误解的地方在于:复杂度降低不等于实测延迟一定降低。很多线性结构在短序列下反而因为算子不成熟而更慢,只有在长上下文或超大吞吐场景下才体现优势。迁移前必须用自己业务的输入长度做实测。
2.2 量化:减少搬运字节数是最直接的提速
解码阶段每个 token 都要把整个模型权重从显存搬到计算单元,因此权重占用的字节数直接决定理论最低耗时。
FP16 每个参数占 2 字节,INT8 占 1 字节,INT4 占 0.5 字节。如果把 7B 模型从 FP16 换成 INT4,权重从约 14GB 降到约 3.5GB,单次搬运量减少 75%。在显存带宽不变的情况下,解码速度理论上可以提升接近 4 倍。
| 精度 | 每参数字节数 | 7B 模型权重约占用 | 典型质量影响 |
|---|---|---|---|
| FP16 / BF16 | 2 | 14GB | 基准 |
| INT8 | 1 | 7GB | 通常很小 |
| INT4 | 0.5 | 3.5GB | 部分任务有可感知退化 |
量化不是免费的。INT4 会带来精度损失,尤其在代码、数学、多步推理这类对数值敏感的任务上。实际工程中常用的方案包括 GPTQ、AWQ 等训练后量化方法,以及 FP8 这种在训练和推理之间折中的格式。选择量化位宽时,不能只看显存和速度,还要拿评测集对比量化前后的输出质量。
2.3 蒸馏与小模型替代:不是所有任务都需要大参数
大模型能力强,但很大一部分线上任务用不到这种强能力。信息抽取、关键词分类、简单 JSON 格式化、情绪判断这类任务,用 1.5B 或 3B 的小模型经过蒸馏后,可能达到接近 7B 甚至更大模型的效果,速度和成本却低一个量级。
知识蒸馏是把大模型作为教师,让千亿或数十亿参数的教师模型生成高质量数据和打分,再用这些数据训练小模型。小模型的参数量小,解码时搬运的字节少,自然更快。
这里的工程判断是:不要用“最大模型”作为默认选项,而要用评测集验证任务的关键能力指标,比如字段准确率、格式正确率、拒绝误判率。很多团队上线时发现,瓶颈不在效果而在成本和延迟,而小模型加量化往往是最快见效的组合。
2.4 MoE 的收益边界:激活参数少不等于延迟低
混合专家模型把参数量拆成很多专家子网络,每个 token 只激活其中一部分专家。比如一个总参数量 70B 的 MoE 模型,每次只激活 7B 参数,理论算力需求大幅下降。
但 MoE 在大并发批量场景下优势明显,单请求低延迟场景则不一定是赢家。原因是模型总参数还是很大,虽然只激活部分专家,但所有专家权重都要加载到显存中,显存占用并没有缩减。路由计算和专家间通信也会带来额外开销。
所以判断 MoE 是否有优势,要看服务形态。如果线上请求量大、批处理充分,MoE 能显著提高 token 吞吐;如果模型部署在单卡边缘设备、一次只跑一个请求,参数总量和带宽仍然是瓶颈,MoE 收益有限。
3. 解码与推理引擎:把模型能力变成真实吞吐
3.1 自回归解码瓶颈与投机解码
大语言模型生成 token 时是自回归的:每个新 token 依赖前面所有 token,因此只能逐 token 生成,无法天然并行。这让解码阶段成为生成速度的主要瓶颈。
投机解码是当前最实用的破解思路。它用一个小而快的草稿模型先一次性预测接下来 K 个 token,再用目标大模型并行验证这 K 个 token。如果草稿模型预测得准,一次验证就能接受多个 token,等于把串行步骤压缩成了并行批处理。某些场景下可以带来 2 到 3 倍实测加速,具体取决于草稿模型与目标模型的分布接近程度。
还有一种做法是在目标模型上增加多个解码头,一次性预测多个未来 token,再统一验证,思路类似。工程上,vLLM、TensorRT-LLM 等框架已经把这些能力封装成配置项,关键是理解加速是有条件的:草稿模型质量差、batch 大小不合适时,加速可能变成减速。
3.2 KV Cache、PageAttention 与连续批处理
解码阶段需要保存每个 token 计算出的 Key 和 Value,也就是 KV Cache。并发越多、上下文越长,KV Cache 越大。传统批处理为了凑足一个 batch 会一直等更多请求进来,导致 GPU 空转;请求之间长短不一,处理完的请求留下的显存碎片又会浪费空间。
PageAttention 的核心思想是像操作系统管理内存页一样管理 KV Cache,把不连续的显存块组织成逻辑上的连续空间,减少碎片浪费。连续批处理则让 GPU 上始终有多个处于不同阶段的请求,一个请求生成完了就立即插入新请求,让显存和算力持续处于忙碌状态。
这两项技术是许多高性能推理框架的底座,也是实测吞吐量能比朴素实现高出数倍的主要原因。学习阶段,直接用 Hugging Face Transformers 的 generate 接口和用 vLLM 部署,前者的吞吐量通常远低于后者,区别主要就在这里的调度和显存管理。
3.3 主流推理框架的侧重点
| 框架 | 核心技术 | 适合场景 | 上手成本 |
|---|---|---|---|
| vLLM | PageAttention、连续批处理、OpenAI 兼容接口 | 高并发在线服务 | 低 |
| TensorRT-LLM | 内核融合、图优化、INT8/INT4 支持 | 单机多卡性能压榨 | 中高 |
| LMDeploy | TurboMind、KV Cache 量化 | 内部推理、多卡部署 | 中 |
| SGLang | RadixAttention、多调用结构优化 | Agent 和复杂多轮调用 | 中高 |
选框架不是看谁吞吐量宣传更高,而是看自己的业务形态。在线对话重点是延迟和并发稳定性;Agent 场景存在大量并行 tool call,SGLang 的结构化缓存更有优势;离线批处理任务则更看重吞吐和吞吐成本。框架的成熟度、社区维护、版本兼容也是选型的一部分,不能只看基准测试数字。
3.4 用最小脚本评估生成速度
用 Transformers 直接跑一个最小生成脚本,可以快速确认基线,但要注意它没有做连续批处理和显存优化,数值会比生产框架低不少。
import time import torch from transformers import AutoModelForCausalLM, AutoTokenizer model_name = "Qwen/Qwen2.5-1.5B-Instruct" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained( model_name, torch_dtype=torch.float16, device_map="auto" ) prompt = "用三句话解释自回归解码。" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) # 预热:排除首次加载、CUDA kernel 初始化的影响 _ = model.generate(**inputs, max_new_tokens=32) start = time.perf_counter() output_ids = model.generate(**inputs, max_new_tokens=128, do_sample=False) elapsed = time.perf_counter() - start new_tokens = output_ids.shape[1] - inputs["input_ids"].shape[1] print(f"新生成 token 数: {new_tokens}") print(f"总耗时: {elapsed:.3f} 秒") print(f"吞吐: {new_tokens / elapsed:.2f} tokens/s")关键点有三个。第一,必须预热,否则首次执行会把 CUDA 初始化和权重加载时间算进去。第二,max_new_tokens要固定,输出长度不同,平均吞吐差异会很大。第三,用perf_counter而不是time.time,避免系统时钟调整影响时间精度。
如果要测生产吞吐,可以用 vLLM 启动一个兼容接口服务,再用压测脚本请求,而不是只在 Python 脚本里循环调用:
python -m vllm.entrypoints.openai.api_server \ --model Qwen/Qwen2.5-1.5B-Instruct \ --dtype float16 \ --gpu-memory-utilization 0.85python3 benchmark_serving.py \ --model Qwen/Qwen2.5-1.5B-Instruct \ --num-prompts 20 \ --request-rate 2压测输出会包含 TTFT、TPOT、端到端延迟和整体吞吐。示例输出中的数字会随显卡、请求并发和 prompt 长度变化很大,因此记录测试条件比记录性能数字更重要。
4. 硬件与部署环境:显存带宽和互联决定地板
4.1 为什么解码性能会卡在显存带宽
理解硬件对推理速度的影响,可以做一个非常粗略的下限估算:解码阶段每生成一个 token,至少要把模型全部权重从显存读一遍。
理论上每个 token 的最短耗时约等于“权重字节数 / 显存带宽”。假设一张 GPU 的显存带宽是 3.35TB/s,跑一个 7B FP16 模型,权重约 14GB,那么理论下限是:
14GB / 3.35TB/s ≈ 4.18ms也就是说,即使计算单元完全空闲等待,单卡理论上限也只有约 239 tokens/s。换成 INT4 后,权重约 3.5GB,理论下限降到约 1.05ms,上限提升到约 950 tokens/s。实际工程中因为算子效率、访存冲突、其他计算开销,通常只能达到理论值的一部分。
这个估算说明一个关键结论:解码速度的天花板很大程度由显存带宽决定,而显存带宽的提升速度远慢于算力。这也是为什么量化、权重压缩、蒸馏在推理加速中的地位如此之高,因为它们都在减少必须搬运的字节数。
4.2 单卡、多卡与 Tensor Parallel 的取舍
当一个模型放不进单卡显存时,常见做法是张量并行,把每层权重切到多张 GPU 上同时计算。张量并行能降低单卡显存压力和单卡计算量,但它引入了卡间通信。每生成一个 token,多卡之间都要同步一次结果,通信延迟在解码阶段可能成为新瓶颈。
对于 7B、13B 这种中小模型,单卡能放下时,多卡张量并行通常不会带来线性加速,反而可能因为通信开销让性能下降。对于 70B 以上模型,单卡放不下,张量并行是必要手段。这时候要考虑交换机带宽、NVLink 或多机互联方式,以及卡间通信的负载均衡。
还有一个常见误区:把多卡当成吞吐量的线性放大器。实际吞吐提升幅度取决于模型并行度、batch 大小、通信拓扑和框架调度效率,需要压测确认,而不是按卡数直接相乘。
4.3 学习环境与生产环境的表现差异
学习环境里,单卡、小模型、低并发、FP16 就足够跑通流程。生产环境则要面对高并发、多实例、量化、容器调度、监控告警、负载均衡、灰度发布等问题。
两者在性能表现上差异明显。学习环境测出的单个请求延迟不能代表生产环境的 P99 延迟,因为生产环境存在排队、批处理等待、多租户干扰和硬件降频。生产环境的压测要用真实业务请求分布,包含不同的输入长度、输出长度和并发模型,而不是单个固定 prompt。
因此,性能优化不能只在学习环境里完成。团队应该至少在测试环境用与生产一致的框架、精度、并发模型和资源限制做一轮压测,把结论记录成文档,再进入生产决策。
5. 从 10 倍到 100 倍的组合路线
5.1 保守叠加与进取叠加
把前面的技术路径组合起来,会出现两条明显不同的路线。
| 路线 | 主要优化 | 叠加后预估 | 实现难度 | 风险点 |
|---|---|---|---|---|
| 保守路线 | INT4 量化 + 推理框架优化 + 适度硬件升级 | 10 到 30 倍 | 低到中 | 量化质量退化、框架兼容 |
| 进取路线 | 新架构 + 投机解码 + 低精度 + 专用硬件 + 蒸馏 | 80 到 120 倍 | 高 | 架构生态不成熟、任务质量下降 |
保守路线是当前大多数团队可以落地的方向:把模型从 FP16 换成 INT4,把服务从 Transformers 换成 vLLM 或 TensorRT-LLM,再对 batch 和并发参数做调优。这些改动不依赖某个新模型出现,现在就能做,收益通常在 10 倍量级。
进取路线依赖真正的架构级变化,比如某个新模型结构在同等质量下大幅降低解码步数或计算量。这类路线的最大不确定性来自生态:新架构是否有成熟的微调工具、量化工具、部署框架和社区支持。模型再快,如果无法接入现有数据管线,落地成本仍然很高。
5.2 哪些场景最先吃到速度红利
速度提升在不同场景的受益程度不同。高并发在线对话场景最直接受益于吞吐提升,因为吞吐决定服务成本和可支撑用户量。长文档处理场景受益于更高效的长上下文架构,因为注意力复杂度下降能显著减少预填充时间。边缘设备和移动端受益于量化和小模型,因为部署条件苛刻,对显存、功耗和延迟都敏感。
Agent 和工具调用场景则要观察另一个变量:多轮交互中框架能否复用 KV Cache,避免重复计算。这类场景的优化不只是模型快,还有请求调度和缓存策略。
受益最慢的通常是强推理和数学场景。这些任务对精度敏感,INT4 和蒸馏都可能不可用,架构变化也未必能在推理任务上保持效果。对这类任务,速度优化必须建立在严格的评测集验证之上。
5.3 速度之外的三笔隐性成本
把模型做快之后,要重新核算三笔隐性成本。
第一笔是质量成本。量化、蒸馏、新架构都可能改变输出分布,原本能通过的评测用例可能开始失败。质量回归的排查成本有时比速度收益更高。
第二笔是工程成本。新框架、新精度、新架构意味着要重新处理数据管线、监控指标、错误日志和告警阈值。任何没有打通可观测性的优化,都不应该直接上生产。
第三笔是迁移成本。模型一旦和特定框架、精度的实现深度耦合,后续换模型、换卡、换框架的成本会显著上升。接口层保持稳定,内部实现随时可替换,是控制这笔成本的核心手段。
6. 性能验证与常见坑
6.1 性能测试的正确打开方式
正确测量推理性能,至少要做到固定变量、预热、重复采样、记录分布。
固定变量包括模型版本、权重精度、输入长度、输出长度、batch 大小、并发数、GPU 型号和驱动版本。用固定输入长度和固定max_new_tokens,才能让两次测试的吞吐值可比较。
采样时要先预热,再连续跑多轮,记录 TP50、P95、P99。只看平均值会掩盖长尾抖动,而长尾延迟通常才是用户投诉的来源。测试结束后还要记录 GPU 利用率、显存占用、功耗和是否有降频,这些数据能帮助判断瓶颈在计算、带宽、显存还是通信。
6.2 五个会毁掉测试结论的坑
| 问题现象 | 常见原因 | 检查方式 | 处理建议 |
|---|---|---|---|
| 两次测试吞吐差异巨大 | 输出长度不同,或采样轮数过少 | 检查max_new_tokens和 tokenizer 统计 | 固定输入输出长度,至少测 5 轮 |
| 首次请求特别慢 | 未预热,包含 CUDA 初始化和权重加载 | 观察前 1 次请求耗时 | 先预热 3 到 10 次再计时 |
| FP16 与 INT4 对比不公平 | 只比速度,没比质量 | 对量化前后输出做评测集对比 | 速度和准确率分开记录 |
| 生成速度看起来很低 | 把预填充和解码混在一起平均 | 分别记录 TTFT 和 TPOT | 用框架自带的压测接口拆分统计 |
| 并发一高吞吐反降 | 批量设置过大或显存不足 | 查看 OOM 日志和 GPU 利用率 | 用并发梯度压测找到拐点 |
这些坑的共同点是测试条件没有被严格控制。性能测试的结论一旦不可复现,后面的优化决策就全部失去依据。
6.3 可复用的性能验证清单
发布性能结果前,建议逐项确认:
- 模型名称、版本和权重精度是否记录。
- 输入 prompt 长度和输出 token 上限是否固定。
- 是否做过预热,最少预热次数是多少。
- 是否报告 TTFT、TPOT、端到端延迟和吞吐四类指标。
- 是否报告 p50、p95、p99,而不只是平均值。
- GPU 型号、驱动版本、框架版本是否完整记录。
- 并发数和 batch 大小是否明确。
- 测试是否重复多轮,是否有异常波动。
- 量化或蒸馏后的质量评测结果是否保留。
- 测试环境和生产环境差异是否在结论中说明。
这份清单既能用于团队内部验证,也能作为第三方基准测试结果的可信度检查工具。
7. 开发者现在应该做的准备
7.1 把模型效果和推理成本分开评估
很多团队把“模型效果不错”和“可以上线”混为一谈,这是部署阶段成本失控的常见原因。更合理的做法是建立两条独立的评估线。
效果评估线用固定评测集和指标来判断模型是否满足业务要求,指标可以是准确率、格式正确率、召回率等。成本评估线用压测环境测算单位请求的延迟、吞吐和单 token 成本。两条线都达标,模型才能进入发布清单。任何优化措施,包括量化、蒸馏、换架构,都要在两条线上分别记录影响,避免只看到速度提升而忽略质量退化。
7.2 用兼容层降低换模型成本
模型迭代很快,今天的最优模型可能三个月后就被替代。对抗模型变化的最好方式,是在业务代码和模型之间加一层稳定接口,例如 OpenAI 兼容的推理服务标准,或者内部自定义的推理网关。
这样底层模型和引擎可以随时替换,上层业务不需要感知。实测时,可以准备同一份压测脚本和同一组评测数据,在多个模型和多个推理框架之间跑同一套流程。谁的速度、成本、质量组合更符合当前业务,就切换到谁。
7.3 值得安排的下一步学习路径
如果想把推理加速这条线学扎实,建议按这个顺序深入。
先理解 Transformer 和自回归解码的完整流程,尤其是 KV Cache 的产生和增长方式。再学习量化原理和常用工具,了解 INT8、INT4 的误差来源。然后部署一个主流推理框架,用压测脚本观察连续批处理和 PageAttention 带来的吞吐变化。最后学习性能分析工具,查看 GPU 利用率、带宽利用率和 kernel 耗时,学会用数据定位瓶颈。
项目层面,可以先选一个小模型,在单卡上完成“Transformers 基线、INT4 量化、vLLM 部署、并发压测”四个步骤的完整对比。这个练习覆盖了本文提到的大部分技术点,完成后对“下一代模型快 100 倍”这类判断会有自己的工程判断力:先看它优化的是哪一层,再看它有没有牺牲质量和兼容性,最后用同一套测试流程验证,而不是跟着口号走。