引用外网的一篇文章《The Complete Guide to GPU Requirements for Training and Inference of LLM》,这里做一个学习总结。
大模型训练所需的显存总量由以下几个部分组成:
- 模型参数,model parameters ,指的是神经网络中那些可以学习的组成部分。通过最小化损失函数(loss function)来实现更新,一般是 weight 和 bias。
- 激活层,activations,指的是输入数据通过网络时每一层之间的数据传输。在输入数据前向传播阶段,每一层结合weight 和 bias 进行计算,然后通过激活函数(例如ReLU,sigmoid等)来产生激活数据,这些激活数据作为下一层的输入。
- 梯度,gradients,梯度是损失函数相对于模型参数的偏导数。决定了每个参数应调整多少以最小化损失函数。
- 优化器,optimizer,优化器状态是由某些优化算法(如Adam、RMSprop)维护的附加变量,以提高训练效率。这些状态根据过去的梯度帮助更新模型参数。
采用不同类型的数据类型,每个参数(parameter)的大小也不同:
- float,32-bit floating point:每个参数占4个字节(byte)。
- half/BF16,16-bit floating point:每个参数占2个字节。
- int8,8-bit integer:每个参数占1个字节。
- int4,4-bit integer:每个参数占0.5个字节。
模型参数的显存计算
计算公式为
M=P∗432/Q∗1.2 M=\frac{P*4}{32/Q} * 1.2 M=32/QP∗4∗1.2
其中PPP是参数个数,例如:1B的模型参数量就是10亿,也就是 1∗1091*10^91∗109 。QQQ 是所选择的bit数,例如前面提到的32bits,16bits,8bits,4bits。假设要训练一个基于 16bits 构建的 Llama 70B 模型。
M=70∗109∗4bytes32/16∗1.2=(140∗109bytes)∗1.2=168GB M=\frac{70*10^9*4bytes}{32/16}*1.2=(140*10^9bytes)*1.2=168GB M=32/1670∗10

最低0.47元/天 解锁文章
23万+

被折叠的 条评论
为什么被折叠?



