Appearance
后端 (Backend) 是 GGML 的硬件抽象层,定义了统一的接口将计算图分发到不同硬件设备执行。
为什么需要 backend
不同硬件(CPU、GPU、TPU)有不同的编程模型和内存管理方式。后端抽象使得上层代码(如 Transformer 推理)无需关心硬件细节,同一套计算图可以在不同设备上执行。
核心原理
c
struct ggml_backend {
struct ggml_backend_i iface; // 函数指针表(接口)
void * context; // 后端私有数据
};
struct ggml_backend_i {
const char * (*get_name)(ggml_backend_t);
void (*free)(ggml_backend_t);
ggml_backend_buffer_t (*alloc_buffer)(ggml_backend_t, size_t);
bool (*supports_op)(ggml_backend_t, const ggml_tensor *);
ggml_status (*graph_compute)(ggml_backend_t, ggml_cgraph *);
// ...
};后端类型:
- CPU — 通用后端,SIMD 加速 (AVX2/NEON)
- CUDA — NVIDIA GPU
- Metal — Apple Silicon GPU
- Vulkan — 跨平台 GPU
- SYCL — Intel GPU
- RPC — 远程执行
在源码中的实现
ggml/src/ggml-backend.cpp— 后端注册与调度ggml/src/ggml-cpu/— CPU 后端实现ggml/src/ggml-cuda/— CUDA 后端实现ggml/src/ggml-metal/— Metal 后端实现ggml/src/ggml-vulkan/— Vulkan 后端实现
相关概念
- ggml — 后端执行的底层库
- tensor — 后端管理的张量内存
- compute-graph — 后端执行的计算图
- quantization — 各后端的量化 kernel 实现