最后验证:2026-10-14 —— llama.cpp build b11609。
本指南中的所有参数适用于
llama-server 和 llama-cli(llama.cpp build b11609,十月 14 日,2026 年)。参数名称可能在不同 build 之间发生变化 —— 运行 llama-server --help 确认你的二进制文件支持哪些参数。Flash attention
使用-fa 或 --flash-attn on 启用 flash attention。在大多数基准测试中,这是 llama.cpp 提供的最接近免费性能提升的选项 —— 你可以用相同或更少的内存获得更快的推理速度,质量损失几乎可以忽略不计。
- 更低的 KV 缓存内存占用 —— 在长上下文长度时收益最大。
- 更快的推理速度 —— 尤其在 GPU 上,分块计算可以很好地映射到 tensor core。
- 相同的输出质量 —— flash attention 在数学上等价于标准注意力,不是近似计算。
mmap 与 mlock
llama.cpp 使用 2 种策略将模型权重加载到内存中。默认策略是--mmap,它将模型文件直接映射到进程的虚拟地址空间。另一种策略是 --mlock,它将整个模型锁定在物理内存中。
mmap 的优势
--mmap 是默认选项,因为它适用于大多数交互式使用场景。操作系统按需加载模型页面,因此启动速度快,在实际访问页面之前模型文件不会重复占用内存。如果你在测试模型或运行短时会话,默认值就足够了。
mlock 的优势
--mlock 阻止操作系统将模型页面换出到交换空间。这在以下情况下很重要:
- 你全天运行同一个模型并希望获得一致的延迟 —— 没有页面错误导致的冷启动惩罚。
- 你的系统受到其他进程的内存压力,可能会换出模型权重。
- 你使用的机器交换空间很慢(或没有交换空间),页面错误会导致推理停滞数秒。
线程调优
参数-t 设置用于推理的 CPU 线程数。正确的值取决于 CPU 实际承担的工作量。
在 Apple Silicon 上,线程调优的重要性较低,因为 GPU 和 CPU 共享统一内存,Metal 后端会处理调度。默认值通常就能很好地工作。
GPU 卸载策略
参数-ngl 控制你将多少模型层卸载到 GPU。GPU 上的层越多,推理速度越快,但每层都会消耗显存。
部分卸载
将-ngl 设为你能放入 GPU 内存的层数。剩余的层在 CPU 上运行。
完全卸载
设置-ngl 999 卸载每一层。llama.cpp 将 999 理解为”所有剩余层” —— 它并不会真的尝试卸载 999 层。
每层内存预算
每个卸载的层同时为权重和 KV 缓存消耗显存。粗略估算:
预留 1-2 GB 显存余量用于 CUDA 上下文和开销。
批处理大小调优
两个参数控制 llama.cpp 在预填充阶段一次处理多少 token:两者的交互关系
-b设定外部上限。如果提示词的 token 数超过-b,llama.cpp 会将其拆分为多个批次。-ub设定内部分块大小。llama.cpp 以最多-ub个 token 的微批次处理该批次。-ub必须小于或等于-b。
权衡
KV 缓存精度
KV 缓存存储每个活跃序列中每个 token 的键和值张量。默认情况下,llama.cpp 对键和值都使用 f16(16 位浮点数)。你可以切换到量化精度以较小的质量代价降低内存占用。
你可以独立设置键和值的精度。常见模式是两者都使用
q8_0,这在大多数基准测试中将 KV 缓存占用减半,质量差异不到 1%。
MoE 优化
混合专家模型(如 Qwen3.5-35B-A3B 或 Mixtral)在每一层存储大量专家子网络,但每个 token 只激活其中少数几个。专家权重即使不活跃也仍然驻留在内存中,这使得 MoE 模型相对于其活跃参数规模而言占用过大。 在多 GPU 系统上,当显存紧张时,你可以将专家层放在 CPU 上:--n-cpu-moe <num> 将指定数量的专家子层保留在 CPU 上,而模型的其余部分在 GPU 上运行。这是以增加少量延迟为代价来适配更大的模型。
示例配置
Apple Silicon —— M 系列 Mac 优化
-ngl 999)就能工作。
llama.cpp 在 Apple Silicon 上运行良好,但如果你专门在 Mac 上部署,MLX 针对 Apple 的 Metal 后端进行了优化,可能对同一模型提供更快的推理。当你需要跨平台可移植性或 OpenAI 兼容服务器时,使用 llama.cpp。
GPU 卸载 —— NVIDIA 或 AMD 独立 GPU
-ngl —— 从总层数开始,每次减少 5 直到能加载。
纯 CPU —— 无 GPU
后续步骤
llama.cpp 远程访问
通过 Tokios 将你的 llama.cpp 服务器暴露给团队成员和代理 —— 无需开放端口。
推测解码
使用草稿模型、n-gram 和 EAGLE 加速解码 —— 适用于 llama.cpp 后端。
测试你的部署
调优后测量延迟和吞吐量以确认改进效果。
KV 缓存与上下文
深入解释 KV 缓存如何在不同模型架构和运行时中工作。