一、显存基础与瓶颈分析

做推理优化这些年,我最大的感触就是——显存才是真正的硬约束。算力不够可以等,显存不够直接崩。今天咱们就从最底层开始,把显存这玩意儿彻底聊透。

1.1 GPU显存架构:HBM vs GDDR

先问个问题:为什么同样是大模型推理,A100比RTX 4090快那么多?

答案就在显存架构上。目前主流GPU显存分两派:

  • HBM(高带宽显存):A100、H100、MI300X在用。特点是位宽惊人——HBM2e有1024-bit,HBM3甚至到8192-bit。带宽轻松上2TB/s。
  • GDDR(图形双倍数据率显存):RTX 4090的GDDR6X,位宽384-bit,带宽约1TB/s。看着也不差对吧?

但实际差距在哪?我举个例子。你想想看,推理时加载一个70B模型,光权重就要140GB(FP16)。GDDR的卡根本放不下,得做模型并行。而HBM的大容量+高带宽,让单卡就能搞定。

核心结论:HBM赢在带宽和容量,GDDR赢在成本和功耗。推理场景下,HBM是王道。

1.2 显存带宽与容量:算力够不够,先看显存

我个人习惯,拿到一个新模型,第一件事不是看FLOPs,而是算显存账。

带宽决定了数据搬运速度。推理时,每个token都要把权重从显存搬到计算单元。带宽不够,计算单元就在空等——这就是内存墙。

举个例子:

# 一个70B模型,FP16权重
模型大小 = 70 * 10^9 * 2 bytes = 140 GB

# 假设HBM带宽为2 TB/s
加载时间 = 140 GB / 2 TB/s = 0.07s

# 假设GDDR带宽为1 TB/s
加载时间 = 140 GB / 1 TB/s = 0.14s

你看,带宽差一倍,加载时间就差一倍。这还只是权重,还没算KV Cache和中间激活。

避坑指南:我曾经踩过一个坑——只看算力不看带宽。结果模型跑起来了,但每秒只出3个token。后来一查,显存带宽利用率不到30%。说白了,算力再强,数据喂不进去也是白搭。

1.3 推理中的三大显存瓶颈

推理时显存消耗主要来自三块:模型权重、KV Cache、中间激活。咱们一个一个拆。

1.3.1 模型权重

这是最直观的。模型多大,权重就占多少。但有个细节很多人忽略——量化。

FP16的70B模型要140GB,INT8只要70GB,INT4只要35GB。我建议,能上量化就上量化。精度损失可控,显存节省立竿见影。

精度 70B模型显存 推理速度(相对)
FP16 140 GB 1x
INT8 70 GB 1.5x
INT4 35 GB 2x

1.3.2 KV Cache

这才是真正的显存杀手。为什么?因为KV Cache和序列长度成正比,和batch size成正比。

公式很简单:

KV Cache大小 = 2 * num_layers * hidden_dim * seq_len * batch_size * dtype_size

举个例子,LLaMA-70B:

  • num_layers = 80
  • hidden_dim = 8192
  • seq_len = 4096
  • batch_size = 1
  • FP16

算下来:2 * 80 * 8192 * 4096 * 1 * 2 = 10.7 GB

这还只是一个请求。如果batch_size=64,直接飙到685GB。你想想看,A100才80GB显存,根本扛不住。

注意:KV Cache是推理时动态增长的。每生成一个token,就要多存一份K和V。所以长文本生成时,显存会越吃越多。我曾经遇到一个case,生成到第2000个token时直接OOM了——就是因为没算好KV Cache的增长。

1.3.3 中间激活

这个容易被忽略。前向传播时,每一层的输出都要暂存。虽然推理时不需要保存梯度,但激活值本身还是占显存的。

中间激活的大小 ≈ batch_size * seq_len * hidden_dim * num_layers * dtype_size

还是LLaMA-70B的例子:

  • batch_size = 1
  • seq_len = 4096
  • hidden_dim = 8192
  • num_layers = 80
  • FP16

算下来:1 * 4096 * 8192 * 80 * 2 = 5.4 GB

加上KV Cache的10.7GB,再加上权重的140GB,总共156GB。单卡A100(80GB)根本跑不了。

总结一下:推理显存瓶颈,权重是死的,KV Cache是活的,中间激活是隐形的。优化时,优先动KV Cache(比如用MQA/GQA),其次考虑量化权重,最后才动中间激活。

1.4 知识体系总览

下面这张图,把本章的核心逻辑串起来了。我建议你保存下来,后面每讲一个优化技巧,都可以回来对照着看。

显存优化知识体系 GPU显存架构 HBM(高带宽、大容量) GDDR(低成本、低功耗) 推理显存三大瓶颈 模型权重 量化可优化 KV Cache 动态增长,最大头 中间激活 易被忽略 INT4/INT8量化 MQA/GQA/PagedAttention 激活检查点/重计算

这张图把显存架构、三大瓶颈、优化方向串成了一条线。后面几章,我们会逐个击破这些瓶颈。嗯,先从KV Cache开刀——毕竟它才是推理时最头疼的显存大户。

想要更多资料,联系可可