本文第一章:以LLaMA-2-13B模型为例,计算了大语言模型推理阶段所必须的GPU显存大小;
本文第二章:Deepseek-671b等不同参数量的模型,根据不同Token数以及不同并发请求数的情况下,所需要的GPU显存大小。
一、LLM推理阶段所需的GPU显存
大模型推理过程中对GPU显存的需求主要涉及三方面:模型权重(Model Weights)、KV缓存(Key-Value Cache)、额外内存开销(Memory Overhead)。
1.0 下面以LLaMA-2-13B模型为例:
1.1 模型权重(Model Weights)
对于 LLaMA-2-13B模型,参数量为130亿,每个参数( FP16)占2字节,模型大小 = 13 * 10^9 × 2 byte =26 * 10^9 byte= 26 GB
1.2 KV缓存(Key-Value Cache)
Transformer 模型中为了从不同的表示空间中学习不同角度的语义信息。比如有的 head 学习语法结构,有的 head 学习语义关联,有的 head 学习长距离依赖等,因此对于每层Transformer 设置了多个attention head(子注意力模块)。下面我们由浅入深,从(a) 、(b) 、(c) 、(d) 、(e) 来依次计算一下KV Cache:
(a) 1层Transformer ,1个attention head,1个token
对于每一个 attention head 来说:每个 token 会生成一个 key 向量和一个 value 向量,key 向量和 value 向量的长度都是128 (head_dim)
每个 token 在一个 attention head 中占用的空间包括key和value为:
key: head_dim × 2 Bytes = 256 字节(FP16);value: head_dim × 2 Bytes = 256 字节
因此,1层Transformer ,1个attention head,1个token下会占512byte的显存:512 字节 / token / attention head/Transformer
(b) 1层Transformer ,1个attention head,4096个token
接下来看1层Transformer ,1个attention head,4096个tokens中缓存多少内容:
KV Cache per head per layer per request =
max_seq_len (4096) × (key + value = 2) × head_dim (128) × precision_size (2 Bytes) = 4096 × 2 × 128 × 2 = 2,097,152 字节 ≈ 2 MB
因此,每个 attention head 缓存约 2MB 的 key/value 数据。
(c) 1层Transformer ,40个attention head,4096个tokens
如果你有 40 个 attention head,那么一层 Transformer 就需要:2,097,152 字节 × 40 heads = 83.89 MB / layer / request
(d) 40层Transformer ,40个attention head,4096个tokens,10个并发请求
那么40 层 × 10 个并发请求:83.89 MB × 40 layers × 10 requests = 33554 MB = 32 G
(e) KV Cache总计
KV Cache = kv_factor(2)
× head_dim (128) × precision_size (2 Bytes) ×max_seq_len (4096) × num_heads
× num_layers
× batch_size
= 2 × 128 × 2 × 4096 × 40 × 40 × 10 = 33,554,432,000字节≈33.55GB
参数名 | 含义 |
---|---|
num_layers | Transformer 层数(模型深度),40 |
num_heads | 每层的注意力头数量,40 |
head_dim | 每个注意力头中 key/value 向量的维度,128 |
max_seq_len | 单个请求的最大 token 数(即序列长度),4096 |
batch_size | 同时处理的请求数(并发数),10 |
kv_factor | 每个 token 要缓存 key 和 value 两个张量,2 |
precision_size | 每个浮点数值所占字节数,2 |
1.3 额外内存开销(Memory Overhead)
这部分包括:
- 中间激活值(Activation memory)
- 缓冲区(Scratch memory)、临时张量等
- 框架开销(如 PyTorch、TensorRT、vLLM 等)
一般经验上,这部分可以估计为:
Overhead=0.1×(26+33.55)≈5.955GB
1.4 总 GPU 显存
LLaMA-2 13B 在 10 并发、4096 Token 上下文场景下的显存需求估算
类别 | 数值 |
---|---|
模型权重 | 26 GB |
KV Cache | ~33.55 GB |
内存开销(10%) | ~5.96 GB |
总计 | ~65.5 GB |
实际部署中显存可能更低
- 使用 分片加载(Tensor Parallelism) 可以将模型拆到多个 GPU 上。
- 使用 KV Cache 压缩(如 vLLM) 可以降低内存占用。
- 使用 量化(INT8/INT4) 可大幅减少模型权重和中间激活内存。
- 使用 批处理优化(Batching Optimization) 可提高吞吐效率。
二、671b等大模型的显存表格
1、不同规模模型在不同序列长度下的显存需求
各规模模型在不同最大序列长度和10并发数下的显存需求如下表所示:
模型规模 | 4k | 8k | 32k | 64k | 128k |
---|---|---|---|---|---|
7B | 16.7GB | 33.3GB | 133.3GB | 266.6GB | 533.3GB |
13B | 33.5GB | 67.0GB | 268.0GB | 536.0GB | 1072.0GB |
30B | 74.5GB | 149.0GB | 596.0GB | 1192.0GB | 2384.0GB |
66B | 167.4GB | 334.8GB | 1339.2GB | 2678.4GB | 5356.8GB |
70B | 178.3GB | 356.6GB | 1426.4GB | 2852.8GB | 5705.6GB |
175B | 286.7GB | 573.3GB | 2293.3GB | 4586.7GB | 9173.3GB |
671B | 167.4GB | 334.8GB | 1339.2GB | 2678.4GB | 5356.8GB |
计算说明:
- 所有模型均采用FP16精度(2字节/参数)
- 并发数(batch_size)为10
- DeepSeek 671B的KV缓存已应用MLA架构压缩(乘以0.135(KV缓存压缩率))
2、不同规模模型的架构参数
上述模型都基于LLaMA-2系列架构参数和参数量规律,各规模模型的架构参数如下表所示:
模型规模 | 参数量 | 层数 | 注意力头数 | 隐层维度 | KV缓存压缩率 |
---|---|---|---|---|---|
7B | 7B | 32 | 32 | 4096 | 1.00 |
13B | 13B | 40 | 40 | 5120 | 1.00 |
30B | 30B | 48 | 48 | 6144 | 1.00 |
66B | 66B | 64 | 64 | 8192 | 1.00 |
70B | 70B | 80 | 64 | 8192 | 1.00 |
175B | 175B | 28 | 96 | 12288 | 1.00 |
671B | 671B | 80 | 128 | 8192 | 0.135 |
LLaMA-2系列:7B、13B、30B、66B、70B均采用标准Transformer架构,使用分组查询注意力(GQA)提高推理可扩展性。参数量与层数、头数和隐层维度的平方成正比。例如,LLaMA-2 7B有32层、32头、4096维度,而70B扩展为80层、64头、8192维度。
Falcon 175B:采用GQA架构,假设其有28层、96头、12288维度,总参数量约为175B。
DeepSeek 671B:采用多头潜在注意力(MLA)架构,将KV缓存压缩至原始大小的13.5%(每个token仅需70KB,而传统模型如LLaMA-3.1需要516KB)。这种压缩技术显著降低了长序列推理的内存需求。
三、LLM 训练阶段,需要数百 GB 的显存
以 LLaMA-2 13B 训练为例(FP32):
- 模型参数:13B × 4 Bytes = 52 GB
- 梯度存储:52 GB(和参数同规模)
- 优化器状态(AdamW):约 104 GB(含动量和方差)
- 中间激活值:几十 GB(取决于 batch size 和 seq length)
- 批量数据本身:也占一定内存
所以训练一个 LLaMA-2 13B 模型可能需要数百 GB 的显存,必须使用多卡分布式训练(如 DeepSpeed + ZeRO)。