llama.cpp

发布于 2026-10-04

概览

记录 llama.cpp 的平台特性、GGUF 模型来源与安装方式,并梳理 llama cli、llama serve、llama-completion 和 GBNF Grammar 的定位与适用场景。

Llama.cpp 构建于 ggml 之上、C/C++ 实现、以GGUF 为主要模型格式的开源大模型推理项目,多用量化后的模型,利用 CPU、GPU 及系统内存,在普通个人电脑和消费级硬件上本地运行。

借助 ARM NEON、Accelerate、Metal 等技术的深度优化,对 Apple Silicon 支持较好,非常适合 Apple 用户使用。

名称是什么llama.cpp 中大致负责
ARM NEONARM CPU 的 SIMD 指令集扩展CPU 向量计算加速
Apple AccelerateApple 提供的高性能数学计算框架CPU 数学/矩阵运算加速
MetalApple 的 GPU 图形与通用计算 APIGPU 加速

ARM NEON:

  • ARM 架构提供的 SIMD(Single Instruction, Multiple Data)向量指令技术;

  • 普通 CPU 指令可能一次处理一个数,而 SIMD 可以让一条指令同时处理一组数据。矩阵、向量这些 LLM 推理中大量存在的运算非常适合这种方式;

  • ARM NEON = Apple Silicon CPU 底层的向量计算能力之一;

Apple Accelerate:

  • 利用 CPU 的向量处理能力,提供高性能、低能耗的计算。里面包含:BLAS / LAPACK、vDSP、vForce、BNNS、vImage、Sparse Solvers 等;

  • Accelerate = Apple 官方提供的 CPU 高性能数学计算框架;

Metal 类比:

  • Apple Silicon:Metal → Apple GPU

  • NVIDIA:CUDA → NVIDIA GPU

NEON + Accelerate 让 CPU 为什么能跑得不错,Metal 处理 GPU 怎么参与加速。

llama.cpp 支持 macOS、Linux、Windows、iOS、Android 平台,提供命令行工具和图形界面工具。

模型合集

Llama Models 精选了一批开源模型,都可以在 llama.cpp 中直接运行,同时给出了所需要的内存大小,方便用户选择适合自己硬件的模型。

此外,还可以在 Hugging Face 上找到更多模型(截止目前,GGUF 模型的数量为:208,750),并使用 llama.cpp 进行推理。

进入 Text Generation 类型的模型仓库页面时,比如:ukisai/Swift-1.5-Qwen3.8-27B-GSQ-RCO-GGUF,点击右侧的”Use this model“,在弹出的面板选择 llama.cpp,可以看到不同平台的安装及运行命令,按照其方式操作即可。

安装

Linux Server 推荐使用 One-line install command 安装,如下,该命令会自动检测平台架构,获取最新版本二进制并安装。

Bash
curl -LsSf https://llama.app/install.sh | sh
 
# 输出类似
Version: b11200
Probing CUDA...
Downloading cuda-probe...
Found: 89
Downloading llama...
Installation completed successfully
 
To make llama available in future sessions, add ~/.local/bin to your PATH by running:
 
  echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bash_profile
 
Then open a new terminal and run:
 
  llama serve
 
To start it now without modifying your PATH, run:
 
  ~/.llama-app/llama serve

安装完成后,查看版本:

Bash
llama cli --version
 
# 输出类似
version: 0.5.0-dev (build 11200, commit 81bc6b83f)
built with Clang 19.1.7 for Linux x86_64

macOS 也可以使用命令行安装,但是推荐使用图形化界面,下载dmg 文件安装。

Windows、Android 等平台,查看 releases 页面,下载对应的 zip 文件。

工具

llama.cpp 提供了模型推理与输出控制工具,日常使用:

  • 主要关注 CLI 和 Server;

  • llama-completion 与 GBNF Grammar 仍然存在并被维护,但更多用于原始文本生成、兼容特殊模型或进行更底层的生成控制;

llama cli

llama cli 是 llama.cpp 当前主要的本地命令行交互入口,适合直接加载 GGUF 模型并在终端中进行推理和对话。

Bash
llama cli -m <model-path.gguf>

多模态模型加载对应的 multimodal projector:

Bash
llama cli -m <model-path.gguf> --mmproj <mmproj-path.gguf>

适合:

  • 本地快速测试模型;

  • SSH 环境直接与模型交互;

  • 测试 GGUF 是否能够正常加载;

  • 调整 context、GPU offload、sampling 等推理参数;

  • 测试图片等多模态输入;

llama cli 是当前使用 llama.cpp 最直接的交互式入口之一。

llama cli 完整参数

llama serve

llama serve 用于将模型作为长期运行的推理服务启动,同时提供 HTTP API 和 Web UI。

Bash
llama serve -m <model-path.gguf>

多模态模型加载对应的 multimodal projector:

Bash
llama serve -m <model-path.gguf> --mmproj <mmproj-path.gguf>

相比 llama cli,不再只是当前 Terminal Session 中直接与模型交互,而是把模型变成一个可以被其他程序调用的服务。

典型用途:

  • 浏览器 Web UI 测试模型;

  • OpenAI-compatible API;

  • Python / JavaScript 客户端调用;

  • 接入自己的 FastAPI、Agent 或其他应用;

  • 局域网或远程提供模型服务;

如果服务暴露到非可信网络,需要配置 API Key 或其他访问控制,不能直接裸露推理端口。

llama cli 面向“人直接使用模型”,llama serve 面向“把模型作为服务提供出去”。

llama serve 完整文档

llama-completion

和 cli 类似,也能加载 GGUF 进行推理,但是抽象层级和使用目标不同,不需要作为日常使用重点,但它们能帮助理解 llama.cpp 更底层的生成机制,是偏向原始 Prompt → Completion 文本生成的工具,例如:

Bash
llama-completion \
  -m model.gguf \
  -p "Once upon a time" \
  -n 128 \
  -no-cnv

保留了较多直接控制文本交互过程的能力,例如:

纯文本
reverse prompt
input prefix
input suffix
interactive mode
chat template
sampling parameters

其中 reverse prompt、input prefix / suffix 是早期 LLM 使用方式。

例如早期模型通过如下纯文本结构模拟对话:

纯文本
User: Hello
Assistant:

input prefix / suffix 可以帮助程序自动拼接这些文本;reverse prompt 则可以在模型生成到特定文本,例如 User: 时停止生成并把控制权交回用户。

现代 Chat / Instruct 模型通常已经通过 Chat Template 管理:

纯文本
System
User
Assistant

之间的消息格式和对话边界,因此普通用户已经很少需要手动管理这些内容。

但 llama-completion 仍然有价值,例如:

  • Base Model 的原始文本续写;

  • 没有标准 Chat Template 的模型;

  • 自定义 Prompt 格式;

  • 调试 Chat Template;

  • 研究模型原始 completion 行为;

  • 特殊 Fine-tune / 老模型兼容;

llama-completion 是 llama.cpp 保留的偏底层文本生成工具;现代 Chat / Instruct 模型的日常交互通常优先使用 llama cli。

llama-completion 文档

GBNF Grammar

GBNF 严格来说不是一个独立工具,而是 llama.cpp 的 Grammar 格式与约束生成机制。

GBNF:GGML BNF,基于 BNF(Backus–Naur Form,巴科斯范式)的思想,用于描述允许模型生成什么样的文本结构。例如:

纯文本
root ::= "yes" | "no"

模型生成时就只能产生符合该 Grammar 的内容,大致流程:

纯文本
模型预测 Token
       ↓
Grammar 判断哪些 Token 合法
       ↓
限制 Sampling 候选
       ↓
选择合法 Token
       ↓
继续生成

属于:Constrained Decoding / Constrained Generation(约束解码 / 约束生成)。

GBNF 可以用于限制:

  • JSON;

  • 固定文本格式;

  • DSL;

  • 特定命令语法;

  • SQL 等结构化语言;

  • 自定义协议或输出格式;

现代应用开发通常不需要自己编写 GBNF,例如模型需要输出:

JSON
{
    "name": "Ocean",
    "age": 18
}

应用层通常定义 JSON Schema,然后通过 llama.cpp 的 Structured Output 能力进行约束。

GBNF 从普通用户需要直接接触的接口,逐渐下沉为 llama.cpp 约束生成体系中的底层能力;现代应用通常通过 JSON Schema / Structured Output 等更高层接口使用这类能力。

如果需要描述 JSON 以外的特殊语言、DSL 或精确语法,直接编写 Grammar 仍然有价值。

关系

名称定位当前使用频率
llama cli本地交互式推理常用
llama serveWeb UI + HTTP API 服务化常用
llama-completion原始 Prompt / Completion 与底层交互控制较少直接使用
GBNF Grammar约束模型生成内容的语法机制较少手写,底层仍重要
纯文本
日常使用
├── llama cli
│   └── 直接与模型交互
│
└── llama serve
    └── 把模型变成服务
 
 
深入理解
├── llama-completion
│   └── Prompt → Completion / 原始文本交互控制
│
└── GBNF Grammar
    └── Constrained Decoding / 输出结构约束

链接