高级 11 分钟llama.cpp

编译 llama.cpp 时使用 Metal

直接回答

在搭载 Apple Silicon 芯片的 Mac 上,llama.cpp 只需三条命令即可编译,且默认启用 Metal:克隆仓库,运行 cmake -B build,再运行 cmake --build build --config Release,无需安装 GPU 工具包。您也可以通过 Homebrew 安装,无需自行编译。此时,llama-cli 和 llama-server 会将计算任务交由 M 系列芯片的 GPU 执行;决定可运行模型大小的主要因素是统一内存,而不是原始算力。

llama.cpp 是 Ollama 和 LM Studio 所依赖的推理引擎,可在 Mac 上原生运行。本指南将介绍如何安装 llama.cpp 或使用 Metal 编译它,如何用它运行 GGUF 模型并提供 API 服务,如何提高 macOS 的 GPU 内存上限,以及如何正确解读针对 M1 至 M5 芯片发布的基准测试结果。

作者: Mohamed Meguedmi·更新于 2026-09-30·已在 macOS 14+ 上测试

#llama.cpp在Mac上的表现:Metal带来的优势

在 macOS 上,GPU 通过 Apple 的图形与计算 API Metal 来使用,llama.cpp 直接利用这一 API。项目 README 明确指出,Apple Silicon 是重点支持的平台,并通过 ARM NEON、Accelerate 和 Metal 进行了优化。实际而言,这意味着默认编译就会生成一个使用 GPU 的引擎,无需添加额外选项;统一内存也避免了处理器与 GPU 之间的任何数据传输:模型在内存中只保留一份。因此,Mac 上的限制因素是这块内存的容量和带宽。

→
无需在GPU侧安装任何软件
CUDA 需要一个大小达数 GB 的工具包,而 Metal 随 macOS 提供。只需 Apple 的编译工具和 CMake 即可。

#先决条件

本地 AI 套件

只需 1 小时,即可在您的电脑上拥有专属的免费 ChatGPT — LM Studio、Ollama、Open WebUI、您的文档,无需云端。

  • 在线空间,终身可用
  • PDF + 文件
  • 30 天内退款
一台搭载 Apple Silicon 芯片的 Mac
M1到M5:本指南的目标机型。搭载Intel处理器的Mac几乎无法获益。
Apple编译工具
使用 xcode-select --install 安装命令行工具。
CMake 和 Git
通过 Homebrew 可安装:brew install cmake git
模型所需内存
本站的参考值:Q4 量化的 8B 模型约占 5 GB,14B 约占 9 GB,32B 约占 19 至 20 GB,尚未计入上下文所需的内存。
编译工具
xcode-select --install
brew install cmake git

#无需编译即可安装:Homebrew

如果不需要特殊的编译选项,最快的方法是使用 Homebrew。llama.cpp 的安装文档说明,项目每次发布新版本时,Homebrew 的 formula 软件包定义都会自动更新。您会获得相同的可执行程序,支持 Metal,开箱即用。

通过 Homebrew 安装
brew install llama.cpp

如需获取仓库最新版本、测试分支或修改编译选项,请自行编译。否则,使用Homebrew即可:可节省编译时间,更新通过brew upgrade完成。

#1. 使用Metal编译

编译(默认启用 Metal)
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp

cmake -B build
cmake --build build --config Release -j $(sysctl -n hw.ncpu)

构建文档说明清晰:在macOS上,Metal默认启用,并直接在GPU上执行计算,无需额外配置。原仓库(Georgi Gerganov账号)已重定向至ggml-org组织,该项目现位于该组织下。可执行文件位于build/bin目录中,包括用于终端的llama-cli和用于API的llama-server。

i
Metal 和 MPS 是两种不同的技术
MPS(Metal Performance Shaders)是 PyTorch 使用的计算层。llama.cpp 不依赖它:其 Metal 后端是为量化模型推理编写的,这在很大程度上解释了为什么它在 Mac 上比基于 PyTorch 的方案更快。

两个实用选项:文档说明,-DGGML_METAL=OFF 可在编译时禁用 Metal;编译包含 Metal 的二进制文件可通过 --n-gpu-layers 0 强制在处理器上运行,适用于性能对比。

#2. 启动首个模型

较新的引擎可自行下载模型。-hf 选项指定 Hugging Face 仓库名称,后缀表示量化方式;无后缀时默认采用 Q4_K_M。对于已下载的模型文件,请使用 -m 指定其路径。

下载并启动模型
./build/bin/llama-cli -hf UTILISATEUR/MODELE-GGUF:Q4_K_M
运行本地文件
./build/bin/llama-cli -m ~/modeles/mon-modele-Q4_K_M.gguf

放在 GPU 上的层数可通过 -ngl 设置;其默认值为 auto,适用于采用统一内存的 Mac。您也可以指定 -ngl all,将所有层都加载到 GPU 上。不要到 Ollama 文件夹中寻找模型路径:它的文件采用内部格式存储,并不是可直接使用的 GGUF 文件。

#使用 llama-server 提供兼容 OpenAI 的 API

llama-server 提供与 OpenAI API 兼容的路由,支持聊天、回答和嵌入功能。默认情况下,它监听 127.0.0.1:8080,仅可在您的 Mac 上访问。若要开放网络访问,需显式指定 --host 参数,并需对访问进行保护。

启动本地 API
./build/bin/llama-server -m ~/modeles/mon-modele-Q4_K_M.gguf --port 8080

#4. macOS GPU内存限制

在 Apple Silicon 上,macOS 只允许 GPU 使用统一内存的一部分。如果模型所需的内存超过这部分容量,就会被拒绝加载,或将超出的部分交由 CPU 处理,即使总内存足够也是如此。引擎会在启动时显示实际可用值:请在 llama-cli 或 llama-server 的日志中查找 ggml_metal_init: recommendedMaxWorkingSetSize 这一行。

sysctl iogpu.wired_limit_mb 命令可用于提高这一上限。它接受以兆字节为单位的数值,例如 60 GB 对应 61 440。llama.cpp 仓库的一位贡献者提醒,这项设置不具有持久性,因此每次启动后都要重新设置,并且不建议将上限提高到 100%:系统需要内存来处理所有未被 GPU 锁定的内容,如果留给系统的内存不足,就会出现问题。

提升上限(临时生效)
# 56 Go pour le GPU sur un Mac de 64 Go (56 x 1024 = 57344)
sudo sysctl iogpu.wired_limit_mb=57344

# Relancez ensuite le modèle et relisez recommendedMaxWorkingSetSize
!
为macOS保留一定余量
请为系统保留至少几个 GB 的内存。上限设得过高会导致运行变慢或卡死,以至于必须重启。要让此设置持续生效,必须在每次启动时重新应用,例如通过开机时启动的守护进程实现:系统没有原生的持久化设置。

#不同统一内存容量适合哪些模型

统一内存由macOS、您的应用程序和模型共享,GPU只能使用其中一部分。本站的参考估算是:Q4量化下,8B模型的权重约占5 GB,14B约占9 GB,32B约占19至20 GB。还需加上上下文缓存。表格给出的是保守的粗略估算;应以引擎显示的 recommendedMaxWorkingSetSize 为准。

按 Mac 内存容量估算的大致规模(权重采用 Q4 量化,不计上下文)
Mac 内存适合的模型规模备注
8 GB3B(2 GB)可以运行 8B 模型,但留给 macOS 的内存余量太少
16 GB8B (5 GB),中等上下文长度默认的GPU上限仍然足够
24 到 32 GB14B(9 GB),或甚至采用 Q8 量化的 8B 模型32B Q4模型需要提升GPU内存限制
48 至 64 GB32B(19–20 GB),可配合长上下文使用如果引擎拒绝加载模型,请提高GPU限制
96 GB 及以上70B(约 40 GB)及 MoE 模型下载前请检查 recommendedMaxWorkingSetSize

这些数量级只是保守估计,并非实测结果:较长的上下文、第二个模型或资源消耗较大的应用,都足以改变情况。专门介绍内存的指南提供了完整的计算方法。

#5. 关键选项

llama-cli 和 llama-server 的选项(llama-cli 官方 README)
选项角色默认值
-ngl, --n-gpu-layers放入显存的层数(数值、auto 或 all)auto
-fa, --flash-attnFlash Attention:on、off 或 autoauto
-ctk, -ctvKV 缓存中键和值的数据类型(f16、q8_0、q4_0…)f16
-hf要下载的 Hugging Face 仓库,可选择量化版本若省略后缀,则为 Q4_K_M
-c上下文长度,以标记(tokens)为单位根据模型

Flash Attention 默认处于自动模式:大多数情况下无需手动启用。KV 缓存可通过 -ctk 和 -ctv 进行量化,但前提是 Flash Attention 已启用;相较于 f16,q8_0 可将缓存的内存占用大致减半,代价是轻微的精度损失,建议针对您的实际用途进行验证。专门的指南详细介绍了这一权衡。

#6. 各款芯片的性能:公开基准测试衡量的是什么

QuelLLM 不对这些机器进行实测。参考来源是 llama.cpp 仓库中的讨论“Performance of llama.cpp on Apple Silicon M-series”,其中每位贡献者都对 Q4_0 格式的 LLaMA 7B 模型运行同一项测试。下表选取了其中的几条记录,并列出每次测量所用的 llama.cpp 版本:M1 至 M4 芯片的测量使用的是同一版本,M5 的测量使用的版本则更新。

LLaMA 7B Q4_0 的生成(tg)和提示处理(pp)速度,单位为 token/秒
芯片(GPU 核心数)带宽Prompt生成理论上限的占比
M2 Pro (19)200 GB/s341,1938,8674 %
M3 Pro (18)150 GB/s341,6730,7478 %
M4 Pro (20)273 GB/s439,7850,7471 %
M5 Pro (20)307 GB/s1 620,6466,3382 %
M4 Max (40)546 GB/s885,6883,0658 %

理论上限等于带宽除以模型大小(3.56 GiB,即 3.82 GB)。Pro 芯片能达到这一上限的 71% 至 82%,Max 芯片却只能达到 58%:达到一定水平后,内存不再是唯一瓶颈,花钱增加带宽所带来的收益也没有技术规格表暗示的那么大。

有三点值得注意。生成速度随带宽而变化:M3 Pro 的带宽为 150 GB/s,速度不及带宽为 200 GB/s 的 M2 Pro,尽管它采用的是更新一代的芯片。Max 系列芯片凭借高得多的带宽占据优势。最后,M5 系列的提示词处理速度有了飞跃:M5 Pro 达到 1 620.64 tokens/s,而 GPU 核心数量相同的 M4 Pro 为 439.78 tokens/s,前者是后者的 3.7 倍。这一差距对于长文档和 RAG 很重要,对聊天的影响则小得多。

i
如何解读这些数字
这些测量结果来自不同的贡献者,使用的 llama.cpp 和 macOS 版本也不同。它们提供的是用于比较芯片性能的大致量级,不能保证您设备上的实际表现。采用 Q4 量化的 80 亿至 90 亿参数模型比 7B 模型更大,因此运行速度会稍慢一些。

在认定一台 Mac 运行缓慢之前,不妨养成一个好习惯:先用 -ngl 0 重新运行同一个模型,再用默认值运行,然后比较。两者的差距能显示 GPU 在您的机器上实际带来的提升,并确认计算确实通过 Metal 执行。也请记录所用的 llama.cpp 版本:Metal 优化进展很快,旧版二进制文件可能明显慢于较新的版本。

#故障排除:常见错误

Mac上常见的症状
问题表现可能原因解决思路
生成速率极低,处理器占用率为 100%模型加载在CPU上检查 -ngl 并查看启动日志
GPU 内存分配错误模型规模超过分配给GPU的RAM容量调高 iogpu.wired_limit_mb,减小模型或上下文大小
Mac 运行变慢或卡死GPU 配置上限过高,macOS 无可用余量降低 iogpu.wired_limit_mb 的值
编译失败缺少 Apple 工具或 CMake 过于陈旧xcode-select --install 然后 brew upgrade cmake
未找到该模型Hugging Face 仓库路径或名称错误使用已知仓库测试 -hf,或使用绝对路径测试 -m
FAQ
在 Mac 上使用 Metal 时,是否需要编译 llama.cpp?+
不需要。在 macOS 上编译时,Metal 默认启用;Homebrew 提供预编译的可执行文件,可通过 brew install llama.cpp 安装。只有在需要代码仓库的最新版本、要测试的分支或特定选项时,才自行编译。两种方式都能获得相同的工具:llama-cli 和 llama-server。
如何验证 llama.cpp 是否在 Mac 上使用 GPU?+
启动 llama-cli 或 llama-server 时查看日志:日志会显示 Metal 的初始化情况以及 recommendedMaxWorkingSetSize 的值。若 CPU 负载饱和且吞吐量极低,说明模型被加载到 CPU 上运行。此时请检查 -ngl 参数设置,其默认值为 auto。
如何为搭载 Apple 芯片的 Mac 上的 GPU 分配更多内存?+
使用sudo sysctl iogpu.wired_limit_mb=VALEUR设置,数值单位为兆字节。该设置不会永久保存,每次启动后都需要重新设置。不要将其设为RAM总量的100%:macOS需要为系统的其他部分保留内存。请再次查看日志中的recommendedMaxWorkingSetSize,以确认新值。
在 Mac 上使用 llama.cpp 还是 Ollama?+
Ollama 基于 llama.cpp,简化了安装、下载和 API 的使用。如需使用最新选项、精细控制参数或使用 llama-server,请直接使用 llama.cpp。在 Mac 上,MLX 与 llama.cpp 的对比指南也详细介绍了另一个可选引擎。对于初学者,Ollama 或 LM Studio 就足够了。
Mac M4 Pro搭载llama.cpp,可预期的运行速度是多少?+
llama.cpp 的公开基准测试显示,在配备 20 个 GPU 核心的 M4 Pro 上,LLaMA 7B 的 Q4_0 版本生成速度为 50.74 tokens/s,提示词处理速度为 439.78 tokens/s。更大的模型会更慢。这些数值会因 llama.cpp 版本、内存和 macOS 而有所变化。
这份指南对您有帮助吗?

有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。