Skip to content

后端 (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/SVE/RVV/LSX)
  • CUDA — NVIDIA GPU(PDL 持久化调度、AMD MFMA 路由)
  • Metal — Apple Silicon GPU(远程分配器心跳 5ms、GLU kernel 模板化)
  • Vulkan — 跨平台 GPU(BF16 Flash Attention、cooperative matrix decode)
  • SYCL — Intel GPU(多列 MMVQ、虚拟内存池)
  • OpenCL — 移动/嵌入式 GPU(Q5_0/Q5_1、GATED_DELTA_NET)
  • WebGPU — 浏览器 GPU(FlashAttention 重构、MMVQ 路径)
  • Hexagon — Qualcomm DSP(通用算子融合框架)
  • 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 后端实现

相关概念