排错 · 性能
显存/内存不够跑本地模型?6 个降配技巧
本地跑模型最常见的劝退信息就是 CUDA out of memory——显存爆了,模型加载到一半崩。但显卡不够强不代表玩不了,下面 6 招能把要求一点点压下来,旧卡甚至核显也能跑个小模型先把流程走通。先记住一个心法:不是非得一次跑最大的模型,先跑得动,再谈跑得好。
先搞清楚是谁不够
- 显存(VRAM)不够:报
CUDA out of memory这类,模型主要靠显卡跑时是这个。 - 内存(RAM)不够:系统卡死、进程被杀,纯 CPU 跑或卸载层到内存时容易撞。
下面的招分别对应这两种,按你的情况挑着用。
1. 用量化版本:显存直接砍一多半
量化就是把模型权重从高精度压成低精度(比如 4-bit),体积和显存占用大幅下降,质量损失多数日常任务感觉不出。这是性价比最高的一招:优先找模型的 4-bit / 8-bit 量化版本来跑,而不是原始全精度版。质量敏感的活用 8-bit 折中。
2. 换一个更小的模型
参数量小一档,显存需求就低一截。新手别一上来就挑最大的,先用小模型把龙虾的工具调用、任务流程跑通,确认配置没问题,再按显存余量往上加。哪些模型适合当龙虾大脑、对硬件多挑剔,可参考 哪个模型当大脑更合适。
3. 卸载部分层到内存(offload)
显存只差一点点时,可以把模型的一部分层放到内存里算,显存放不下的由内存兜底。代价是速度变慢,但能让原本加载不进去的模型至少跑得动。很多本地推理工具都有「GPU 层数」这类设置,把放进显存的层数调小即可。
4. 裁剪上下文长度
上下文窗口越大,占的显存越多,且是随对话变长持续涨的。把上下文上限调小,能省下一块固定开销。智能体跑长任务时这点尤其有用——不需要它记住整段历史的任务,把窗口设小能明显降压。
5. 给系统加 swap(应急兜底)
内存不够导致进程被系统杀掉时,加一块 swap(虚拟内存)能兜底,避免直接崩。这只是应急——swap 比内存慢很多,靠它跑会卡,但「能跑」总好过「崩溃」。等你确认值得,再考虑加内存条这种真解。
6. 跑模型前清场
浏览器开几十个标签、别的吃显存的程序还开着,都会挤占资源。跑本地模型前关掉用不到的程序,尤其是其他占显卡的应用。这招不花钱、最容易被忽略,却常常就差这一口气。
CUDA out of memory。两招能救:一是换同一模型的量化版(4-bit 这类),显存占用能降下来一大截,往往就跑通了;二是把上下文上限从默认调小一些,给龙虾的工具调用留出余量,避免任务跑到一半偶发爆显存。量化 + 裁上下文这两招叠加,老卡也能稳定接住一个能干活的本地大脑。
实在带不动的退路
如果机器确实太弱,量化 + 小模型都跑不顺,不必硬扛。两条退路:一是接闭源 API,对本机零硬件要求,按用量付费,见 接 API 还是本地模型;二是租云服务器跑龙虾和模型,见 在云服务器上装。想先评估自己这台机器够不够,看 硬件要求。
常见问题
- 量化会不会让模型变笨?
- 会有损失但通常不大。4-bit 量化能砍掉一多半显存,多数日常任务质量感觉不出差别。质量敏感的活用 8-bit 折中。
- 显存不够,加内存有用吗?
- 有用但看法子。可以把部分层卸载到内存跑,显存放不下的由内存兜底,代价是变慢。纯加内存救不了显存硬缺口,但能让原本跑不起来的模型跑得动。
- 最省事的降配办法是哪个?
- 换更小的模型 + 用量化版本,两招一起上最立竿见影。先用小模型把流程跑通,再按显存余量逐步往上加。