怎样根据模型参数量计算推理时需要的显存?
怎样根据模型参数量计算推理时需要的显存?
随着开源大模型的快速发展,如何根据模型参数量计算所需的显存成为了很多开发者关心的问题。本文将详细介绍这一计算方法,并通过具体案例进行说明。
基本计算方法
假设我们有一块3090 24G的显卡,最关心的是能运行多大规模的模型。目前,模型参数绝大多数都是float32类型,占用4个字节。因此,一个粗略的计算方法是:每10亿个参数占用4G显存(实际计算为10^9*4/1024/1024/1024=3.725G,但为了方便计算,我们可以近似为4G)。
例如,LLaMA模型的参数量为7000559616,全精度加载这个模型参数需要的显存为:
7000559616 * 4 / 1024 / 1024 / 1024 = 26.08G
不同精度下的显存需求
除了全精度(FP32),模型还可以使用半精度(FP16/BF16)、8位精度和4位精度。不同精度下,每个参数占用的字节数不同,从而影响显存需求。
- 半精度(FP16/BF16):每个参数占用2个字节,所需显存降为全精度的一半。
- 8位精度:每个参数占用1个字节,所需显存降为全精度的1/4。
- 4位精度:每个参数占用0.5个字节,所需显存降为全精度的1/8。
具体案例分析
以Qwen1.5系列模型为例,该系列共推出了7个不同参数量的模型版本,分别是0.5B、1.8B、4B、7B、14B、32B、72B。以下是不同精度下所需的显存计算:
全精度(FP32):
0.5B:2G
1.8B:7.2G
4B:16G
7B:28G
14B:56G
32B:128G
72B:288G
半精度(FP16/BF16):
0.5B:1G
1.8B:3.6G
4B:8G
7B:14G
14B:28G
32B:64G
72B:144G
8位精度:
0.5B:0.5G
1.8B:1.8G
4B:4G
7B:7G
14B:14G
32B:32G
72B:72G
4位精度:
0.5B:0.25G
1.8B:0.9G
4B:2G
7B:3.5G
14B:7G
32B:16G
72B:36G
实际应用注意事项
需要注意的是,上述计算仅考虑了模型参数的显存需求。在实际推理过程中,还需要为模型运算时的一些临时变量(如beam search)预留空间。因此,在配置显存时,建议预留一定的Buffer,以避免出现显存不足(OOM)的情况。
参考资料:CSDN博客