GitHub: ggerganov/llama.cpp
Stars: 117,000+ | Language: C++ (56.6%), C (14.0%) | License: MIT
官网: 无独立官网,文档在 GitHub Repo
目录
项目速览
llama.cpp 是由 Georgi Gerganov 创建的开源 LLM 推理引擎,其独一无二的特点是 纯 C/C++ 实现且零外部依赖。2023 年 3 月,在 Meta 发布 Llama 模型后不到一周,Gerganov 就发布了 llama.cpp 的第一个版本,允许在普通笔记本电脑的 CPU 上运行 7B 参数的 Llama 模型。这个项目的诞生标志着一个重要转折点:LLM 推理从”数据中心专属”走向了”无处不在”。
截至 2026 年 6 月,项目在 GitHub 上已获得 117,000+ Star,是整个 LLM 生态中被 fork 和依赖最多的项目之一。llama.cpp 不仅是一个独立工具,更是整个本地 LLM 推理生态的基石:Ollama、LM Studio、GPT4All、Jan、LMDeploy 等数十个项目都在底层使用了 llama.cpp 或其 GGML 张量库。
llama.cpp 的核心价值在于:最小化依赖 + 极致优化。它不依赖 Python、PyTorch、CUDA 库等重型依赖,单二进制文件即可运行。同时通过手写 SIMD 指令(ARM NEON、x86 AVX2/AVX512)、Metal Shader、CUDA Kernel 等手段,在各平台上都达到了接近硬件的极限性能。
功能概述
GGUF 格式 — 统一的模型文件标准
GGUF(GGML Universal Format)是 llama.cpp 定义的模型文件格式,已事实上成为开源 LLM 分发标准。一个 .gguf 文件是自包含的:包含模型权重、分词器、元数据(模型架构、量化类型、上下文长度)和 chat template 等全部信息。
GGUF 的核心优势:
- 单文件分发:一个文件 = 一个可运行的模型,无需拆分配置和权重
- 向后兼容:新版 llama.cpp 总能读取旧版 GGUF 文件
- 增量量化:同一基础模型可派生出从 Q2_K(2-bit)到 F16(16-bit)多种量化版本,用户按需选择
- 元数据丰富:文件头包含 chat template、tokenizer 配置等信息,加载即用
HuggingFace Hub 上托管了数万个 GGUF 格式模型(通常以 -GGUF 后缀命名),许多官方模型(如 Meta Llama、Microsoft Phi)也提供官方 GGUF 量化版本。
极致量化体系
llama.cpp 拥有最完整的量化方案矩阵,覆盖从极低精度到高质量的范围:
| 量化类型 | 每权重位数 | 特点 | 适用场景 |
|---|---|---|---|
| Q2_K | ~2.6 bit | 最小体积,质量损失较大 | 存储受限的嵌入式场景 |
| IQ3_XXS | ~3.0 bit | 重要性感知量化,3-bit 中质量最优 | 移动端、边缘设备 |
| Q4_K_M | ~4.8 bit | 性能/质量最佳平衡点 | 推荐默认选择 |
| Q5_K_M | ~5.5 bit | 接近原始质量 | 质量要求高的场景 |
| Q8_0 | 8 bit | 几乎无损 | CPU 推理首选 |
| F16 | 16 bit | 无量化损失 | GPU 推理,追求质量 |
此外还支持 1.5-bit(IQ1_S)等极端压缩类型。所有量化类型在质量和速度上都有详细的 benchmark 数据,用户可以精确权衡。
全平台后端支持
llama.cpp 为每种硬件编写了定制优化内核:
- **Apple Silicon (M1/M2/M3/M4)**:通过 Metal Shader 实现 GPU 加速,同时利用 ARM NEON 和 Accelerate 框架优化 CPU 路径
- NVIDIA GPU:手写 CUDA Kernel,支持从 GTX 1060 到 H100 的全系列 GPU
- AMD GPU:通过 HIP 接口利用 ROCm 栈,也支持 Vulkan 后端
- Intel GPU:通过 SYCL 后端支持 Arc 系列 GPU
- x86 CPU:利用 AVX、AVX2、AVX512 和 Intel AMX 指令集
- RISC-V:支持 RVV 向量扩展
- 其他:Vulkan(跨平台 GPU)、WebGPU(浏览器端)、CANN(华为昇腾 NPU)、MUSA(摩尔线程 GPU)等
混合推理(CPU + GPU)
当模型超过显存时,llama.cpp 支持将部分层放在 GPU,其余层放在 CPU + 系统内存,实现超出硬件限制的推理:
# 将 30 层放在 GPU,其余放在 CPU |
这个功能在实际场景中极其实用:一块 8GB 显存的 GPU 可以加载 Q4_K_M 量化的 7B 模型全部到显存,但对于 70B 模型,可以将 40 层放在 GPU、40 层放在 CPU,虽然速度会下降,但至少能跑起来。
OpenAI 兼容服务器(llama-server)
llama.cpp 内置了一个轻量级的 HTTP 服务器 llama-server,完全兼容 OpenAI Chat Completions API:
# 启动服务器 |
服务器支持的功能远超预期:
- 并发推理:通过
-np 4支持 4 路并行解码 - 推测性解码:
-md draft.gguf使用草稿模型加速 - Embedding 服务:
--embedding开关 - 语法约束:
--grammar-file json.gbnf强制输出 JSON 格式 - HuggingFace 直连:
llama-server -hf org/model-GGUF自动下载并启动 - Reranking:
--reranking支持重排序模型
语法约束生成(GBNF Grammar)
llama.cpp 支持通过 GBNF(GGML BNF)语法文件约束模型的输出格式,这是结构化生成的关键能力:
# 强制模型输出有效的 JSON |
内置的 grammar 文件涵盖了 JSON、JSON Schema、CSV、列表、算术表达式等常见格式。这使得 llama.cpp 可以作为结构化提取管线中的可靠组件。
适用场景
边缘设备与嵌入式推理
llama.cpp 的零依赖特性使其成为树莓派、Jetson Nano、智能音箱、工业控制器等嵌入式 Linux 设备上运行小模型的唯一可行方案。配合 IQ3_XXS 等极致量化,2B 模型只需约 1GB 内存即可运行。
桌面端离线 AI 工具
Ollama、GPT4All、LM Studio、Jan 等本地 AI 应用都基于 llama.cpp 构建,为最终用户提供图形化的离线 AI 体验。如果你在构建需要内嵌 LLM 的桌面应用,直接集成 llama.cpp 是性能最优的选择。
CPU 推理与无 GPU 环境
许多企业的标准服务器只有 CPU 没有 GPU。llama.cpp 在 x86 CPU 上的推理速度经过极致优化,AVX512 指令集下 7B Q4_K_M 模型可达 15-20 token/s,足以应对离线批处理、数据分析等工作负载。
模型量化与格式转换
llama.cpp 提供的 convert_hf_to_gguf.py 和 llama-quantize 工具是将 PyTorch/HuggingFace 模型转换为 GGUF 格式并量化的标准工具链。即使最终使用其他推理引擎,许多团队也用 llama.cpp 完成格式转换。
CLI 管线中的文本处理
llama-cli 支持 Unix 管道输入输出,可以轻松集成到 shell 脚本和 CI/CD 管线中,用于代码审查总结、日志分类、文本翻译等自动化任务。
快速上手
编译安装
# 克隆仓库 |
也可以使用包管理器:
# macOS |
获取 GGUF 模型
# 方法1:直接使用 HuggingFace 上的 GGUF 模型(无需手动下载) |
基本推理
# 单次问答 |
启动 OpenAI 兼容服务器
# 基础服务器 |
启动后访问 http://localhost:8080 使用 Web UI,或调用 OpenAI 协议 API:
from openai import OpenAI |
源码架构
llama.cpp 的代码组织清晰,核心是 ggml 张量计算库 + llama 模型加载器 + 应用层工具:
llama.cpp/ |
核心模块说明:
- ggml:GGML 是整个项目的基石,一个用纯 C 写的张量计算库,实现了矩阵乘法、注意力、归一化等深度学习基础运算,并为每种硬件平台编写了手动的 SIMD/CUDA/Metal 优化实现。它不依赖 BLAS、cuBLAS 等外部库,实现了真正的零依赖。
- src/llama.cpp:约 20,000 行的核心文件,负责解析 GGUF 文件头、构建 Transformer 计算图(embedding → attention block × N → lm_head → sampling)、管理 KV Cache、执行 token 生成循环。支持 50+ 种模型架构。
- llama-server:基于 C++ 内置的 HTTP 库实现,提供了一个完整的 OpenAI 兼容 API 服务器。源码在
tools/llama-server/目录,包含了 Web UI 的 HTML/CSS/JS 资源。 - llama-quantize:提供 20+ 种量化类型(从 IQ1_S 到 Q8_0),支持对已转换的 GGUF 文件进行量化。量化过程包括统计权重分布、选择量化策略、计算 scale 参数等步骤。
- convert_hf_to_gguf.py:将 HuggingFace 格式(safetensors/pytorch bin)模型转换为 GGUF 格式的 Python 脚本。它会遍历模型权重,写入 GGUF magic header、metadata 键值对、张量信息和原始权重数据。
实操 Demo
完整流程:从编译到部署量化模型
1. 编译 CUDA 版本
git clone https://github.com/ggerganov/llama.cpp.git |
2. 下载并量化模型
# 下载 Qwen2.5-7B 原始模型(HuggingFace) |
3. 基准测试
# 测试不同量化类型的推理速度 |
4. 交互式对话
llama-cli -m qwen-7b-f16-Q4_K_M.gguf \ |
进入交互模式后:
> 用 Python 写一个 HTTP GET 请求的示例 |
5. 部署 OpenAI 兼容 API 服务器
# 启动服务器(全 GPU 加载 7B Q4_K_M 模型需要约 5GB 显存) |
启动后访问 http://localhost:8080 可以看到内置的 Web 聊天界面。
6. 客户端调用演示
import json |
7. curl 测试
# Chat Completions |
同类对比
| 特性 | llama.cpp | Ollama | vLLM | MLX |
|---|---|---|---|---|
| 语言 | C/C++ | Go + llama.cpp | Python | Python + C++ |
| 依赖 | 零外部依赖 | 系统级依赖 | Python + CUDA | macOS 专有 |
| 安装 | make/cmake 编译 | 一条 curl 命令 | pip install | pip install |
| 模型格式 | GGUF(原生) | GGUF(自动拉取) | HF Hub 直接加载 | safetensors/GGUF |
| 量化类型 | 20+ 种(最丰富) | 自动 Q4_0 | 10+ 种 | 4/8 bit |
| GPU 支持 | CUDA/Metal/Vulkan/SYCL | 自动检测 | CUDA/ROCm/TPU | Apple Silicon |
| 吞吐量 | 中等(单请求) | 中等 | 极高(continuous batching) | 高(Apple Silicon) |
| 并发 | 支持(-np) | 有限 | 极高 | 有限 |
| API | OpenAI 兼容 | REST(非标准) | OpenAI 兼容 | 无内置 API 服务 |
| 边缘设备 | 极佳 | 一般 | 不适合 | 仅 Apple Silicon |
| 部署复杂度 | 低(单二进制) | 极低 | 中等 | 低 |
| Star | 117k | 174k | 82.9k | 18.4k |
| 适合 | 嵌入/边缘/CLI 管线 | 开发者本地使用 | 生产环境服务 | Mac 本地开发 |
选型建议:
- llama.cpp 是底层引擎,适合需要深度定制、嵌入到自己的应用、部署到资源受限设备、或追求极致可控性的场景。
- Ollama 基于 llama.cpp 构建,提供了开箱即用的用户体验,适合不想关心底层细节的日常开发者。
- vLLM 是服务端推理的最佳选择,PagedAttention 和 continuous batching 提供量级更高的吞吐和内存效率,适合生产级多用户 API 服务。
- MLX 是 Apple 的机器学习框架,对 Apple Silicon 优化极深,但仅限 macOS 生态,适用面较窄。
参考资源
- GitHub 仓库: https://github.com/ggerganov/llama.cpp
- GGUF 格式规范: https://github.com/ggerganov/ggml/blob/master/docs/gguf.md
- GGML 张量库: https://github.com/ggerganov/ggml
- HuggingFace GGUF 模型: https://huggingface.co/models?library=gguf
- 在线 GGUF 量化工具: https://huggingface.co/spaces/ggml-org/gguf-my-repo
- GBNF 语法指南: https://github.com/ggerganov/llama.cpp/blob/master/grammars/README.md


