大模型推理速度揭秘:从token到vLLM的实战优化指南
2026/9/2 9:22:10 网站建设 项目流程

看到 Taalas 展示的每秒 1.4 万 token 推理速度后,不少开发者开始重新审视大模型推理性能的边界。这个数字乍看不太直观,但稍微换算一下:如果按英文文本约 1 个 token 对应 0.75 个单词估算,一秒钟就能生成接近一万个英文单词,相当于 20 页左右的英文文档;如果按中文约 1 个 token 对应 0.6 到 0.7 个汉字估算,一秒钟也在 8000 汉字以上。放在过去“一个字一个字往外蹦”的生成式大模型上,这几乎是科幻级别。

不过,比“跑得快”更值得讨论的是:这个速度是怎么测出来的?token 到底是什么?为什么大家都用 token 而不是字数来评价推理性能?我们自己的模型服务离这个量级还有多远,中间卡在哪些环节?

这篇文章围绕这几个问题展开,会从 token 基础概念讲起,拆解推理速度指标,再结合 vLLM、Ollama 等主流推理框架给出可复现的测速与优化方法,最后整理高频报错和工程建议。适合正在做模型部署、推理优化,或者刚开始接触大模型应用开发的读者。

1. 为什么推理速度成了大模型落地的关键指标

1.1 训练快不如推理稳

很多刚接触大模型的同学会把注意力放在“模型参数量有多大”“训练用了多少张卡”上,但在实际业务场景中,推理阶段的性能往往才是决定项目能不能上线的关键。

训练是离线任务,跑几小时甚至几天都可以接受;推理却是实时任务,用户在对话界面等回复,接口在压测下要保证不超时,批量任务在有限算力下要尽快跑完。同一个 7B 模型,用不同框架部署、不同量化精度、不同并发配置,延迟和吞吐可能差出好几倍。推理速度直接影响用户体验、服务器成本和可支撑的业务规模。

1.2 每秒 1.4 万 token 是什么概念

以 1.4 万 token/s 为例,对这个数字建立一个直觉很重要。

  • 如果生成一篇 1000 token 的短文,耗时不到 0.1 秒。
  • 如果处理一本 10 万字的小说(约 8 万到 12 万 token),大约 6 到 10 秒可以完成全文生成。
  • 在流式输出场景中,用户几乎感觉不到“逐字输出”的等待,体验接近搜索响应的即时性。

这也是为什么像 Taalas 这类推理加速方案公布速度数据时,会引起关注。它代表的不只是一个框架的优化成绩,而是说明大模型推理在特定硬件和工程组合下,已经可以逼近过去专用模型才有的处理速度。

1.3 推理速度不是单一指标

这里要先打一个预防针:不要看到“每秒 1.4 万 token”就直接和某个框架或某张显卡画等号。

推理速度受批量大小、输入长度、输出长度、量化方式、硬件型号、并发策略影响非常大。同一套系统,在 batch size 为 1 的流式对话场景和 batch size 为 32 的离线批量生成场景里,测出来的单用户 token 吞吐完全不同。所以理解这个数字时,要同时问清楚:测的是单请求延迟,还是服务端总吞吐?是短文本还是长文本?

2. 先搞懂 token:大模型计算的基本单位

2.1 token 是什么

token 是大模型处理文本的最小单位。你可以把它理解成模型眼中的“词元”或“片段”。

比如英文单词unbelievable,模型不一定会把它当作一个整体,而可能拆成unbelievable三个 token。中文“深度学习”可能被拆成“深”、“度”、“学”、“习”四个 token,也可能被拆成“深度”、“学习”两个 token,具体取决于分词器。

专业一点说,token 是分词器(Tokenizer)对原始文本进行切分后的结果。大模型在训练和推理时,看到的不是字符串,而是一串 token id。模型本质上是在预测“下一个 token 是什么”,而不是“下一个字/单词是什么”。

2.2 为什么要用 token 而不是字数

主要有三个原因。

第一,模型的计算量和上下文长度都以 token 为计量单位。Transformer 的自注意力机制复杂度与序列长度的平方相关,这里的序列长度就是 token 数。

第二,不同语言、不同写法下,token 和字符的换算比例不稳定。英文一个单词平均约 1.3 个 token,中文一个汉字约 0.6 到 1 个 token,同一个句子在不同分词器下 token 数也可能不同。直接用字数统计会失真。

第三,模型服务的计费、限流、上下文窗口限制都以 token 为基准。在调用 OpenAI、智谱等平台的 API 时,费用按 token 计算;在本地部署时,显存占用也和上下文 token 数直接相关。

2.3 用代码计算 token 数量

在实际开发中,我们需要在发送请求前估算 token 用量,避免超出上下文限制。最准确的方式是使用模型对应的 tokenizer。

下面以 HuggingFace 的 transformers 库为例:

# requirements: transformers>=4.40 # 文件路径:count_tokens.py from transformers import AutoTokenizer # 这里以 Qwen2.5 7B 为例,实际使用时换成你部署的模型 model_name = "Qwen/Qwen2.5-7B-Instruct" tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True) text = "大模型推理速度是落地的关键指标,token 是计算的基本单位。" tokens = tokenizer.tokenize(text) token_ids = tokenizer.encode(text) print(f"原始文本: {text}") print(f"Token 列表: {tokens}") print(f"Token ID: {token_ids}") print(f"Token 数量: {len(token_ids)}")

运行后可以看到,中文文本并不是每个字固定对应一个 token,而是由分词器根据词表决定。这个结果在不同模型之间会有差异,所以不要用“一个汉字等于一个 token”这种粗略规则做精确预算,而是直接用 tokenizer 算。

2.4 token 与字符数、API credit 的换算关系

不少平台在控制台里同时展示 token 和 credit(积分),但换算关系并不统一。有的平台 1 credit 等于 1 token,有的平台按照模型等级设置不同倍率,还有的会用固定字符数折算。

遇到“2500 credits 相当于多少 token”这类问题时,最可靠的做法是查看对应平台的计费文档,而不是套用某个固定公式。在自建服务中,我们也不应该根据字符数预估显存和上下文,而应该用 tokenizer 在你选定的 prompt 模板上跑一遍完整文本。

3. 推理速度指标:token/s 是怎么算出来的?

3.1 首 token 延迟与生成速度

衡量大模型推理性能,最常用的两个指标是:

  • TTFT(Time To First Token):从发起请求到收到第一个 token 的时间。
  • TPS(Tokens Per Second):稳定生成阶段每秒产生的 token 数,也叫生成速度。

TTFT 影响“用户多久看到第一个字”,TPS 影响“整段回答多久完整结束”。在流式输出场景中,用户最先感受到的是 TTFT;在离线批量生成中,TPS 更关键。

3.2 预填充阶段与解码阶段

大模型推理在时间上分为两个阶段。

预填充阶段(Prefill):用户输入的 prompt 一次性进入模型,并行计算所有输入 token 的注意力结果。这个阶段对算力要求高,但可以被并行加速。

解码阶段(Decode):模型逐个生成新 token,每生成一个 token 就依赖前面所有 token 的计算结果,串行程度高。这也是大家常说生成式推理“慢”的主要原因——不是一个一个并发出词,而是生成序列本身是逐步展开的。

衡量“每秒 1.4 万 token”时,需要明确它覆盖了哪个阶段。如果只是预填充阶段的吞吐,和完整生成全过程的体验差异会非常大;如果是完整生成阶段摊平后的速度,参考价值更高。

3.3 用 Python 写一个简易测速脚本

下面这段脚本调用一个兼容 OpenAI API 的本地推理服务,并统计生成速度和 token 数:

# 文件路径:benchmark.py # 依赖:pip install openai transformers import time from openai import OpenAI from transformers import AutoTokenizer # 修改为你的服务地址与模型名 BASE_URL = "http://localhost:8000/v1" MODEL_NAME = "Qwen/Qwen2.5-7B-Instruct" API_KEY = "EMPTY" client = OpenAI(base_url=BASE_URL, api_key=API_KEY) tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, trust_remote_code=True) prompt = "请用 500 字左右介绍大模型推理加速的基本思路。" messages = [{"role": "user", "content": prompt}] start = time.time() response = client.chat.completions.create( model=MODEL_NAME, messages=messages, stream=True, max_tokens=1024, ) output_text = "" for chunk in response: delta = chunk.choices[0].delta.content if delta: output_text += delta elapsed = time.time() - start output_tokens = len(tokenizer.encode(output_text)) print(f"耗时: {elapsed:.2f}s") print(f"生成 token 数: {output_tokens}") print(f"平均生成速度: {output_tokens / elapsed:.2f} token/s")

注意,这个脚本实测的是“从请求开始到输出结束”的全流程平均速度,包含网络传输和首 token 延迟。服务端日志通常会另外给出 Prefill 和 Decode 阶段的细分指标,生产环境建议以服务端指标为准。

3.4 为什么要区分“速率”和“吞吐”

单用户测速得到的 token/s 是单请求速率;服务端同时处理多个请求时,整体吞吐可能更高,但单个用户感受到的速度不一定提升。

例如一颗显卡在 batch 为 1 时,单请求可能是 60 token/s;把 batch 提高到 16,总吞吐可能到 600 token/s,但单个请求因为排队和显存分配,反而可能降到 50 token/s。

所以,在优化推理性能前,必须先明确业务目标:是降低单用户延迟,还是提升整体吞吐。这两个目标对应的优化手段不同。

4. Taalas 与主流推理框架对比

4.1 Taalas 每秒 1.4 万 token 的技术含义

根据公开宣传信息,Taalas 在推理任务中展示了约每秒 1.4 万 token 的速度。目前公开技术细节有限,我们不展开猜测其内部实现,但可以从工程角度分析这个数字的参考意义。

要达到这个量级的解码速度,通常需要几个条件同时满足:高带宽显存或高速内存、高效的算子融合、较大的批量吞吐,以及针对目标模型和硬件深度定制的内核。单一环节优化很难达到万级 token/s,这也是为什么它引发讨论——说明推理加速还有很大的工程空间。

对普通开发者来说,重点不是盲目追逐这个数字,而是理解:同样的模型,在优化前后测速结果可能天差地别。自己部署时,最好先记录下当前基线,再逐项优化。

4.2 主流推理框架盘点

目前工业界和开源社区常见的推理框架有:

  • vLLM:基于 PagedAttention 和连续批处理(Continuous Batching),适合高并发场景,兼容 OpenAI API,是当前部署服务的主流选择之一。
  • Ollama:适合本地开发和体验,安装简单,支持量化模型,适合个人笔记本或单机部署。
  • TensorRT-LLM:NVIDIA 生态的推理引擎,对 Tensor Core 优化深入,适合对延迟要求极高的生产环境。
  • llama.cpp:纯 C/C++ 实现,支持 CPU 推理和 GPU 加速,在资源受限环境很受欢迎。
  • HuggingFace TGI(Text Generation Inference):官方维护的推理服务,与 transformers 生态集成好。

4.3 不同框架的适用场景

框架优势适合场景
vLLM吞吐高、并发友好、支持 OpenAI 协议线上 API 服务、多用户并发
Ollama部署简单、模型管理方便本地开发、个人学习、原型验证
TensorRT-LLMGPU 优化极致、延迟低生产环境、GPU 资源充足
llama.cpp跨平台、可 CPU 推理边缘设备、低配机器
TGI生态统一、功能完整已深度使用 HuggingFace 的团队

选择框架时,不要只看宣传的峰值速度,要结合自己的硬件、并发模型、编程语言和运维能力。如果只是本地体验,从 Ollama 入手最合适;如果要做高并发 API,vLLM 是更稳妥的起点。

4.4 推理框架学习路线

如果你刚接触推理部署,可以按这个顺序学习:

  1. 用 transformers 加载模型做一次普通推理,理解模型输入输出。
  2. 用 Ollama 部署一个开源模型,体验命令行调用和 API 调用。
  3. 用 vLLM 部署同一个模型,对比吞吐和延迟。
  4. 学习量化概念:AWQ、GPTQ、GGUF 的区别。
  5. 学习连续批处理和 KV Cache 的基本原理。
  6. 再深入了解 TensorRT-LLM 这类硬件级优化引擎。

这条路线从“跑通”到“跑快”,每一步都能积累可量化的经验。

5. 影响推理速度的关键因素

5.1 推理卡与显存带宽

模型推理时,权重和 KV Cache 都要在显存中反复读写。GPU 的显存带宽越高,单位时间内能处理的 token 就越多。这也是为什么很多高性能推理引擎强调使用了 HBM 高带宽显存。

显存容量决定你能放多大的模型、开多大的上下文。显存不足时,模型会被换到内存或磁盘,推理速度会急剧下降。所以选择推理卡时,不仅要看算力,还要看显存容量和带宽。

5.2 服务器内存与推理卡的关系

很多部署新手会把目光全放在 GPU 上,忽略了服务器内存的影响。

模型加载时,权重首先从磁盘读入内存,再从内存拷贝到显存。如果内存带宽低、磁盘 IO 慢,加载时间会很长。另外,当并发请求增多、KV Cache 超过显存容量时,部分实现会进行调度,频繁在 CPU 内存和 GPU 显存之间搬运数据,这时候内存带宽和 PCIe 带宽都会成为瓶颈。

所以在采购或配置服务器时,要同时考虑:内存容量不小于模型权重的 2 到 3 倍,PCIe 通道数足够,磁盘最好是 NVMe SSD,避免模型加载和量化权重交换时成为瓶颈。

5.3 批量大小、KV Cache 与量化

连续批处理是提升吞吐的有效手段。它让计算单元在同一时刻处理多个请求,而不是等一个请求全部生成完再处理下一个。

KV Cache 是推理过程中缓存历史 token 的键值对,避免每生成一个新 token 都重新计算全部历史。KV Cache 很占显存,但它是提升解码速度的关键。很多框架提供了gpu_memory_utilizationmax_model_len等参数来管理 KV Cache 容量。

量化则是把模型权重从 FP16 降到 INT8、INT4 等更低精度,减少显存占用和内存带宽压力,从而提升速度。代价是可能出现轻微精度下降。

5.4 框架调度策略

不同框架的最大差异之一,是请求调度策略。

vLLM 的连续批处理能够在当前请求生成间隙插入其他请求,GPU 利用率更高;简单批处理框架则必须凑满一个 batch 才开始计算,空闲率大。TensorRT-LLM 则在算子融合、内核自动调优上做了大量工作。

这些策略层面的差异,比“谁家的模型加载更快”更能解释实际性能差距。

6. 实战:搭建一个高性能推理服务

6.1 搭建前的环境准备

下面以一个常见的 7B 模型为例,演示从零搭建一个 OpenAI 兼容的推理服务并完成测速。

本文不锁定具体硬件版本,只给出通用思路。实际环境可能是:

  • 操作系统:Ubuntu 20.04/22.04,或 Windows WSL2
  • GPU:NVIDIA 显卡,建议显存不小于 16G
  • Python:3.10 或更高版本
  • CUDA:根据显卡驱动安装对应版本,建议 12.x
  • 推理框架:vLLM 或 Ollama

如果没有 GPU,vLLM 的演示可以跳过,改用 CPU 版本的 Ollama 体验概念部分,但测速结果会差别很大。

6.2 vLLM 启动服务

安装 vLLM:

pip install vllm

启动 OpenAI 兼容服务:

python -m vllm.entrypoints.openai.api_server \ --model Qwen/Qwen2.5-7B-Instruct \ --gpu-memory-utilization 0.9 \ --max-model-len 8192 \ --port 8000

参数解释:

  • --model:指定 HuggingFace 模型名称或本地模型目录。
  • --gpu-memory-utilization:允许使用的显存比例,避免一次性占满导致后续任务失败。
  • --max-model-len:最大上下文长度,受模型本身和显存双重限制。
  • --port:服务端口。

启动成功后,可以在另一个终端运行:

curl http://localhost:8000/v1/models

能返回模型列表,说明服务已就绪。

6.3 调用服务并测速

回到 3.3 节的benchmark.py,把BASE_URL改为http://localhost:8000/v1,模型名改为你实际部署的模型 ID,然后运行:

python benchmark.py

预期输出结构大致如下:

耗时: 18.35s 生成 token 数: 1024 平均生成速度: 55.80 token/s

注意,如果你的显卡是消费级单卡,55 token/s这个量级是正常的,不要和 1.4 万 token/s 直接比较,因为批量策略、硬件规格、上下文长度完全不同。

6.4 用 Ollama 做轻量替代

如果只是想快速验证量化模型在本地的速度,可以用 Ollama:

ollama pull qwen2.5:7b ollama run qwen2.5:7b

Ollama 默认会使用适合本地硬件的量化版本。运行后输入一句话,模型会流式输出。

调用 API 时默认地址为http://localhost:11434,使用api/chat接口,很多 HTTP 客户端工具都直接支持。

7. 常见问题与排查思路

7.1 输出 token 上限导致回答被截断

现象:长内容生成到一半突然停止,响应提示“已达到输出 token 上限”。

可能原因:max_tokens设置过小,或者服务端存在硬限制。

解决思路:

  • 调大max_tokens
  • 检查框架配置中max_model_len是否足够。
  • 对超长生成任务,用流式输出配合分段续写,而不是一次拉到上限。

7.2 测速结果与预期相差过大

现象:官方宣传或他人教程中显示 60 token/s,自己测只有 20 token/s。

排查步骤:

  1. 确认是否使用了相同模型和量化方式。
  2. 确认是否相同上下文长度。
  3. 确认是否有并发请求干扰。
  4. 检查 GPU 使用率是否打满,nvidia-smi查看功耗是否达到上限。
  5. 检查是否是 CPU 推理或 GPU 未开启。

这类差异大多源于环境不同,而不是框架“不行”。

7.3 登录或接口返回 token 相关报错

在开发中,“token”还有另一层含义:认证令牌,例如 JWT、OAuth Token、GitLab Token 等。

很多同学遇到sign-in could not be completed token exchange failedtoken endpoint returned status 403 forbidden这类错误时会困惑:我调用的是模型 API,怎么跟认证 token 有什么关系?

这类报错通常出现在:

  • 连接第三方平台时,Access Token 或 API Key 过期。
  • 服务端配置了地区或网络策略,导致令牌端点返回 403。
  • 时区不同步,导致 token 验证失败。

排查思路:

  • 检查当前 token 是否过期,尝试重新登录生成新 token。
  • 检查服务器时间和本地时间是否一致。
  • 检查代理或网关配置是否正确。
  • JWT 场景下,检查密钥和签名算法是否一致。

这里要特别提醒:认证 token 和模型 token 是两个不同概念。看到“token 失效”相关报错时,先别急着优化模型推理,先确认是哪一层 token。

7.4 显存不足,服务启动失败

现象:vLLM 启动时报 CUDA out of memory。

排查与解决:

  • 降低gpu-memory-utilization
  • 调低max-model-len
  • 关闭其他占用显存的进程。
  • 尝试更低比特的量化版本,例如 AWQ 或 GGUF。

7.5 服务器内存和推理卡之间相互影响

现象:模型加载慢,推理过程中偶尔出现明显卡顿。

可能原因:内存带宽不足、PCIe 带宽受限、系统 Swap 频繁。

解决思路:

  • 模型加载前关闭不必要的进程。
  • 使用 NVMe 固态硬盘存放模型文件。
  • 合理设置页缓存,避免反复从磁盘读权重。
  • 如果使用 CPU Offload 策略,确认内存容量足够。

8. 工程最佳实践

8.1 先测基线,再优化

不要凭感觉调参数。无论用什么框架,第一步都先记录一份基线数据:模型名、量化方式、batch 大小、并发数、上下文长度、单请求平均速度、服务端吞吐。

后续每做一项改动,都对照基线评估收益。这样能避免“优化了一圈,结果更慢”的情况。

8.2 按场景选择量化精度

  • 对话体验类场景,优先考虑 FP16/BF16,保持输出质量。
  • 高并发离线场景,可尝试 INT8 或 AWQ。
  • 边缘设备或低配机器,考虑 GGUF 的 Q4/Q5 版本。

量化后的模型一定要做效果抽测,不能只看速度。部分任务在 INT4 下会出现明显质量下降。

8.3 管理好 token 用量预算

在 API 调用场景中,token 用量直接关联费用。

常用做法:

  • 在发请求前用 tokenizer 预估 prompt 的 token 数。
  • 对用户输入做长度限制,超长内容先截断或总结。
  • 控制max_tokens,避免模型自由发挥过长。
  • 日志中记录每次请求的 prompt token 和 completion token,方便成本分析。

8.4 监控不是可选项

生产环境部署推理服务,至少要监控:

  • GPU 显存占用、利用率、功耗。
  • 平均 TTFT 和 TPS。
  • 请求排队长度和超时率。
  • token 吞吐总量和成本估算。

这些指标可以接入 Prometheus 和 Grafana,也可以在应用层做日志统计。只有数据足够,才能判断是否需要扩容或调整策略。

8.5 给自己留一条“降级方案”

在真实业务中,推理服务可能会有高峰期或模型故障。建议提前准备:

  • 一个更小、更快的模型作为后备。
  • 一段缓存常用回答的 Redis 服务。
  • 预设超时和重试策略,避免用户长时间等待。

当主模型明显变慢或不可用时,自动降级,优先保证服务可用性。

9. 总结与学习路线

这篇文章从 Taalas 每秒 1.4 万 token 的公开数据切入,梳理了大模型推理中几个最基本也最容易混淆的知识点:token 到底是什么,推理速度怎么测量,预填充和解码阶段有何区别,以及为什么不能拿一个孤立的 token/s 数字直接比较不同框架。

同时给出了两个可以直接上手的实战路径:用 vLLM 部署 OpenAI 兼容的推理服务,或者用 Ollama 在本地快速体验;以及配套的 token 计算脚本和测速脚本,方便你在自己的机器上建立基线数据。

如果接下来想继续深入,建议按这个顺序推进:

  1. 重点理解 KV Cache 和连续批处理原理,这是当前推理引擎拉开性能差距的核心。
  2. 学习量化技术,在同一模型上对比 FP16、AWQ、GGUF 的延迟、吞吐和输出质量。
  3. 动手做一次压测,使用 Locust 或 wrk 模拟多用户并发,观察吞吐与延迟的平衡点。
  4. 再往后,可以了解 TensorRT-LLM 的引擎构建流程,以及分布式推理中的张量并行、流水线并行等概念。

在实际项目中,永远要把“业务目标”放在“峰值指标”前面。你要做的不是盲目追求每秒 1.4 万 token,而是找到你的硬件、模型、并发模型和成本约束下最合适的配置。先让服务稳定跑起来,再逐步优化,这一步一步对比出来的数据,比任何宣传数字都更有说服力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询