karminski-牙医
26-01-27 15:49 微博认证:AI博主

一分钟学会估算大模型显存需求

刚有同学在评论区问我VibeVoice-ASR-9B需要多少现存运行, 于是我花点时间给大家写个特别简单的大模型用多少显存的判断方法:

首先确定大模型的参数量,比如一个模型是30B的。那就看它的精度,一般如果是16bit精度格式, 比如FP16, BF16, 那么就正好是60GB, 因为8bit一个字节, 16bit正好一个参数需要两个字节, 30B的参数正好是 30B×2Byte = 60GB. 那么举一反三, 如果是 8bit 精度, 比如 FP8, 那就正好是30GB, 如果是4bit量化格式, 那就再减半, 是15GB.

现在我们复杂一些, 上面说的是Dense模型的情况, 模型无论多大都要加载到显卡里(咱们不考虑参数卸载到内存的情况).

那MoE模型怎么算呢?MoE模型有两部分参数:共享参数和专家参数。比如DeepSeek-V3是671B总参数,但实际推理时只激活37B参数。关键在于你用什么推理框架:

情况一:llama.cpp 不进行参数卸载
这种情况最简单也最吃显存,需要把所有参数都加载到显存里。比如DeepSeek-V3用4bit量化就是 671B × 0.5Byte ≈ 335GB

情况二:llama.cpp 进行参数卸载
llama.cpp支持把部分层卸载到内存,比如放10层左右,显存占用约26GB,但这样推理速度会很慢,因为大量时间花在CPU和GPU之间的数据传输上

情况三:KTransformers的专家卸载优化
KTransformers更聪明,它专门针对MoE架构优化。它把共享参数(Attention层、Embedding等)放在显存里,只把激活的专家临时加载到显存计算完就换出去。对于DeepSeek-V3,共享参数大约是总参数的5%左右,加上当前激活的专家,4bit量化下大概只需要14-24GB显存就能跑起来,剩下的专家参数放在高速NVMe SSD或内存里按需加载。(当然实际也会受到NVMe带宽限制)

另外KVCache也需要显存,如果不用线性注意力,Meta当初宣传Llama-4支持1M上下文,那加上模型大约需要接近2TB显存。但现在如果模型支持且推理引擎配置线性注意力了一般都会几百兆规模,可以忽略。

#HOW I AI#

发布于 日本