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 的更少了。
怎么解决
- 按可用的那部分来算,而不是按机器标称内存:计算器对 Mac 按约 75% 的内存来判断。
- 换更小的档位或更短的上下文;关掉占内存多的应用。
- 进阶:
sudo sysctl iogpu.wired_limit_mb=<MB>可以提高 GPU 的上限,重启后失效。要给 macOS 自己留出几 GB,否则整台机器会开始频繁换页。
改参数之前,先核对大小
大多数显存报错其实是大小问题。把模型、量化档位、上下文和你的显卡填进显存计算器:如果那里是红色,什么参数都没法让它装下。
相关指南
相关报错
核对来源
报错原文于 2026-10-26 从源码中读取核对。