Appearance
张量 (Tensor) 是 GGML 中的基本数据单元,表示 n 维数组,支持多种数据类型包括浮点和量化格式。
为什么需要 tensor
LLM 推理本质上是大量的矩阵/张量运算。GGML 需要一个统一的张量表示来支持各种运算(矩阵乘法、卷积、归一化等),同时要能表示不同精度的数据以实现量化推理。
核心原理
c
struct ggml_tensor {
enum ggml_type type; // 数据类型
int n_dims; // 维度数 (1-4)
int64_t ne[GGML_MAX_DIMS]; // 每个维度的元素数
size_t nb[GGML_MAX_DIMS]; // 每个维度的字节步长
void * data; // 数据指针
struct ggml_tensor * grad; // 梯度 (用于自动微分)
};维度约定:
ne[0]是最内层维度(行方向)ne[n_dims-1]是最外层维度(batch)nb[0]= 单个元素的字节数nb[i]=nb[i-1] * ne[i-1]
数据类型:F32、F16、BF16、Q4_0、Q4_1、Q5_0、Q5_1、Q8_0、IQ 系列、K-quants 等。
在源码中的实现
ggml/include/ggml.h—ggml_tensor结构体定义ggml/src/ggml.c— 张量创建和管理函数ggml/include/ggml-alloc.h— 张量内存分配
相关概念
- ggml — 张量所在的计算库
- compute-graph — 张量在计算图中的角色
- quantization — 张量的量化数据类型
- backend — 张量在不同设备上的内存管理