Appearance
项目概览与构建系统 — 代码走读
CMakeLists.txt 入口
顶层 CMakeLists.txt 定义了项目的构建结构:
cmake
# 项目定义
project(llama.cpp C CXX)
# GGML 子项目
add_subdirectory(ggml)
# llama 库
add_library(llama ...)
# 工具目标
add_subdirectory(tools)关键构建流程:
- 先编译
ggml静态库(含选定的后端) - 编译
llama库(依赖 ggml) - 编译工具和示例
include/llama.h — 核心 API
这是整个项目对外的唯一公共头文件,定义了:
核心类型
c
struct llama_vocab; // 词表(不透明)
struct llama_model; // 模型(不透明)
struct llama_context; // 推理上下文(不透明)
struct llama_sampler; // 采样器(不透明)
typedef int32_t llama_token; // token ID
typedef int32_t llama_pos; // 位置编码核心流程
c
// 1. 模型加载
struct llama_model * llama_model_load_from_file(
const char * path_model, struct llama_model_params params);
// 2. 创建上下文
struct llama_context * llama_init_from_model(
struct llama_model * model, struct llama_context_params params);
// 3. 分词
int32_t llama_tokenize(
const struct llama_model * model, const char * text,
llama_token * tokens, int32_t n_max_tokens, bool add_bos, bool special);
// 4. 推理(batch decode)
int32_t llama_decode(struct llama_context * ctx, struct llama_batch batch);
// 5. 采样
llama_token llama_sampler_sample(struct llama_sampler * smpl,
struct llama_context * ctx, int32_t idx);
// 6. 清理
void llama_free(struct llama_context * ctx);
void llama_model_free(struct llama_model * model);src/ 目录结构
| 文件 | 职责 |
|---|---|
llama.cpp | 顶层初始化与注册 |
llama-model.cpp | 模型定义与 forward pass |
llama-model-loader.cpp | GGUF 文件解析与权重加载 |
llama-vocab.cpp | 分词器与词表 |
llama-sampler.cpp | 可组合采样器链 |
llama-context.cpp | 推理上下文管理 |
llama-memory.cpp | KV Cache 管理 |
llama-batch.cpp | 批处理编码 |
llama-arch.cpp | 模型架构定义 |
llama-graph.cpp | 计算图构建 |
llama-kv-cache.cpp | KV Cache 实现 |
关键函数索引
| 函数 | 文件 | 说明 |
|---|---|---|
llama_model_load_from_file | llama-model-loader.cpp | 从 GGUF 加载模型 |
llama_init_from_model | llama-context.cpp | 从模型创建推理上下文 |
llama_decode | llama-context.cpp | 执行 batch decode |
llama_tokenize | llama-vocab.cpp | 文本转 token |
llama_sampler_sample | llama-sampler.cpp | 从 logits 采样 token |