llama.cpp:是什么,是否需要放弃使用 Ollama ?
llama.cpp 是用 C/C++ 编写的推理引擎,可在 CPU 以及 NVIDIA、AMD、Intel 和 Apple Silicon 的 GPU 上运行 GGUF 格式的模型;Ollama、LM Studio 和 KoboldCpp 都以它为基础。通过 llama-server 直接使用它,并不会让模型在相同硬件上运行得更快:这样做可以让您自行控制原本由上层应用替您选择的设置,例如 GPU/CPU 分配、上下文大小和 KV 缓存量化。
llama.cpp 是用 C 和 C++ 编写的推理引擎,在 CPU、NVIDIA、AMD 和 Intel GPU 以及 Mac 上执行 GGUF 格式模型。截至 2026 年 9 月 20 日,大多数本地 LLM 应用都依赖于它或其 ggml 库:Ollama、LM Studio、KoboldCpp、Jan。直接使用它并不会让你的模型更快。它让你能够控制那些由上层应用替你决定的设置。
#llama.cpp 简介
该项目于2023年3月由Georgi Gerganov发起,目标十分明确:在MacBook上运行Meta的LLaMA模型,无需Python,也无需依赖重型库。项目采用MIT许可证发布。三年后,该仓库(已移至ggml-org组织下)支持了数百种架构,其于2023年8月定义的文件格式GGUF,已成为分发量化模型的事实标准。
两个技术选择解释了这一成功。第一个是量化:llama.cpp 能使用压缩为 2 至 8 位的权重运行模型,使一个 80 亿参数的模型只需 5 GB,而不是 16 GB。第二个是在处理器和显卡之间分配计算:当模型无法完全装入显存时,一部分层留在系统内存中,其余层放到 GPU 上。这样运行比完全加载到 GPU 上更慢,但确实可行,而且提供这一功能的引擎很少。
#其中包含什么
只需 1 小时,即可在您的电脑上拥有专属的免费 ChatGPT — LM Studio、Ollama、Open WebUI、您的文档,无需云端。
- 在线空间,终身可用
- PDF + 文件
- 30 天内退款
- llama-cli
- 命令行聊天。可用于几秒钟内测试模型或参数设置。
- llama-server
- 一个运行在 8080 端口的 HTTP 服务器,提供兼容 OpenAI 的 API,并内置网页界面。这是大多数高级用户会持续运行的组件。
- llama-bench
- 用于测量性能的工具。它分别给出提示词处理速度和生成速度,让您能够客观比较两种设置,不至于自欺欺人。
- llama-quantize
- 将全精度 GGUF 文件转换为更轻量的量化版本(Q4_K_M、Q5_K_M、Q8_0)。
#封装层增添了什么,又隐藏了什么
Ollama、LM Studio 和 KoboldCpp 提供了 llama.cpp 本身不提供的功能:模型目录、用一条命令下载、用户界面,以及自动加载和卸载。作为代价,它们会设定默认值。下表不比较性能,而是说明各项设置由谁决定。
| 设置 | 原版llama.cpp | Ollama | LM Studio | KoboldCpp |
|---|---|---|---|---|
| 上下文长度 | 通过 -c 选项自由设置 | 保守的默认值,可通过变量或 Modelfile 修改 | 每个模型都有独立滑块 | 启动时指定的选项 |
| 量化选择 | 任意GGUF文件 | 目录标签,默认 Q4 量化 | 提供下载的列表 | 任意GGUF文件 |
| 发送至GPU的层 | 通过 -ngl 选项逐层控制 | 自动 | 滑块 | 启动时指定的选项 |
| KV缓存的量化 | -ctk 和 -ctv 参数 | 全局环境变量 | 高级设置 | 启动时指定的选项 |
| API | llama-server,支持OpenAI协议 | 原生 API + OpenAI 兼容性 | 与 OpenAI 兼容的服务器 | 原生 API + OpenAI 兼容性 |
| 引擎更新 | 当天,每次提交 | 存在偏移 | 存在偏移 | 存在偏移 |
最后一行比乍看之下更重要。新的模型架构发布后,首先会在 llama.cpp 中得到支持,几天或几周后,上层工具才会跟进。如果您想在模型发布当周就进行测试,这往往是唯一的途径。
#四个关键参数决定一切
- -ngl (n-gpu-layers)
- 加载到显存中的模型层数。数值 99 表示「能放下多少就加载多少」。如果模型大小超过您的显存容量,请降低这个数值,直到能够成功加载:每留一层在 CPU 上,生成速度都会变慢,但一个每秒生成 8 个 token 的模型,总比一个无法启动的模型好。
- -c (ctx-size)
- 分配的上下文窗口。KV 缓存会随窗口增大而增长:在 8B 模型上,从 8000 个 token 增加到 32000 个 token 会消耗数 GB 显存。请按实际需要分配上下文窗口,而不是直接采用模型宣称的最大值。
- -fa (flash-attn)
- 启用 Flash Attention,可降低内存占用并加速长提示的读取。这也是量化 KV 缓存的必要前提。
- --n-cpu-moe
- 对于 MoE 模型,此选项会将一定数量层的专家保留在 RAM 中,其余部分留在 GPU 上。这使得 300 亿或 1200 亿参数的 MoE 模型能够在 16 GB 显卡上以可用的速度运行。
- Flash Attention:在 llama.cpp、Ollama 和 vLLM 中启用
- 量化 KV 缓存以节省 VRAM
- 使用 tensor-split 将模型分布在多个 GPU 上
- llama-server 官方文档(完整选项列表)
#变化之处:--fit 自动为您设置 -ngl
长期以来,llama.cpp 指南通常都会先让您手动设置 -ngl:设为 99,将全部内容加载到 GPU;如果加载失败,再通过反复尝试逐步降低该值。如今,这已不再是必经步骤。该项目新增了默认启用的 --fit 选项,会自动调整未指定的参数(包括 -ngl),使模型能够装入可用内存。对于性能较弱的显卡,这可以避免在启动失败与手动降低 -ngl 之间来回尝试。
#您的显卡应选择何种后端
llama.cpp 可以针对特定计算后端编译,也可以下载对应版本。正确的选择完全取决于您的硬件。下表列出了我们包含 90 种配置的数据库中的各类配置。
| 您的硬件 | 推荐后端 | 备注 |
|---|---|---|
| NVIDIA GTX 10 至 RTX 50 系列,桌面版和笔记本版 | CUDA | 速度最快、测试最充分的方案。 |
| AMD Radeon RX 7000 和 RX 9000 | ROCm(HIP)或 Vulkan | ROCm 在能正常工作的情况下速度更快。Vulkan 安装起来很顺利,在 Windows 上也是如此。 |
| AMD Radeon RX 6000 及更早型号 | Vulkan | 视显卡而定,ROCm 支持可能不完整,也可能完全不受支持。 |
| Apple M1至M5 | Metal | 在macOS二进制文件中默认启用。可使用全部统一内存。 |
| Intel或AMD集成GPU、Intel Arc | Vulkan 或 SYCL | 运行小模型时,相比仅使用 CPU,确实有性能提升。 |
| 无GPU | CPU(AVX2、AVX-512、NEON) | 各种硬件上都能运行。建议选择参数量不超过 80 亿的模型。 |
#我们使用 llama.cpp 的测试数据
llama.cpp 是我们测试基准的参考引擎,正是因为它能在所有平台上以完全相同的方式运行。以下是 Llama 3.1 8B 在 Q4 时的生成速度,上下文长度为 2048 个 token,单次请求,启用了 Flash Attention。
| 机器 | 内存 | Llama 3.1 8B Q4 |
|---|---|---|
| RTX 5090 | 32 GB | 172 tok/s |
| RTX 4090 | 24 GB | 128 tok/s |
| RTX 4070 | 12 GB | 76 tok/s |
| Mac M3 Max | 64 GB 统一内存 | 64 个 token/秒 |
| RTX 3060 | 12 GB | 44 tok/s |
| Ryzen 7 7700,仅 CPU | 系统 RAM | 7.8 tok/s |
可以得出两点结论。首先,RTX 3060 与仅使用 CPU 相比,性能相差五到六倍:即使是入门级显卡,也能改变使用体验。其次,在相同机器上使用 Ollama 或 LM Studio,这些数字也会基本相同,因为计算引擎是一样的。
#继续使用Ollama还是切换到llama.cpp?
| 如果……,继续使用 Ollama 或 LM Studio | 如果……,请切换到 llama.cpp |
|---|---|
| 您希望与模型对话,而无需阅读文档。 | 您的模型所需显存超过 VRAM 容量,且您希望精细调整模型在 GPU 和 CPU 之间的分配。 |
| 您经常切换模型,并且喜欢内置的模型库。 | 您想测试本周刚发布的架构。 |
| 您的工具(Open WebUI、编辑器扩展)需要对接 Ollama 的 API。 | 您要搭建一台长期使用的服务器,并希望掌控从上下文到KV缓存的每一项设置。 |
#十分钟即可启动
无需编译即可尝试。每个版本都会为 Windows、macOS 和 Linux 发布预编译二进制文件,包管理器会处理其余部分。以下命令将从 Hugging Face 下载一个小型模型并打开网页界面 http://localhost:8080.
如果想使用模型目录中更强大的模型,请下载您选择的 GGUF 文件,并通过 -m 选项指定该文件。只有在需要启用特定后端或每天跟进开发进展时,从源码编译才有用。
#最常见的加载错误
使用 llama.cpp 时遇到的大多数阻碍可归结为三种原因:所需内存超出可用容量、GGUF 文件与已安装的构建版本不兼容,或选项名称拼写错误。命令行显示的错误信息几乎总能指出是哪一种原因,前提是把信息读完,而不是关闭后重新运行。
| 消息或症状 | 可能原因 | 值得尝试 |
|---|---|---|
| cudaMalloc failed: out of memory | 模型加上所要求的上下文,所需显存超过了可用 VRAM | 减少 -c,让 --fit 自动调整 -ngl,或选择更轻量的量化方式 |
| unknown model architecture | GGUF 文件使用的架构比已安装的二进制程序所支持的架构更新 | 更新至最新发布版本;新模型架构通常最先在 llama.cpp 中获得支持 |
| 尽管使用了新款 GPU,生成速度仍极慢 | 并非所有层都加载到GPU上,通常因缺乏可用VRAM所致 | 检查加载日志(含“offloaded”的行),关闭其他占用 GPU 的应用程序 |
| error: invalid argument | 命令中拼写错误或重命名的选项 | 与 llama-server --help 对比,该命令会列出最新的短别名和长别名 |
服务器启动时显示的那行加载信息,值得从头到尾完整读一遍:它会列出实际卸载到 GPU 的层数、实际生效的上下文长度,以及所用的 KV 缓存类型。这通常比随意添加选项、不断尝试直到能运行更快。也要留意已安装的版本:llama.cpp 非常频繁地发布每夜构建版本,针对您的显卡或模型的修复有时已经发布,却还没有包含在您上周安装的 Homebrew 或 winget 软件包中。
#FAQ
llama.cpp 比 Ollama 更快吗?+
使用llama.cpp是否需要具备编译能力?+
可以在没有显卡的情况下使用llama.cpp吗?+
llama.cpp与vLLM有何区别?+
在 Mac 上使用 llama.cpp 还是 MLX?+
有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。