Appearance
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 自动将计算图节点分配到最优后端:
- 检查每个操作的支持情况
- 优先使用 GPU 后端
- 不支持的操作 fallback 到 CPU
- 跨后端操作自动插入数据传输
后端采样 (Backend Sampling)
对于 MTP (Multi-Token Prediction) 推测解码,采样器链可以部分在设备上执行:
- Top-K 采样在 GPU 上完成,避免将全部 logits 从 Device 传回 Host
- 显著减少 D2H 数据传输量,提升推测解码效率
- 通过
--spec-draft-backend-sampling启用(默认开启)
相关概念
- backend — 后端抽象详解
- tensor — 张量数据在设备间的传输
- quantization — 各后端的量化 kernel 实现