本文档提供了 llama.cpp 系统架构、核心组件及其相互关系的高层概述。llama.cpp 是一个用于大型语言模型 (LLM) 推理的 C/C++ 实现,它优先考虑最小的设置和跨不同硬件平台的高性能。
有关特定子系统的详细信息,请参阅:核心库架构、后端、用户界面和模型管理。
llama.cpp 通过基于 GGML 张量计算库的分层架构实现高效的 LLM 推理。该系统支持多种硬件后端,提供编程和交互式接口,并处理从转换到部署的完整模型生命周期。
整体系统架构
来源:README.md1-70 CMakeLists.txt1-30
该系统由四个主要层组成,每一层都有其独特的职责。
libllama)核心库为模型加载、上下文管理和推理执行提供了主要的 API。关键组件包括:
| 组件 | 文件位置 | 目的 |
|---|---|---|
llama.h | include/llama.h | 主 API 定义 |
llama.cpp | src/llama.cpp | 核心实现 |
llama_context | src/llama.cpp | 推理状态管理 |
llama_model | src/llama.cpp | 模型加载和元数据 |
llama_sampler | src/llama-sampling.cpp | Token 采样策略 |
ggml)GGML 库处理张量运算,并通过多个后端提供硬件抽象。
GGML 后端架构
来源:Makefile963-977 CMakeLists.txt157-160
两个主要接口提供对 llama.cpp 功能的访问。
| 接口 | 二进制文件 | 源代码位置 | 目的 |
|---|---|---|---|
| 命令行 | llama-cli | tools/main/main.cpp | 交互式推理和实验 |
| HTTP 服务器 | llama-server | tools/server/server.cpp | 兼容 OpenAI 的 API 端点 |
该系统使用 GGUF (GGML 通用文件) 格式进行优化的模型存储和加载。
模型处理管道
来源:README.md275-301 Makefile1220-1228
代码库按逻辑目录组织,反映了系统架构。
| 目录 | 目的 | 关键文件 |
|---|---|---|
/include/ | 公共 API 头文件 | llama.h, llama-cpp.h |
/src/ | 核心库实现 | llama.cpp, llama-vocab.cpp, llama-grammar.cpp |
/ggml/ | 张量计算库 | ggml.c, ggml-backend.c, ggml-alloc.c |
/ggml/src/ggml-*/ | 硬件后端实现 | ggml-cuda/, ggml-metal/, ggml-cpu/ |
/tools/ | 命令行工具 | main/, server/, quantize/, perplexity/ |
/common/ | 共享实用程序 | common.cpp, sampling.cpp, chat.cpp |
/examples/ | 示例应用程序 | simple/, embedding/, batched/ |
/tests/ | 测试套件 | test-backend-ops, test-tokenizer-* |
来源:CMakeLists.txt215-217 Makefile959-998
该系统支持多种构建系统,并具有全面的后端检测功能。
构建配置流程
来源:CMakeLists.txt92-104 Makefile186-213
该系统支持三种主要的使用模式。
llama-cli 进行直接模型交互,用于实验和测试。llama-server 进行服务器部署,用于应用程序集成。libllama 进行自定义应用程序开发。每种模式都利用相同的底层 GGML 计算引擎和模型管理系统,确保在不同部署场景下的行为一致性。