Skip to content

GGML 后端与硬件抽象 — 概念

后端接口设计

GGML 定义了统一的后端接口 ggml_backend

每个后端实现以下核心能力:

  • Buffer 分配 — 在设备上分配/释放内存
  • Tensor 操作 — 实现支持的操作集合
  • 数据传输 — Host ↔ Device 数据拷贝
  • 计算执行 — 执行计算图的节点

CPU 后端

CPU 后端是最基础的后端,支持所有 GGML 操作:

  • SIMD 加速 — 利用 AVX2/AVX512 (x86)、NEON (ARM)、SVE (ARM 动态宽度)、RVV (RISC-V 扩展 VLEN)、LSX (LoongArch) 指令集
  • 线程池ggml-threading.cpp 管理 OpenMP 或自定义线程池
  • 量化运算 — 优化的量化 kernel(Q4_0 矩阵乘法等)
  • KleidiAI 混合调度 — Arm 平台支持 CPU+DSP 动态分块混合执行

CUDA 后端

CUDA 后端利用 NVIDIA GPU 加速:

  • 自定义 CUDA kernel 实现核心操作
  • 支持 tensor parallel 多 GPU 推理
  • 异步执行与流 (stream) 管理
  • 支持 Flash Attention 等 GPU 优化
  • 快速 Walsh-Hadamard 变换 (fwht.cu) — 用于相关变换的高效实现
  • PDL (Persistent Descriptor Launch) — 针对 MoE 矩阵乘法的持久化调度,需 CTK ≥ 12.3,注意与 __restrict__ 的竞态问题已修复
  • AMD MFMA 路由 — batch ≥ 4 时自动将量化 matmul 路由到 MMQ 路径

Metal 后端

Metal 后端针对 Apple Silicon 优化:

  • 使用 Metal Compute Shaders
  • 统一内存架构(CPU/GPU 共享内存)
  • 通过 ggml-metal.metal 实现 shader
  • Metal Performance Shaders (MPS) 加速
  • 远程分配器优化 — buffer 复用心跳从 500ms 降至 5ms,显著加速 Metal buffer 重用
  • GLU kernel 模板化 — SwiGLU 等 kernel 现已模板化,同时支持 f16/f32 输入

Vulkan 后端

Vulkan 后端提供跨平台 GPU 加速:

  • Compute Shader 实现
  • 支持 NVIDIA cooperative matrix (GL_NV_cooperative_matrix_decode_vector) 加速 matmul
  • BF16 Flash Attention — 新增对 BF16 KV cache 的 Flash Attention 支持
  • FWHT Intel 路径 — 使用共享内存 reduction 的快速 Walsh-Hadamard 变换
  • MUL_MAT_VEC 优化(4 K per iteration for F16/32)
  • 避免在 AMD UMA 设备上优先选择 transfer queue

SYCL 后端

Intel GPU 加速:

  • 已从 CUDA 移植多列 MMVQ(Matrix-Vector 量化乘法)
  • Flash Attention 扩展支持 Q4_1, Q5_0, Q5_1 类型
  • 虚拟内存池 (ggml_sycl_pool_vmm) 管理
  • GET_ROWS op 扩展更多数据类型
  • Q3_K mul_mat 内存访问模式优化

OpenCL 后端

移动/嵌入式 GPU 加速:

  • 新增 Q5_0, Q5_1 基础支持
  • 大 batch 场景使用 flat gemv 优化(Q4_K, Q6_K)
  • BF16 支持通过转换为 F16 实现
  • GATED_DELTA_NET op 实现

WebGPU 后端

浏览器端 GPU 加速:

  • FlashAttention 重构 + 标准化量化支持
  • MMVQ 路径:Q4/Q8/Q2_K/Q4_K
  • q4_0/q8_0 SET_ROWS 支持
  • 清理 legacy MUL_MAT pipeline

Hexagon DSP 后端

Qualcomm Hexagon DSP 加速:

  • 通用算子融合框架htp-opnode.h 支持任意算子组合融合
  • RMS_NORM + MUL 融合(减少内存带宽)
  • Q4_1 支持 MUL_MAT 和 MUL_MAT_ID
  • CONCAT op、GELU_quick 激活函数
  • GATED_DELTA_NET K>1 支持

后端选择策略

Scheduler 自动将计算图节点分配到最优后端:

  1. 检查每个操作的支持情况
  2. 优先使用 GPU 后端
  3. 不支持的操作 fallback 到 CPU
  4. 跨后端操作自动插入数据传输

后端采样 (Backend Sampling)

对于 MTP (Multi-Token Prediction) 推测解码,采样器链可以部分在设备上执行:

  • Top-K 采样在 GPU 上完成,避免将全部 logits 从 Device 传回 Host
  • 显著减少 D2H 数据传输量,提升推测解码效率
  • 通过 --spec-draft-backend-sampling 启用(默认开启)

相关概念