大模型背后的秘密:轻松理解参数与内存占用小知识
时间:
谈及大模型,时常能够目睹诸如模型的参数规模为 9B、13B、70B……之类,那么这“B”究竟所指何意?FP32、TF32、F16、BF16 又意味着什么?不同的模型参数规模在推理时究竟需要多少 GPU 显存?训练时又需要多大的显存?接下来,让我们以最为直白的方式揭开这些的神秘面纱吧!

“B”究竟所指何意?
“B”乃是大模型参数规模的表征:1B 意味着 10 亿参数。通常来讲,模型的参数量越大,其准确性便越高,也就越‘智能’;
FP32、TF32、F16、BF16 又意味着什么?
一个浮点数由三部分构成:符号位、指数位、尾数位。
- 符号位皆为 1 位(0 :正,1:负);
- 指数位对浮点数的范围产生影响,小数位则关乎精度;
- TF32并非具有 32bit,实则仅有 19bit,切不可记错。
- BF16 指的是 Brain Float 16,由 Google Brain 团队所提出。

FP32、TF32、F16、BF16

不同的模型参数规模在推理时究竟需要多少 GPU 显存?
有个简化的计算公式:
M = (P*4B)*(32/Q)*1.2
- M:GPU内存(单位:GB)
- P:模型参数规模(单位:十亿,B)
- Q:量化位数(32位,16位,8位,4位)
- 1.2:20%开销因子
以运行16位精度的 chatglm-9b 模型所需的 GPU 内存为例,套用公式:
该模型有 90 亿参数:M = (9 ∗ 4) / (32 / 16) ∗ 1.2 ≈ 21.6 GB
4 位量化的 chatglm-9b:M = (9 ∗ 4) / (32 / 4) ∗ 1.2 ≈ 5.4GB
通常而言,量化是一种缩减内存占用的方式,不过,这需要审慎使用,以维系模型的性能,毕竟降低精度或许会对输出的准确性造成影响。
训练时又需要多大的显存?
比如我们训 7B 模型以 8 卡为单位 8*8 卡训,70B 模型以 80 卡为单位 80*6 卡训,Llama Factory里给出训练任务的显存预估表格,可以参考一下:
