GPU显存计算¶
获取基本参数¶
获取参数量
获取 KV 的 kv_dim 和 num_KV_heads
获取支持的最大token数(max_position_embeddings)
算显存占用¶
总公式
= <KV缓存大小> * <KV缓存数量>
一个 <KV缓存大小> 公式
= <KV_dim> * <num_KV_heads> * 2
以 Qwen2.5-7B 为例¶
获取基本参数¶
config.json 文件内容:
{
"architectures": [
"Qwen2ForCausalLM"
],
"attention_dropout": 0.0,
"bos_token_id": 151643,
"eos_token_id": 151645,
"hidden_act": "silu",
"hidden_size": 2048,
"initializer_range": 0.02,
"intermediate_size": 11008,
"max_position_embeddings": 32768,
"max_window_layers": 70,
"model_type": "qwen2",
"num_attention_heads": 16,
"num_hidden_layers": 36,
"num_key_value_heads": 2,
"rms_norm_eps": 1e-06,
"rope_theta": 1000000.0,
"sliding_window": 32768,
"tie_word_embeddings": true,
"torch_dtype": "bfloat16",
"transformers_version": "4.43.1",
"use_cache": true,
"use_sliding_window": false,
"vocab_size": 151936
}
获取关键参数:
模型维度相关
“hidden_size”: 2048
“intermediate_size”: 11008 # FFN 层的中间层维度
“num_hidden_layers”: 36 # Transformer 层数
“num_attention_heads”: 16 # 注意力头数
“num_key_value_heads”: 2 # 启动GQA机制,表示只用 2 个 key/value 头,节省 KV-cache 开销。
注意力机制与位置编码
“max_position_embeddings”: 32768 # 支持的最大 token 数
Token 配置
“vocab_size”: 151936 # 词表大小
激活函数
“hidden_act”: “silu” # 对应的 FFN 乘以 3
计算用到的其他参数
group_size: num_attention_heads/num_key_value_heads
= 16/2 = 8
head_dim: hidden_size / config.num_attention_heads
= 2048 / 16 = 128
kv_dim: num_key_value_heads × head_dim
= 2 × 128 = 256
计算参数量¶
参数量:
1. 嵌入层:151936 * 2048
2. 注意力层:36 * 2048 * 2048 * (2 + 2/8)
3. FFN层:36 * 2048 * 11008 * 3
4. 输出层:2048 * 151936
总参数量:
= 151936 * 2048 + 36 * 2048 * 2048 * (2 + 2/8) + 36 * 2048 * 11008 * 3 + 2048 * 151936
= 151936 * 2048 * 2 + 36 * 2048 * (2048*2.25 + 3*11008)
= 151936 * 4k + 72 * (2048*2.25 + 3*11008)k
= 593.5M + 72 * (4.5 + 32.25)M
= 3239.5M
显存占用¶
以 FP16 为例
模型参数占显存:
= <模型参数量> * 2
= 3239.5M * 2
= 6479M
KV缓存占显存:
总公式 = <KV缓存大小> * <KV缓存数量> * 2
一个 <KV缓存大小>
= <KV_dim>
= <KV_head> * <num_KV_heads>
= 128 * 2
= 256
一个K, 一个V 有
= 2 * 256
=512
使用FP16
= 512 * 2
= 1024
Transformers 层数为 36
= 36 * 1024
= 36 K
Sequence_size:
如果序列长度为 1024
= 1024 * 36K
= 36M
最大max_position_embeddings: 32768
= 32768 * 36K
= 1152M
约 1.152G
说明1:
batch_size
如果有
batch_size
还要乘以batch_size
说明2:不使用 GQA 的情况
首先模型参数会增加
KV Cache方面
一个 <KV缓存大小> = 2048
比不使用 GQA 占用显存多 8 倍