我之前一直很疑惑:我都 64G 超大内存了,为什么跑个 7B、13B 模型,依然频繁 OOM 内存溢出、程序崩掉?

第一个核心误区:只算模型体积,不算 KV 缓存

新手所有人只看模型大小:Q4_K_M 7B 才 4G 左右。但是!对话上下文 KV 缓存,才是内存杀手!默认 4096 上下文,多轮对话叠加,缓存会无限膨胀,直接撑爆内存。

我实测最优方案:日常学习使用,直接锁定 ctx-size 2048,内存占用直接减半,稳定性暴涨。

第二个坑:模型常驻内存不释放

Ollama 默认加载模型后,5 分钟不自动卸载。我频繁切换模型,后台堆积好几个模型,64G 瞬间被吃光。我自己配置环境变量:限制同时只能加载 1 个模型,跑完自动停止、释放内存。

第三个坑:E5 平台 NUMA 节点内存延迟问题

双路、单路 E5 都有 NUMA 内存交错问题。默认模式内存分配混乱,推理卡顿、内存占用异常偏高。我通过 BIOS 关闭 SNC 拆分,配合系统内存交错分配,解决内存分配混乱问题。

第四个坑:虚拟内存设置错误

之前我把虚拟内存交给系统自动管理,系统乱分配。我手动固定大容量 NVMe 虚拟内存,作为兜底 swap,彻底杜绝突发溢出。

折腾一周优化下来,我的 E5 主机现在:多模型切换、批量推理、后台常驻、多开虚拟机,再也没有崩过一次 OOM。