Appearance
GGML (Georgi Gerganov Machine Learning) 是 llama.cpp 的底层张量计算库,提供张量定义、计算图构建和自动微分能力。
为什么需要 ggml
llama.cpp 需要一个轻量、高效的张量计算库来执行 LLM 推理。GGML 被设计为无外部依赖的纯 C 实现,这使得 llama.cpp 可以在几乎任何平台上编译运行。
核心原理
GGML 的核心设计包括:
- 张量抽象 — 统一的
ggml_tensor结构体表示 n 维数组 - 计算图 — 用 DAG 描述运算关系,支持前向和反向传播
- 后端抽象 — 通过
ggml_backend接口将计算分发到不同硬件 - 量化支持 — 内置多种量化数据类型,从 F32 到 Q2_K
关键数据结构:
ggml_context— 内存池,管理所有张量分配ggml_tensor— 张量,包含维度、步长、数据指针ggml_cgraph— 计算图,描述张量间的运算
在源码中的实现
ggml/include/ggml.h— 公共 C APIggml/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 的模型文件格式