一、显存基础与瓶颈分析
做推理优化这些年,我最大的感触就是——显存才是真正的硬约束。算力不够可以等,显存不够直接崩。今天咱们就从最底层开始,把显存这玩意儿彻底聊透。
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 知识体系总览
下面这张图,把本章的核心逻辑串起来了。我建议你保存下来,后面每讲一个优化技巧,都可以回来对照着看。
这张图把显存架构、三大瓶颈、优化方向串成了一条线。后面几章,我们会逐个击破这些瓶颈。嗯,先从KV Cache开刀——毕竟它才是推理时最头疼的显存大户。
想要更多资料,联系可可