本地部署大模型显存不够怎么办

模型与算力

显存不够时按量化降档、分层卸载、换小模型三条路走一遍,讲清每条路的代价、适用条件和动手顺序。

本地跑模型最常撞的墙就是显存爆掉:启动直接报 OOM,或者跑起来几轮对话就被吃掉一大截。很多人第一反应是把模型再压一档,结果质量掉得自己都不认识。这篇不讲原理课,只给一套排查顺序——先确认是权重占满还是上下文和并发吃掉的,再决定是降量化、开分层卸载,还是干脆换个参数规模更合适的模型。

本地跑模型最常撞的墙就是显存爆掉:启动直接报 OOM,或者跑起来几轮对话就被吃掉一大截,甚至几个请求一起进来就崩。很多人第一反应是把模型再压一档,结果质量掉得自己都不认识,白折腾一圈。

这篇不讲原理课,只给一套排查顺序——先确认是权重占满,还是上下文和并发吃掉的,再决定是降量化、开分层卸载,还是干脆换个参数规模更合适的模型。三条路各有代价,别一上来就全上。

先定位:显存到底被谁吃掉了

显存占用大致分三块:模型权重本身、KV 缓存、以及框架和显存碎片的预留。权重是固定开销,KV 缓存会随上下文长度和并发数往上走,碎片预留则跟框架和驱动有关。

  • 把上下文长度调到最短、并发降到 1,再启动一次;如果这时候能跑起来,问题多半在缓存不在权重
  • 记录现象属于哪一类:启动即 OOM、跑一会儿才 OOM、还是多请求才 OOM,三种对应三种解法
  • 动手前先看显卡实际可用显存,别按标称算,桌面环境和其他进程会一直吃掉一块
  • 顺手看一眼系统内存占用,卸载和切分路线会把压力转到内存上
现象大概率原因先看哪
启动就报错权重超出显存量化档位、模型规模
跑几轮才崩KV 缓存涨满上下文长度、历史轮数
单请求没事,多个一起崩并发占用叠加并发上限、排队策略
不定期随机崩显存碎片或内存不足框架参数、系统内存

路线一:降量化档位,代价最小但要看任务

从高精度往低精度走,显存大致按位宽等比下降,但质量损失不是线性的,越往低档位掉得越明显。所以降档不是越低越好,而是找到任务还能接受的那一档。

  • 适合降档的任务:分类、信息抽取、摘要、格式转换,这类任务对细节容忍度高
  • 不适合硬降的任务:长链条推导、代码生成、多语言混排,低档位容易出现结构崩坏
  • 降档后做一次验证:拿五到十条你自己的真实输入重跑,对比输出结构和字段是否还稳定
  • 不要同时堆多组档位组合,先固定一档跑通,再往下试一档,否则排查不了是哪一步坏的

各档位在常见硬件上的实际表现差异,站内有专门的实测记录,可以去 /tools/speed-test 看当时的数字,别只信参数表。

路线二:分层卸载与张量切分,慢一点但能跑起来

  1. 先小比例试把少量层放到内存,启动后看显存余量和每 token 速度,能接受再加大比例
  2. 盯住内存卸载是把压力从显存转到内存,内存不够会从 OOM 变成系统级卡死,先看内存余量
  3. 多卡再谈切分张量切分把权重摊到多张卡上,但卡间带宽跟不上时,通信比计算还久,先确认互联条件
  4. 记录可接受点把能跑稳的比例和速度记下来,下次直接复用,不用重新试

这条路线的特点是用速度换可行性。如果你要做的是交互式对话,速度掉太多体验会很差;如果是离线批处理,慢一点基本无所谓。

路线三:砍上下文和并发,最容易被忽略的一步

上下文窗口开多大,KV 缓存就跟着占多少。日常问答根本用不到超长窗口,把系统提示词和历史轮数裁剪一遍,往往能省出可观的一块,而且对多数任务效果没影响。

  • 按实际需要设上下文长度,别默认拉满,拉满的代价是每轮都在为用不到的空间付费
  • 并发数是显存杀手,单请求能跑不代表能同时跑几个,压测前先按单并发跑稳
  • 裁剪历史轮数:把过期的对话摘要掉或直接丢弃,多数任务不需要全量历史
  • 并发上限设在刚好够用的位置,超出就排队,别让请求把显存顶爆

这一块和量化叠加使用,通常比一味往低档位压更划算,因为省下来的显存不牺牲模型权重质量。

路线四:换模型或换卡,承认配置不匹配

模型规模和显存档位有基本对应关系,硬塞只会换来极低速度。换一个参数规模更合适的同系列小尺寸版本,微调和提示词的迁移成本最低,通常比继续折腾量化更省心。

你的情况优先动作不适用的情况
单张消费级卡,要跑大模型换小尺寸版本或降档对输出质量要求极高时
多张卡但带宽一般先试小比例卸载延迟敏感场景
机器内存也紧张优先砍上下文和并发已经调到最低仍不够
预算允许升级按测算页算卡数再买需求还会继续变大时

判断线很直白:如果为了跑通已经牺牲到影响输出质量,那这条路线其实已经失败了,不如承认配置不匹配,换模型或换硬件。真要守住大模型,先按部署测算把卡数算清楚再下单,站内 /sites 有各家方案的对照,可以去核对当时的数字。

下一步把你现在能跑通的档位、上下文和并发记下来,再去站内看看同类硬件的实测与方案对照,比凭感觉升级省事得多。

常见问题

降到低档量化后效果明显变差,还有别的办法吗?

先确认不是上下文和并发把显存吃掉才被迫降档的。把窗口调小、并发降到 1 再试一次,很多时候能回到高一档的量化。如果确实是权重本身超了,就按任务分:对格式和抽取类任务低档位通常能扛住,对推导和代码类任务建议换更小的模型而不是硬降精度。

开了 CPU 卸载之后速度慢得没法用,怎么调?

卸载比例越小越快,先从小比例开始,边跑边看显存余量,找到刚好不 OOM 的那个点。同时把上下文和并发一起压下来,很多情况下压完就不需要卸载了。另外要确认内存够用,卸载是把压力转到内存,内存不足会比显存不足更难排查。

不想折腾参数,直接换张显存更大的卡是不是更省事?

省事但未必省钱,取决于你跑多久、多频繁。短期验证阶段换卡成本最低;长期高频使用要先算一版租卡和买卡的账再动手。另外显存变大不代表推理变快,带宽和并发能力也要一起看,具体数字到站内部署测算页面按你的模型算一遍更靠谱。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。