以 Qwen3-4B-Thinking-2507 为例 理解大模型的显存占用
理解大模型的显存占用:显存花在哪了?
——以 Qwen3-4B-Thinking-2507 为例
最近几年,大模型从云端一路卷到个人电脑,甚至卷到了边缘设备。于是一个原本只属于深度学习工程师的词,开始高频出现:显存占用。
你可能也和我一样,经常在想:“4B 模型到底要多少显存?为什么我换了量化方式,显存并没有我想象中降那么多?上下文越长为什么越吃显存?”
如果你也有这些问题,那么这篇文章会帮你一次搞明白。
下面的内容既不晦涩,也不堆概念,我会把大模型显存占用的本质拆给你看,再结合 Qwen3-4B-Thinking-2507 做完整的例子,让你知道每一MB显存到底去哪了。
一、显存被占是因为三个东西:“模型、缓存、临时空间”
推理时,大模型需要三样东西:
- 模型本身(Weights)
- KV 缓存(Attention Cache)
- 算子需要的临时空间(Workspace)
听起来很简单,但实际占用量差别巨大。
如果你的模型显存占用远远超过“参数大小”,那八九不离十是被 KV Cache 吃掉了。
我们一个个拆。
二、模型权重:你能看到的显存
这部分最简单:参数量 × 精度。
比如 FP16:
4B × 2 bytes = 8GB
INT4 量化:
4B × 0.5 bytes = 2GB
所以你看到别人说 “4B 模型 INT4 后大概 2GB”,就是这个计算来的。
三、真正的显存:KV Cache
如果你觉得显存占用超过你计算的模型大小很多,那一定是它干的。
推理的时候,大模型对每个 token 都会缓存它的 Key 和 Value,这些缓存不会丢,一直保留到整个推理结束,因为未来所有 token 都要和它们算注意力。
每一层都要存一份 Key 和一份 Value,所以:
- token 越多 → 显存上涨
- 层越多 → 显存上涨
- Attention 头越多、维度越大 → 显存上涨
KV Cache 是动态增长的,而且是线性增长。
以 Qwen3-4B-Thinking-2507 举个例子:
它的结构如下:
- 32 层
- 24 个 attention heads
- head_dim = 128(因为 3072 / 24 = 128)
- 精度 FP16(KV Cache 是 16bit)
一个问题:每个 token 要多少显存?
算一下:
2(K,V) × 32 层 × 24 头 × 128 × 2 bytes
= 393,216 bytes
≈ 384 KB/每个 token
看到这个数字没?
一个 token 就 384KB。
你输入一句话 100 字,上下文 150 字,分词大概 200 token,就已经:
200 × 384KB ≈ 76.8MB
这还是非常短的上下文。
当你使用 4K 上下文时:
4K tokens × 384KB = 4,000 × 384KB ≈ 1.5GB
这才是真正耗显存的家伙。
这就是为什么:
- 量化权重再怎么省
- 上下文长一点
- 显存还是爆
因为 KV Cache 不会因为你做 INT4 就变成 INT4,它还是 FP16 或 BF16。
四、Workspace:永远存在的部分
不同库的 workspace 大小不同:
- cublas 大概 200~400MB
- FlashAttention 大概 400~700MB
- 一些框架会额外需要 1GB+
通常你可以按 1GB 左右 来估。
五、Qwen3-4B-Thinking-2507 真实占用是多少?
假设你用 INT4。
1)模型权重
≈ 2GB
2)KV Cache(4K 上下文)
≈ 1.5GB
3)Workspace
≈ 1GB
合计:
2GB + 1.5GB + 1GB ≈ 4.5GB
所以你看到网上许多人说:
“4B 模型 INT4,在 6GB 显卡上跑挺稳。”
是有道理的。
六、总结
模型占固定空间,KV Cache 才是显存的真正开销。
你可以量化模型,但无法量化 KV Cache。
上下文越长,KV Cache 越吃显存,越后面越夸张。
“不是模型太大,而是历史 token 越积越多。”
七、如何省显存
-
减少上下文长度
上下文从 8K → 4K,KV Cache 直接砍半。 -
选择 INT4 量化,权重最省
-
使用 FlashAttention-2/3 或与其兼容的代码
可以少 200~500MB 的临时显存。
八、最后
显存占用每一部分都有迹可循。只要你理解了权重、KV Cache、workspace 三者的作用,你就能快速算出一个模型是否能在某块显卡上跑。
更多推荐



所有评论(0)