模型加载报显存不足,不一定是参数量本身超限:权重之外还有推理框架、临时张量和缓存。处理时先做显存容量与模型参数规模匹配,再决定降精度还是缩短上下文,避免只看显卡标称容量。
先算权重:参数量决定基础门槛
可用一个快速估算:参数量以十亿(B)计,FP16或BF16权重约需每B参数2GB;8位量化约1GB,4位量化约0.5GB。比如一个7B模型,FP16权重约14GB,4位权重理论上约3.5GB。这里按十进制GB估算,实际占用会因量化元数据、对齐方式和加载实现而增加。
权重只是底线。运行时还要给框架、激活值和其他缓冲留空间;显存接近满载时,稍有额外开销就可能加载失败。因此显存容量与模型参数规模匹配,应以系统显示的可用显存为准,而不是把整张卡的标称容量都分配给模型。
再看上下文:缓存会随长度增长
生成式模型的KV缓存保存已处理文本的键和值。上下文窗口越长、批次越大,缓存通常越大;采用分组查询注意力等结构时,缓存大小也会与普通多头注意力不同。
用模型结构估算缓存
例如,假设模型有32层、每层8个KV头、头维度128,单条序列长度为8192,缓存使用16位数值,那么K和V合计约需1GiB。计算依据是:2(K与V)×层数×KV头数×头维度×序列长度×每元素字节数。不同模型结构、精度和推理框架会改变结果,这只是说明上下文增长会带来额外显存开销,并非所有模型的固定值。
按顺序调整,避免盲目降精度
- 确认可用显存:关闭占用显存的其他程序,重新查看空闲容量;同时确认模型文件、推理框架和设备设置一致。
- 先缩短上下文窗口:把最大上下文从较长设置调低,例如先试4096或2048,再按任务需要逐步增加。长文档问答需要更长上下文,短文本分类通常不必预留很大窗口。
- 降低权重精度:若权重仍放不下,可从16位改为8位或4位量化。低比特量化通常更省显存,但可能影响输出质量,也要求推理工具支持相应格式;对数值敏感的任务应先比较结果。
- 最后调整并发和批次:减少同时处理的请求数,或减小批次。若单条短上下文可以加载、增加长度后才溢出,重点检查KV缓存;若加载权重阶段就失败,应先处理权重精度或模型规模。
显存容量与模型参数规模匹配的实用原则是:先确保权重留有余量,再为缓存和运行开销预留空间。量化不能保证任何设置都能装入,最终还要结合上下文窗口、并发数及具体推理框架试跑。
常见问题
4位量化后,显存一定减半吗?
不一定。理论上4位权重约为16位权重的四分之一,但元数据、缓存及运行开销不会同比缩小。

只缩短上下文就能解决加载失败吗?
若溢出发生在缓存分配阶段,缩短上下文可能有效;若模型权重本身已超过可用显存,则需要降低精度或使用更小模型。
显存还剩一点时,能否直接启动?
可以尝试,但加载和生成过程仍可能申请额外空间。显存容量与模型参数规模匹配时应保留余量,并从较短上下文、较低并发开始验证。


