赞
踩
全精度llama2 7B最低显存要求:28GB
全精度llama2 13B最低显存要求:52GB
全精度llama2 70B最低显存要求:280GB
16精度llama2 7B预测最低显存要求:14GB
16精度llama2 13B预测最低显存要求:26GB
16精度llama2 70B预测最低显存要求:140GB
8精度llama2 7B预测最低显存要求:7GB
8精度llama2 13B预测最低显存要求:13GB
8精度llama2 70B预测最低显存要求:70GB
4精度llama2 7B预测最低显存要求:3.5GB
4精度llama2 13B预测最低显存要求:6.5GB
4精度llama2 70B预测最低显存要求:35GB
目前模型的参数绝大多数都是float32
类型, 占用4个字节。所以一个粗略的计算方法就是,每10亿个参数,占用4G显存(实际应该是10^9*4/1024/1024/1024=3.725G
,为了方便可以记为4G)。
比如LLaMA的参数量为7000559616,7B(70亿), 那么全精度加载这个模型参数需要的显存为:
7000559616 * 4 /1024/1024/1024 = 26.08G | 4G * 7 = 28G
如果用用半精度的FP16/BF16
来加载,这样每个参数只占2个字节,所需显存就降为一半,只需要13.04G。
目前int4就是最低精度了,再往下效果就很难保证了。比如百川给的量化结果对比如下:
注意上面只是加载模型到显存,模型运算时的一些临时变量也需要申请空间,比如你beam search的时候。所以真正做推理的时候记得留一些Buffer,不然就容易OOM。
如果显存还不够,就只能采用Memery Offload的技术,把部分显存的内容给挪到内存,但是这样会显著降低推理速度。
dtype | 每10亿参数需要占用内存 |
---|---|
float32 | 4G |
fp16/bf16 | 2G |
int8 | 1G |
int4 | 0.5G |
以LLM中最常见的Adam + fp16混合精度训练
为例,分析其显存占用有以下四个部分:
GPT-2含有1.5B个参数,如果用fp16格式,只需要1.5G*2Byte=3GB显存, 但是模型状态实际上需要耗费1.5B*16=24GB.
llama2 7B最低显存要求:如果用fp16格式,只需要7G*2Byte=14GB显存, 但是模型状态实际上需要耗费7B*16=112GB.
比如说有一个模型参数量是1M,在一般的深度学习框架中(比如说PyTorch),一般是32位存储。32位存储的意思就是1个参数用32个bit来存储。那么这个拥有1M参数量的模型所需要的存储空间的大小即为:1M * 32 bit = 32Mb = 1M * 4Byte = 4MB。因为1 Byte = 8 bit。现在的quantization技术就是减少参数量所占的位数:比如用16位存储,那么:所需要的存储空间的大小即为:1M * 16 bit = 16Mb = 2MB。
全参数微调LLaMA-2-7B:
1. 开启zero3且不offload时,全参数微调最少需要显存可以估计为n_params
(in Billion)16个GB。所以7*16=112GB,大约是1120/80=1.4张80G的A100显卡,大概是1台机器的2张卡。这里估计的只是把模型、梯度和优化器放下需要的显存,前向计算还需要额外的显存。
全参数微调LLaMA-2-70B:
1. 开启zero3且不offload时,全参数微调最少需要显存可以估计为n_params
(in Billion)16个GB。所以70*16=1120GB,大约是1120/80=14张80G的显卡,大概是两台机器。这里估计的只是把模型、梯度和优化器放下需要的显存,前向计算还需要额外的显存。
测试1 | 测试2 | |
---|---|---|
setting | huggingface trainer 数据长度吃满 | 同 |
nnodes | 4 | 4 |
ngpus_per_node | 8 | 8 |
batch_size_per_device | 1 | 3 |
gradient_accumulate_steps | 16 | 3 |
global_batch_size (前面4个的乘积) | 512 | 288 |
每步需要的时间,秒 (稳定训练若干步后) | 249.56 | 105.30 |
nvidia-smi看到的显存占用,MB | 71000 | 75000 |
训练120k个样本需要的时间 | 14h50m | 11h57m |
可以看出,要想训练快,还是要把batch_size_per_device尽量开大一些。
保存checkpoint的时候只需要模型参数(fp16)和优化器状态(fp32)就行了。
对于70B的模型,使用AdamW训练时优化器的参数量是模型本身的两倍,所以最后算起来每个checkpoint需要70 * 2 + 70 * 2 * 4 = 700GB
,还是非常大的。建议设置一下hf trainer的--save_total_limit number
,把太早的checkpoint删掉,避免集群的磁盘满了。
结论如下:
16Φ
更接近真实的显存占用,那么24G的3090的模型容量上限是1.5B(差不多是GPT-2的水平),80G的A100的模型容量上限是5B赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。