一、显存占用核心组成部分
大语言模型在GPU上运行时的显存占用主要包括以下几个部分:
1. 模型参数
在模型推理时首先需要存储模型本身的参数,其占用的显存计算公式为:参数量 x 参数精度。常用的参数精度有FP32(4字节)、FP16(2字节)、BF16 (2字节)。对于大语言模型,模型参数通常采用FP16或BF16。因此,以参数精度为FP16,参数量为7B的模型为例,其所需显存为:7B × 2B = 14 GB
每个参数根据精度占用不同字节数:
FP32(单精度浮点数):4字节/参数
FP16(半精度浮点数)/BF16:2字节/参数
INT8(8位整数):1字节/参数
INT4(4位整数):0.5字节/参数
2. 梯度
通常与参数精度相同
训练时需要,推理时不需要
3. 优化器状态
Adam优化器需要保存动量和方差
通常每个参数占用8-12字节(根据优化器类型)
4. 激活值
在大语言模型推理过程中,需要计算每层神经元的激活值,其占用显存与批量大小、序列长度和模型架构(层数、隐藏层大小)正相关,关系式可以表示为:
其中:
b(batch size):单次请求批量大小,在作为在线服务时通常为1,作为批处理接口时不为1。
s(sequence length):整个序列长度,包括输入输出(token数量)。
h(hidden size):模型隐藏层维度。
L(Layers):模型Transformer层数。
param_bytes:激活值存储的精度,一般为2字节。
结合以上因素和实践经验,为简化显存估算,且留有一定余量,以一个7B模型为例,b为1,s为2048,param_bytes为2字节时,激活值所占显存可以大致按照10%的模型所占显存进行估算,即:
5. KV Cache(推理时)
为加速大语言模型的推理效率,通常会缓存每层Transformer已经计算完成的键K(Key)和值V(Value),避免每个时间步重新计算所有历史token的注意力机制参数。引入KV缓存后,其计算量从
其中:
2:表示需要存储K(Key)和V(Value)两个矩阵。
b(batch size):单次请求批量大小,在作为在线服务时通常为1,作为批处理接口时不为1。
s(sequence length):整个序列长度,包括输入输出(token数量)。
h(hidden size):模型隐藏层维度。
L(Layers):模型Transformer层数。
C(Concurrent):服务接口请求的并发度。
param_bytes:激活值存储的精度,一般为2字节 。
结合以上因素和实践经验,为简化显存估算,且留有一定余量,以一个7B模型为例,当C为1,b为1,s为2048,param_bytes为2字节时,KV缓存所占显存也大致按照10%的模型所占显存进行估算,即:
6. 其他
除了以上影响因素外,当前批次的输入数据、CUDA核心、PyTorch/TensorFlow深度学习框架本身等也会占用一些显存,通常为1~2GB。
根据以上因素分析,对于7B的大模型,通常情况下模型推理部署最低需要的显存约为:
二、资源需求核心计算公式
1. 推理场景显存公式
总显存 ≈ 模型参数 + KV Cache + 激活值 + 其他开销(1-2GB) 模型参数 = 参数量 × 精度字节数 KV Cache = 2 × Batch Size × 序列长度 × 层数 × 隐层维度 × 精度字节数 激活值 ≈ 参数显存的10-20%(简化估算)
2. 训练场景显存公式
总显存 ≈ 模型参数 + 梯度 + 优化器状态 + 激活值 + 其他开销 模型参数 = 参数量 × 2字节(FP16) 梯度 = 参数量 × 2字节(FP16) 优化器状态(AdamW)= 参数量 × 12字节(FP32参数副本+动量+方差) 激活值 = 与Batch Size、序列长度正相关,通常占参数显存的20-50%
3. CPU与内存需求原则
CPU核心数:训练场景建议为GPU数量的2-4倍,推理场景可适当降低
系统内存:训练时建议≥ GPU显存总量,推理时需容纳完整模型权重(特别是CPU卸载场景)
三、实际计算示例
示例1:推理场景 - 加载Llama 2 7B模型 (FP16)
模型信息:
参数量:7B = 7 × 10⁹
精度:FP16 (2字节/参数)
假设batch size = 1,序列长度 = 2048
层数 = 32,注意力头数 = 32,隐层维度 = 4096
计算步骤:
1.模型参数显存:
7B × 2字节 = 14GB
2.KV Cache显存:
每层KV Cache大小 = 2(Key和Value) × 序列长度 × 隐层维度 × 2字节 = 2 × 2048 × 4096 × 2 = 33.55MB 总KV Cache = 33.55MB × 32层 ≈ 1.07GB
中间激活值(估算)≈ 0.5GB
总显存需求:
14GB + 1.07GB + 0.5GB = 15.57GB 加上10%预留 ≈ 17.13GB
结论:至少需要24GB显存的GPU(如RTX 3090/4090)
示例2:训练场景 - 微调Llama 2 7B (混合精度训练)
模型信息:
参数量:7B
使用混合精度训练(参数存FP16,优化器状态FP32)
batch size = 4,序列长度 = 512
计算步骤:
模型参数(FP16):7B × 2 = 14GB
梯度(FP16):7B × 2 = 14GB
优化器状态(Adam):
FP32参数副本:7B × 4 = 28GB
动量:7B × 4 = 28GB
方差:7B × 4 = 28GB
小计:84GB
激活值(估算):
与batch size、序列长度相关
粗略估算 ≈ 参数量的20-30% ≈ 2GB
总显存:
14GB + 14GB + 84GB + 2GB = 114GB 加上10%预留 ≈ 125.4GB
结论:需要多卡训练,如4×A100 (80GB)或8×A100
示例3:常见模型的推理显存需求
| 模型 | 参数量 | 精度 | 理论参数显存 | 实际推理显存 |
|---|---|---|---|---|
| BERT-base | 110M | FP16 | 220MB | 约1-2GB |
| BERT-large | 340M | FP16 | 680MB | 约2-3GB |
| GPT-2 1.5B | 1.5B | FP16 | 3GB | 约6-8GB |
| Llama 2 7B | 7B | FP16 | 14GB | 约16-20GB |
| Llama 2 13B | 13B | FP16 | 26GB | 约28-32GB |
| Llama 2 70B | 70B | FP16 | 140GB | 约150-160GB |
| GPT-3 175B | 175B | FP16 | 350GB | 约380-400GB |
四、降低显存占用的技巧
1. 量化技术
INT8量化:显存减少50%
INT4量化:显存减少75%
示例:Llama 2 7B INT8版本 ≈ 7GB
2. 参数高效微调
LoRA:只训练少量参数
显存需求可降低60-70%
3. 梯度检查点
用计算换显存
可减少30-50%激活值显存
4. 分布式策略
模型并行
张量并行
流水线并行
五、实用工具推荐
1.LLM 推理: 显存与性能计算器
2.Hugging Face 显存计算器
3.大模型训练计算器
4.LLM显存占用计算器
https://help.aliyun.com/zh/pai/getting-started/estimation-of-the-required-video-memory-for-the-model
六、快速估算口诀
推理:参数量(GB) × 1.2 ≈ 实际需求
全参数训练:参数量(GB) × 8-12 ≈ 实际需求
LoRA微调:参数量(GB) × 4-6 ≈ 实际需求
例如:7B模型FP16 = 14GB
推理:14 × 1.2 ≈ 16.8GB
全参数训练:14 × 10 ≈ 140GB
LoRA微调:14 × 5 ≈ 70GB
参考: