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)
  • 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 后端实现

相关概念