llama.cpp显存不足

Mac 上 Metal failed to allocate buffer

报错原文

ggml_metal_buffer_init: error: failed to allocate buffer, size = <n> MiB

尖括号 <…> 里的内容每次运行都会不同。

是什么意思

在 Mac 上,llama.cpp 没能从 Metal 拿到这么大的 GPU 缓冲区。macOS 默认只允许 GPU 使用统一内存的一部分 —— 大多数机器上约为四分之三。

为什么会出现

  • 模型加上下文超过了 GPU 能用的那部分统一内存,尽管整机内存看起来够。
  • 其他应用已经占了很多内存,留给 GPU 的更少了。

怎么解决

  1. 按可用的那部分来算,而不是按机器标称内存:计算器对 Mac 按约 75% 的内存来判断。
  2. 换更小的档位或更短的上下文;关掉占内存多的应用。
  3. 进阶:sudo sysctl iogpu.wired_limit_mb=<MB> 可以提高 GPU 的上限,重启后失效。要给 macOS 自己留出几 GB,否则整台机器会开始频繁换页。

改参数之前,先核对大小

大多数显存报错其实是大小问题。把模型、量化档位、上下文和你的显卡填进显存计算器:如果那里是红色,什么参数都没法让它装下。

相关指南

相关报错

核对来源

报错原文于 2026-10-26 从源码中读取核对。