Skip to content

GGML (Georgi Gerganov Machine Learning) 是 llama.cpp 的底层张量计算库,提供张量定义、计算图构建和自动微分能力。

为什么需要 ggml

llama.cpp 需要一个轻量、高效的张量计算库来执行 LLM 推理。GGML 被设计为无外部依赖的纯 C 实现,这使得 llama.cpp 可以在几乎任何平台上编译运行。

核心原理

GGML 的核心设计包括:

  1. 张量抽象 — 统一的 ggml_tensor 结构体表示 n 维数组
  2. 计算图 — 用 DAG 描述运算关系,支持前向和反向传播
  3. 后端抽象 — 通过 ggml_backend 接口将计算分发到不同硬件
  4. 量化支持 — 内置多种量化数据类型,从 F32 到 Q2_K

关键数据结构:

  • ggml_context — 内存池,管理所有张量分配
  • ggml_tensor — 张量,包含维度、步长、数据指针
  • ggml_cgraph — 计算图,描述张量间的运算

在源码中的实现

  • ggml/include/ggml.h — 公共 C API
  • ggml/src/ggml.c — 核心实现(张量操作、计算图)
  • ggml/src/ggml-backend.cpp — 后端抽象层
  • ggml/src/ggml-cpu/ — CPU 后端
  • ggml/src/ggml-cuda/ — CUDA 后端
  • ggml/src/ggml-metal/ — Metal 后端

相关概念

  • tensor — GGML 的张量数据结构
  • compute-graph — GGML 的计算图设计
  • backend — GGML 的后端抽象接口
  • gguf — 基于 GGML 的模型文件格式