HiHuo
首页
博客
手册
工具
关于
首页
博客
手册
工具
关于

推理和训练有什么不一样

前面讲了训练。但大模型跑起来后,更多时间是在做推理——响应用户请求,生成回答。

推理和训练差别很大,优化方向完全不同。这篇讲清楚两者的区别。


核心区别

训练

  • 目标:更新模型参数,让模型变「聪明」
  • 方向:前向 + 反向传播
  • 数据:大批量(batch size 几百几千)
  • 耗时:几天到几个月
  • 状态:有状态(要存梯度、优化器状态)

推理

  • 目标:用训练好的模型生成输出
  • 方向:只有前向传播
  • 数据:小批量(单条或几十条)
  • 耗时:毫秒到秒级
  • 状态:无状态(每次请求独立)

显存占用对比

训练时显存

模型参数:14GB(7B × FP16)
梯度:14GB
优化器状态:28GB(Adam)
激活值:几十 GB(取决于 batch size)
────────────────
总计:80-120GB+

推理时显存

模型参数:14GB(7B × FP16)
KV Cache:动态增长(取决于上下文长度和并发数)
输入输出:很小
────────────────
总计:14GB + KV Cache

推理不用存梯度和优化器状态,显存占用小很多。但 KV Cache 是新的显存大户。


计算特点对比

训练

  • 计算密集:大 batch,矩阵乘法可以充分并行
  • 带宽不敏感:数据复用率高
  • 瓶颈:通常是算力

推理

  • 访存密集:每生成一个 token 要读一遍模型参数
  • 带宽敏感:数据复用率低
  • 瓶颈:通常是显存带宽

为什么推理是带宽瓶颈

看 Transformer 的推理过程:

生成第 N 个 token 时:

  1. 读取全部模型参数(几十 GB)
  2. 做矩阵乘法(计算量相对不大)
  3. 输出一个 token

每生成一个 token 都要读一遍参数。

算一下:

  • 7B 模型 FP16 = 14GB 参数
  • 要达到 50 tokens/s
  • 需要 14GB × 50 = 700 GB/s 带宽

A100 的显存带宽是 2 TB/s,勉强够。但如果模型更大、速度要求更高,带宽就成瓶颈了。


延迟 vs 吞吐

推理场景关注两个指标:

延迟(Latency)

单个请求从开始到结束的时间。

  • 首 token 延迟(TTFT):收到请求到输出第一个 token 的时间
  • 每 token 延迟(TPOT):生成每个 token 的平均时间
  • 总延迟:整个回答生成完的时间

用户体验主要看 TTFT 和 TPOT。TTFT 快,用户感觉响应快;TPOT 低,打字效果流畅。

吞吐(Throughput)

单位时间处理的请求数或生成的 token 数。

  • tokens/s:每秒生成多少 token
  • requests/s:每秒处理多少请求

运营成本主要看吞吐。吞吐越高,单位成本越低。

延迟和吞吐的矛盾

  • 追求低延迟:batch size 小,GPU 利用率低,吞吐差
  • 追求高吞吐:batch size 大,排队时间长,延迟高

要在两者之间找平衡。


Prefill 和 Decode

大模型推理分两个阶段:

Prefill(预填充)

处理用户输入的 prompt。

输入:「请介绍一下人工智能」(假设 10 个 token)

Prefill 阶段:
- 一次性处理 10 个 token
- 计算所有 token 的 K、V
- 存入 KV Cache
- 输出第一个 token

特点:

  • 计算密集(可以并行处理所有输入 token)
  • GPU 利用率高
  • 延迟 = TTFT

Decode(解码)

自回归生成输出。

Decode 阶段:
- 每次只处理 1 个 token
- 读取 KV Cache
- 输出下一个 token
- 重复,直到生成完

第 1 步:生成「人」
第 2 步:生成「工」
第 3 步:生成「智」
...

特点:

  • 访存密集(每步都要读 KV Cache 和模型参数)
  • GPU 利用率低(只处理 1 个 token)
  • 延迟 = TPOT × 输出 token 数

时间占比

对于长输出:

  • Prefill:10-20%
  • Decode:80-90%

Decode 是大头,所以推理优化主要优化 Decode。


推理优化方向

1. 减少计算量

量化:用更低精度表示参数

FP16 → INT8:计算量减半
FP16 → INT4:计算量减 75%

精度降低,速度提升,效果略有损失。

稀疏化:跳过不重要的计算

剪枝:去掉不重要的参数

2. 减少访存

KV Cache 优化:减少 KV Cache 大小

算子融合:减少中间结果的读写

FlashAttention:优化 Attention 计算的访存模式

3. 提高并行度

Continuous Batching:动态组 batch,提高 GPU 利用率

Speculative Decoding:用小模型预测,大模型验证

张量并行:多卡并行计算

4. 系统优化

高效 runtime:CUDA kernel 优化

调度优化:智能请求调度

内存管理:避免碎片,提高利用率


训练优化 vs 推理优化

方面训练优化推理优化
目标更快收敛,更省显存更低延迟,更高吞吐
batch size越大越好看场景权衡
精度FP16/BF16 混合INT8/INT4 量化
并行方式数据+模型+流水线张量并行为主
关键指标训练吞吐(samples/s)TTFT、TPOT、tokens/s
典型工具DeepSpeed、MegatronvLLM、TensorRT-LLM

推理的部署模式

离线批处理

一次处理大量请求,不要求实时。

  • 延迟不敏感
  • 追求吞吐最大化
  • 可以用大 batch

场景:数据标注、批量生成、评测

在线服务

实时响应用户请求。

  • 延迟敏感
  • 需要平衡延迟和吞吐
  • 要考虑并发、排队

场景:聊天机器人、API 服务

边缘/端侧

在用户设备上运行。

  • 资源受限(手机、PC)
  • 隐私要求
  • 需要极致压缩

场景:手机助手、本地应用


小结

推理和训练的核心区别:

方面训练推理
目的更新参数生成输出
计算前向+反向只有前向
瓶颈算力带宽
显存参数+梯度+优化器+激活参数+KV Cache
指标训练吞吐延迟+推理吞吐
精度FP16/BF16INT8/INT4

推理的两个阶段:

  • Prefill:处理输入,计算密集
  • Decode:生成输出,访存密集

优化方向:量化、KV Cache 优化、Batching、系统优化

下一篇详细讲 KV Cache:为什么显存越用越多。