Appearance
后端 (Backend) 是 GGML 的硬件抽象层,定义了统一的接口将计算图分发到不同硬件设备执行。
为什么需要 backend
不同硬件(CPU、GPU、TPU)有不同的编程模型和内存管理方式。后端抽象使得上层代码(如 Transformer 推理)无需关心硬件细节,同一套计算图可以在不同设备上执行。
核心原理
c
// 定义在内部实现头 ggml/src/ggml-backend-impl.h
struct ggml_backend {
ggml_guid_t guid; // GUID 标识
struct ggml_backend_i iface; // 函数指针表(stream/async 接口)
ggml_backend_dev_t device; // 所属设备
void * context; // 后端私有数据
};
// 注:stream 接口(异步),buffer 分配/supports_op 已移至
// ggml_backend_buffer_type_i / ggml_backend_device_i,不再属于此结构
struct ggml_backend_i {
const char * (*get_name)(ggml_backend_t);
void (*free)(ggml_backend_t);
// 异步张量数据访问(可选)
void (*set_tensor_async)(...);
void (*get_tensor_async)(...);
void (*set_tensor_2d_async)(...);
void (*get_tensor_2d_async)(...);
bool (*cpy_tensor_async)(...);
void (*synchronize)(ggml_backend_t); // 完成所有 pending 操作
// 图计划(暂未使用)
ggml_backend_graph_plan_t (*graph_plan_create)(...);
void (*graph_plan_free)(...);
void (*graph_plan_update)(...);
enum ggml_status (*graph_plan_compute)(...);
// 图计算(若支持异步则始终异步)
enum ggml_status (*graph_compute)(ggml_backend_t, struct ggml_cgraph *);
// 事件同步(可选)
void (*event_record)(...);
void (*event_wait)(...);
void (*graph_optimize)(...); // 排序/优化图节点
};后端类型:
- CPU — 通用后端,SIMD 加速 (AVX2/NEON/SVE/RVV/LSX);AMX 优化、power10/power11 MMA、KleidiAI 混合调度
- CUDA — NVIDIA GPU(PDL 持久化调度、AMD MFMA 路由、cublasSgemmBatched 批量 GEMM)
- Metal — Apple Silicon GPU(远程分配器心跳 5ms、GLU kernel 模板化、rope_back、concat f16/bf16)
- Vulkan — 跨平台 GPU(BF16 Flash Attention、cooperative matrix decode、CONV_3D/GET_ROWS_BACK/gated_delta_net、softmax 前加 bias 防溢出)
- SYCL — Intel GPU(F16 默认开启、多列 MMVQ、虚拟内存池、conv_2d/3d、reordered MoE MUL_MAT_ID)
- OpenCL — 移动/嵌入式 GPU(Q5_0/Q5_1、GATED_DELTA_NET、Flash Attention、q8_0 gemv 精度)
- WebGPU — 浏览器 GPU(FlashAttention 重构、MMVQ 路径、i-quants mul_mat 提速、2D workgroups、MTP mat-vec)
- Hexagon — Qualcomm DSP(通用算子融合框架、MUL_MAT_ID 32×32 tiled repack + cached graphs、op-trace)
- OpenVINO — Intel 推理后端(OV 2026.2.1)
- RPC — 远程执行
split compute 少同步:图被切分到多后端时,调度器用 async CPU→CUDA 拷贝(
ggml_backend_cuda_cpy_tensor_async)放宽输入拷贝间的同步要求,减少 token 间同步点。
在源码中的实现
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 实现