Skip to content

项目概览与构建系统 — 代码走读

CMakeLists.txt 入口

顶层 CMakeLists.txt 定义了项目的构建结构:

cmake
# 项目定义
project(llama.cpp C CXX)

# GGML 子项目
add_subdirectory(ggml)

# llama 库
add_library(llama ...)

# 工具目标
add_subdirectory(tools)

关键构建流程:

  1. 先编译 ggml 静态库(含选定的后端)
  2. 编译 llama 库(依赖 ggml)
  3. 编译工具和示例

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.cppGGUF 文件解析与权重加载
llama-vocab.cpp分词器与词表
llama-sampler.cpp可组合采样器链
llama-context.cpp推理上下文管理
llama-memory.cppKV Cache 管理
llama-batch.cpp批处理编码
llama-arch.cpp模型架构定义
llama-graph.cpp计算图构建
llama-kv-cache.cppKV Cache 实现

关键函数索引

函数文件说明
llama_model_load_from_filellama-model-loader.cpp从 GGUF 加载模型
llama_init_from_modelllama-context.cpp从模型创建推理上下文
llama_decodellama-context.cpp执行 batch decode
llama_tokenizellama-vocab.cpp文本转 token
llama_sampler_samplellama-sampler.cpp从 logits 采样 token