B 和显存
- 推理显存估算:7B-float 是 28 GB,7B-BF16 是 14GB,7B-int8 是 7GB;其他版本以此类推即可。
- 训练的参数类型,只能是 float / BF16
- 训练 所需显存 保守估算 是 同参数同类型llm 推理 的 4倍。
- 例子:7B-float 训练 显存:28 * 4 = 112 GB
0. 背景
- 1K, 1M, 1B,英美常用的进制单位,以 1000 为进制;
- 1K = 1000,一千;
- 1M = 1000 K,百万;
- 1B = 1000 M,十亿;
注: 计算机 内存/磁盘 存储,基本单位是字节,进制是 1024,单位依次是:KB / MB / GB / TB 不要混淆了。
- 1 KB = 1024 B
- 1 MB = 1024 KB
- 1 GB = 1024 MB
1. 参数数量
以
Qwen-7B
为例,7B 的意思就是 这个 LLM 的 模型参数有 70亿 个 参数2. 数据类型
对于训练好的模型,参数类型版本可能有:
ㅤ | ㅤ | ㅤ |
float | 32位 浮点数 | 4 字节 |
half / BF16 | 16位 浮点数 | 2 字节 |
int8 | 8位 整数 | 1 字节 |
int4 | 4位 整数 | 0.5 字节 |
对具体的模型,对参数的版本一般会放到 Github README.md 的
量化
一节;参数类型所需要的存储越少,效果越差;
一般来说,参数数量是主因。例子:一般情况,对同一个架构的模型 13B-int8 就比 7B-BF16 会好。
3. 推理:显存
虽然还有其他因素也会用到显存,但无疑推理的显存大头就是 参数;
以
Qwen-7B-BF16
版本为例,需要显存 = 数量 * 类型大小 = 70亿 * 2字节 = 140亿字节所以 140亿 字节 = 14 * 1000 * 1000 * 1000 / 1024 / 1024 / 1024 = 14 * (1000 / 1024) ^3 = 14 * 0.93 = 13 GB
- 注1: (1000/1024)^3 = 0.93...
- 注2: 估算的话,干脆直接记 1就好了,也就是 7B-BF 就是 7 * 2 = 14 GB 的显存,因为除了参数,推理还需要另外的显存,溢出一点没坏处。
按估算,各个 llama2-13B 版本推理大概用到多少显存(假设存在对应类型)
参数类型 | 所需显存 |
float | 13 * 4 = 52 GB |
half / BF16 | 13 * 2 = 26 GB |
int8 | 13 GB |
int4 | 13 * 0.5 = 6.5 GB |
4. 训练:显存
为了让模型收敛,训练的参数类型不能是 int8 / int4;一般是 float,效果差点的 就用 BF16;
因为 反向传播 / Adam-优化 / Transformer架构 等因素,一般来说,训练需要的显存,是 同样规模 LLM 推理 的 3-4倍;
保守估计,按 4倍 计算。
例子:
Qwen-7B
训练需要的显存,估算结果:参数类型 | 所需显存 |
float | 7 * 4 * 4 = 112 GB |
half / BF16 | 7 * 2 * 4 = 56 GB |
5. GPU 大概 价格
型号 | 价格:人民币 | 显存 |
RTX 4080 Super | 8k | 16 GB |
RTX 4090 | 12k - 15k,限制 | 24 GB |
A800 | 9万-10万 | 40GB / 80 GB |
A100 | 12万-13万,限制 | 40GB / 80 GB |
H800 / H100 | 别看了,买不起,抢不到。。。 | ㅤ |
Loading...