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...
目录
文章列表
王小扬博客
产品
Think
Git
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP