FP32:32Bit,4个字节
FP16:32Bit,2个字节
1. 输入输出
batch_szieSequencehidden size * 2/1024/1024
一条的大小约为20M
可忽略不计
2. 模型参数
以Llama13B为例,1B=100031000^310003,1GB=102431024^310243byte FP16:13*2=26GB
3. 优化器
以Adam为例,需要保存梯度动量和二阶矩,而且是FP32,占用了13*4=52GB。‘
优化器必须使用FP32,防止小数相加sum
或者mean
操作后,变为0等问题。
并且还要保存模型参数13*4=52GB
一共需要156GB
4. 激活值
为了梯度传播,前向传播的激活值都要保存。这一部分与batch_size有关。
5. 梯度值
梯度使用FP16,一共13*2=26B
除了输入输出,激活值跟batchsize有关,其他一般都较为固定。一般显存占用就是8倍的模型大小。也可以直接使用多少B16,例如13B模型,约等于1316=208。