问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

一文了解开源项目llama.cpp:功能、架构与使用指南

创作时间:
作者:
@小白创作中心

一文了解开源项目llama.cpp:功能、架构与使用指南

引用
1
来源
1.
https://www.53ai.com/news/OpenSourceLLM/2025040514368.html

llama.cpp是一个开源项目,旨在将Meta的大语言模型(如LLaMA1-LLaMA3等)高效地运行在各种设备上,尤其是CPU上。它的设计目标是轻量、跨平台、高性能,不依赖GPU,也可以在手机、树莓派等资源有限的设备上运行。而且它是一个开源的项目,很适合开发者用来搭建本地大模型应用。

llama.cpp的功能

我们先来看看llama.cpp能实现哪些功能,能带来哪些便利:

  • 模型推理:加载预训练语言模型并在本地进行文本生成,无需联网。
  • 多轮对话:支持聊天模式,保留对话上下文,实现连续对话。
  • 流式输出:支持token-by-token的流式回复。(像ChatGPT一样)
  • 模型量化:支持多种量化格式(Q4, Q5, Q8等),降低内存占用。
  • 多种采样策略:Top-k, Top-p, Temperature, Mirostat等采样控制。
  • Tokenizer支持:支持SentencePiece / BPE分词器,自动加载。
  • 模型格式支持:支持GGUF模型格式(推荐),兼容LLaMA、Mistral等。
  • 参数控制:支持设置batch size、上下文长度、采样参数等。
  • API服务:提供HTTP/WebSocket模式接口。(通过llama-server
  • 多平台支持:支持Linux、macOS、Windows、iOS、Android、WASM。
  • 插件/集成:可嵌入到C/C++应用中,也可被Python/C#/Rust等调用。
  • 推理优化:支持SIMD加速(AVX2/NEON)、KV缓存、上下文复用。
  • 本地运行:所有内容可离线运行,无需联网,保护隐私,适合搭建含有非公开信息的个人知识库和企业知识库。
  • Prompt模拟:支持模拟ChatGPT prompt模式,方便对接前端。
  • 工具支持:提供量化工具、模型格式转换工具、分词工具等。

我们选几个常用的功能加以解析:

1. 推理与聊天功能

基础推理(单轮)

通过命令行或API传入prompt,返回LLM生成的结果:

./main -m models/llama-2-7b.Q4_K_M.gguf -p "What is the capital of France?"

输出:

The capital of France is Paris.

多轮对话(聊天模式)

支持维护上下文,进行连续对话,例如运行以下指令:

./chat -m models/llama-2-7b.Q4_K_M.gguf

示例对话:

> Hello!
Assistant: Hi! How can I help you today?
> What's 12 x 9?
Assistant: 12 multiplied by 9 is 108.

2. 模型量化与加载

支持的量化格式(通过quantize工具):

格式
精度
优点
缺点
Q8_0
8-bit
精度高,性能好
占用较大
Q5_0 / Q5_K
5-bit
精度与性能折中
-
Q4_0 / Q4_K
4-bit
占用小,可在低端设备运行
精度略下降
GPTQ / AW
支持新量化方案(扩展)
需特定版本支持
-

通过量化,我们可以把原始模型从几十GB压缩到几GB,适合在普通电脑运行。

3. API服务功能(通过server模块)

通过llama-server或社区项目,例如llama-cpp-python,可以把llama.cpp部署为本地API服务。

示例:

./server -m models/llama-2-7b.Q4_K_M.gguf

提供OpenAI风格的API接口:

POST /v1/chat/completions
{
  "messages": [
    {"role": "user", "content": "Tell me a joke"}
  ]
}

llama.cpp是一个功能强大且高效的大语言模型(LLM)推理引擎,尽管它不支持训练,但在推理方面,它具备丰富的功能,支持模型加载、聊天、流式输出、上下文管理、量化、API接口等,它是使用Meta系列模型一款不可缺少的工具。

llama.cpp的架构

如果我们要用好llama.cpp,必须先了解这个开源框架的内容:

用户接口层(CLI / API)

  • main.cpp:命令行客户端
  • chat.cpp:聊天模式客户端
  • server.cpp:HTTP/WebSocket服务接口

llama推理引擎(llama.cpp / llama.h)

  • load model:模型加载
  • Tokenizer:分词器
  • 推理逻辑:前向传播、KV缓存、注意力
  • 采样策略:Top-k, Top-p, 温度, Mirostat等
  • prompt + history:上下文管理

GGML张量计算库

  • ggml.c / ggml.h:核心张量库
  • static computation graph:支持静态计算图
  • 底层优化:SIMD / AVX / NEON / Metal / CUDA
  • 矩阵乘法、激活函数、RMSNorm、Softmax等算子

量化与模型工具

  • quantize.c:模型量化工具
  • convert.py:模型格式转换(如HF → GGUF)
  • tokenizer scripts:分词器训练或转换脚本

1. 用户接口层(User Interface Layer)

这一层为用户提供了不同的使用方式:

文件
功能
main.cpp
主命令行接口。支持加载模型并运行prompt推理。
chat.cpp
聊天模式,维护对话上下文,支持多轮聊天。
server/
提供HTTP / WebSocket API接口,适合集成到服务中。

特点:

  • 简洁实用
  • 支持流式输出
  • 支持参数控制(温度、top-k等)

2. llama推理引擎(llama.cpp / llama.h)

这是llama.cpp的核心模块,负责构建模型、执行推理逻辑。它是面向用户的API层,封装了对ggml的调用。

主要功能:

组件
功能描述
llama_model
模型结构、权重、超参数管理
llama_context
推理上下文,包含KV缓存、token history等
tokenizer
使用sentencepiece或内置tokenizer进行分词
llama_eval()
前向传播,输入token,生成logits
sampling.c
采样策略,生成下一个token

特点:

  • 封装良好
  • 支持流式生成
  • 支持多种采样策略

3. GGML(计算图与张量计算库)

ggml是llama.cpp的底层计算引擎,用于高效地在CPU上执行神经网络推理。它不依赖外部库,完全用C语言实现。

特点:

特性
描述
静态计算图
使用静态图优化内存和计算路径
张量操作
支持加法、乘法、softmax、matmul、激活等
后端优化
支持AVX2 / AVX512 / NEON / Metal / CUDA计算
内存管理
使用Arena-style内存池,避免频繁malloc/free
多线程
支持CMake选项开启并行计算(例如OpenMP)

优势:

  • 极致的轻量化
  • 原生SIMD支持
  • 可自编译为WebAssembly、iOS、安卓等平台

4. 模型与量化工具

支持将HuggingFace或原始PyTorch模型转换为llama.cpp使用的格式(推荐使用GGUF)。

工具介绍:

工具
描述
convert.py
将原始模型(HF格式)转换为GGUF格式
quantize.c
支持多种量化格式,如Q4_0, Q5_1, Q8_0
tokenizer
支持加载sentencepiece模型进行分词

GGUF格式介绍:

  • 替代旧的.bin格式,gguf已成为一种流行的模型格式。
  • 支持metadata、tokenizer、模型结构、量化参数。
  • 更易于跨平台和版本兼容。

根据官方资料,我们总结了llama.cpp架构的设计理念:

  • 轻量化:不依赖Python、CUDA,仅用C/C++实现
  • 跨平台:支持Linux、macOS、Windows、iOS、Android、WASM
  • 高性能:SIMD加速、支持量化、低内存占用
  • 模块化:分层清晰,易于扩展(如插件式采样策略)

总结

最后我们来总结一下llama.cpp的能力:

  • 模型推理:支持多种LLM的本地运行与文本生成
  • 聊天对话:多轮上下文对话、角色扮演
  • 流式输出:实时token输出
  • 高效运行:支持量化、SIMD、多线程、上下文复用
  • 模型工具:模型量化、转换、分析
  • 本地部署:支持CPU-only、Android、iOS、等平台
  • API服务:可作为后端接口服务部署
  • 多语言接入:支持Python / C++ / Rust等语言调用

llama.cpp以其高性能、灵活性和易用性著称,适用于研究和生产环境。不仅功能强大,对初学者也十分友好,官方文档和示例代码丰富,便于快速上手和二次开发。它是一个高度模块化和可扩展的库,适合自然语言处理任务,涵盖从基础到高级的多种功能,满足不同场景需求,为我们搭建大模型应用提供了更为便利的工具。

llama.cpp Github:https://github.com/ggml-org/llama.cpp

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号