一江山水的随笔

当前位置:首页 - 技术 - 正文

Enjoy life!

GPU显存为啥是AI命门?不够用会怎样?

A+ A-

先说结论:显存就是AI的命门

大模型时代,显存决定了你能跑多大的模型、多长的上下文、多大的batch size。显存不够,要么模型加载不了,要么跑起来直接OOM(Out of Memory),要么慢到怀疑人生。7B模型至少14GB,13B至少26GB,70B至少140GB——这只是参数,还没算KV Cache和中间激活。

为什么大模型吃显存?

1. 模型参数住在显存里

模型参数(权重)必须在显存里才能被GPU计算。以FP16为例:

  • 7B模型:7B × 2 bytes = 14GB
  • 13B模型:13B × 2 = 26GB
  • 70B模型:70B × 2 = 140GB
这还只是参数,没算优化器状态(训练时翻倍)和中间激活。

2. KV Cache是隐形杀手

推理时,Transformer的Self-Attention会缓存Key和Value,大小和序列长度、batch size成正比。公式:KV Cache大小 = 2 × batch_size × seq_len × num_layers × hidden_dim × dtype_size。比如7B模型(32层,hidden_dim=4096),seq_len=2048,batch_size=1,FP16:2×1×2048×32×4096×2 ≈ 1GB。如果batch_size=16,直接16GB。长上下文(比如32K)更是爆炸。

3. Batch size受限

训练时,batch size越大,显存占用越高,因为要存梯度、激活值。显存不够只能减小batch size,但会拖慢训练速度、影响收敛。

显存不够怎么办?

方案一:量化(省钱首选)

把FP16模型量化成INT8或INT4,显存直接减半或减四分之一。7B模型INT8只要7GB,INT4只要3.5GB。代价是精度轻微下降,但大部分场景足够。常见工具:bitsandbytes、GPTQ、GGML。

方案二:梯度累积(训练专用)

不增大batch size,而是累积多个小batch的梯度再更新参数。比如你只能跑batch_size=1,累积16步效果等价于batch_size=16,但显存不变。代码实现:

for i, data in enumerate(dataloader):
    loss = model(data)
    loss.backward()
    if (i+1) % accumulation_steps == 0:
        optimizer.step()
        optimizer.zero_grad()

方案三:模型并行/张量并行

把模型切分到多张GPU上。70B模型用2张A100(80GB)就能跑,但需要高速通信(NVLink)。适合有预算的团队。

方案四:CPU Offloading

把部分参数或KV Cache放到CPU内存,GPU用的时候再搬回来。速度慢,但能跑超大模型。

总结

显存是硬约束,选显卡先看显存。个人玩家:7B模型用12GB卡(RTX 3060 12G),13B用24GB(RTX 3090/4090),70B建议云GPU或量化到INT4。训练党:多卡并行+梯度累积。记住:显存不够,一切白搭。

本文来源:一江山水的随笔

本文地址:https://298.name/post/206.html

主要内容:GPU显存为啥是AI命门?不够用会怎样?

版权声明:如无特别注明,转载请注明本文地址!

相关文章
想找什么搜索会更快哦!
站点信息
  • 文章总数:171
  • 页面总数:1
  • 分类总数:4
  • 标签总数:170
  • 评论总数:61
  • 浏览总数:1643341
控制面板
您好,欢迎到访网站!
  查看权限
Top