大模型各参数的推理、训练和微调分别需要多大显存?
2025年4月29日,阿里开源新一代通义千问模型 Qwen3。其中包含两个MoE模型的权重:Qwen3-235B-A22B,一个拥有 2350 多亿总参数和 220 多亿激活参数的大模型,以及Qwen3-30B-A3B,一个拥有约 300 亿总参数和 30 亿激活参数的小型 MoE 模型。此外,六个 Dense 模型也已开源,包括 Qwen3-32B、Qwen3-14B、Qwen3-8B、Qwen3-4B、Qwen3-1.7B 和 Qwen3-0.6B。
影响因素
那么对各个模型而言,在推理、训练和LoRA微调过程中的显存需求该如何计算呢?LlamaFactory的官网有大模型显存需求分析工具,但是已经很久没有更新了:显存计算器 - 大模型显存需求分析工具 | LlamaFactory | LlamaFactory。大模型的显存需求主要受到以下几个变量的直接影响:
模型的参数量;训练/推理时的精度模式(FP32/FP16/BF16/INT8,分别代表32 位单精度浮点数/16 位半精度浮点数/16 位脑浮点数/8 位整型量化);训练所采用的优化器的类别(SGD/AdamW)
推理显存需求
在推理阶段,显存主要用于存储模型的权重,所以粗略的计算方法就是 显存占用=参数数量 * 类型大小,此处以BF16类型的Qwen3-8B模型为例,因为BF16为16 位脑浮点数,每个参数需要占用2个字节,8B个参数一共需要8B×2=16GB,也就是说存储模型的权重就需要大约16GB的显存空间了,此外,还有包括KV Cache(键值缓存)等需要用到显存资源的部分。
训练显存需求
训练阶段一般使用的参数类型都是FP32或BF16,而显存主要包括两个部分,分别是模型状态显存(Model States Memory)和残余状态显存(Residual States Memory),前者主要包含模型参数、梯度以及优化器的状态参数,其中梯度等于模型参数的一倍。
模型状态显存 = (模型参数 + 梯度) * 参数类型 + 优化器状态参数
而常见的优化器以SGD和AdamW为例,前者维护的是梯度状态,后者维护的是梯度加一阶矩+二阶矩,所以SGB优化器占用显存和全精度(FP32)模型权重一样,AdamW每个参数需要占用八个字节,因为需要维护三个状态,所以占用显存是全精度模型权重的3倍。
对于BF16类型的Qwen3-8B模型而言,如果使用的是AdamW优化器,则一共需要
(8B + 8B) * 2 + 8B * 4 * 3 = 96 GB
残余状态显存则包括了激活值(用于反向传播梯度计算)、临时缓冲区,主要还是激活值中受到batch size和序列长度的影响。对这部分感兴趣的读者可以直接阅读[参考 1]。
LoRA微调显存需求
Lora节省显存的方式是通过冻结模型主体部分,从而使得优化器中只存储低秩矩阵的参数。假设低秩分解时
r
<
<
d
m
o
d
e
l
r << d_{model}
r< 模型状态显存 = (模型参数 + 梯度 * 0.01) * 参数类型 + 优化器状态参数 * 0.01 对于BF16类型的Qwen3-8B模型而言,如果使用的是AdamW优化器,则一共需要 (8B + 8B * 0.01) * 2 + 8B * 4 * 3 *0.01 = 17.12GB 对残余部分所占用的显存则需要根据输入的样本大小来计算。 开源工具: 模型训练显存占用计算工具 参考: 模型训练显存到底怎么算 大模型不同参数下的模型显存计算公式 LoRA微调大模型显存占用分析 大模型参数量和占的显存怎么换算-高赞回答