Appearance
计算图 (Compute Graph) 是 GGML 中描述张量运算关系的数据结构,以有向无环图 (DAG) 表示,支持前向传播和自动微分。
为什么需要 compute-graph
LLM 的 forward pass 涉及数百个张量运算(矩阵乘法、归一化、激活函数等)。计算图将这些运算组织为 DAG,使得 GGML 可以:
- 自动推导运算顺序
- 优化执行计划(算子融合、内存复用)
- 支持自动微分(反向传播)
- 将运算分发到不同硬件后端
核心原理
c
struct ggml_cgraph {
int n_nodes; // 节点数
struct ggml_tensor * nodes[GGML_MAX_NODES]; // 运算节点
int n_leafs; // 叶子节点数
struct ggml_tensor * leafs[GGML_MAX_NODES]; // 输入张量
};工作流程:
- 构建 — 用户通过
ggml_mul_mat(),ggml_add()等创建张量运算 - 收集 —
ggml_build_forward_expand()将目标张量的所有依赖加入图 - 执行 —
ggml_graph_compute()按拓扑序遍历并计算每个节点 - 微分 —
ggml_build_backward_expand()自动构建梯度计算图
在源码中的实现
ggml/include/ggml.h—ggml_cgraph结构和图操作 APIggml/src/ggml.c— 图构建和执行实现ggml/src/ggml-backend.cpp— 后端执行计算图src/llama-model.cpp— 为 Transformer 层构建计算图