Hotdry.

Article

FairyFuse:融合三元核调度实现 CPU 无乘法 LLM 推理

通过 BMI2 位提取与 AVX-512 掩码运算,将三元权重 GEMV 转化为纯加法流,融合 8 子核消除冗余访存,在单插槽 Xeon 上实现 32.4 tok/s。

2026-05-12compilers

在大语言模型(LLM)推理场景中,自回归解码阶段的核心计算瓶颈已经从算力转移到内存带宽。每生成一个 token 都需要遍历模型全部权重,当模型参数量达到数十亿时,访存开销决定了整体吞吐量。这一特性在 CPU 平台上尤为突出 —— 消费级和服务器级处理器的 DRAM 带宽通常在 200 GB/s 量级,而峰值浮点运算能力远高于此,导致计算单元长期处于饥饿状态。

传统量化方法(如 Q4_K_M、Q2_K)将权重压缩到 2–4 位以降低内存占用,但推理时仍需将压缩权重反量化为 FP16/FP32,再通过常规乘法累加指令完成矩阵运算。FairyFuse 从根本上重新审视了这一路径:若将权重约束为三元集合 {−1, 0, +1},则每个权重 - 激活乘积可转化为条件加法、减法或空操作,完全消除乘法指令。这一思路在二值 / 三元神经网络研究中早有渊源,但将其落地到十亿参数规模且实现生产级吞吐量,FairyFuse 是首次系统性实践。

三元 GEMV 的乘法消除原理

对于三元权重 w ∈ {−1, 0, +1} 和实值激活 a ∈ ℝ,数学上可分解为:

w·a =  a  (当 w = +1,加法)
     = -a  (当 w = −1,减法)
     =  0  (当 w =  0,空操作)

这意味着乘法的全部功能被三条条件分支覆盖。更关键的是,这三条分支在 SIMD 硬件上有高效实现路径。FairyFuse 将 16 个三元权重打包为 32 位字(每权重 2 位),编码约定为:(1,0) 表示 +1(加法),(0,1) 表示 −1(减法),(0,0) 表示 0。打包格式为:

packed = Σ [1(w_k = +1) · 2^(2k+1) + 1(w_k = −1) · 2^(2k)]

解码时使用 Intel BMI2 指令集的 _pext_u32 并行位提取,单周期即可从 32 位字中分离出两个 16 位掩码:

  • 正掩码(加法通道):M_pos = 0xAAAAAAAA,提取所有 +1 权重对应的位
  • 负掩码(减法通道):M_neg = 0x55555555,提取所有 −1 权重对应的位

随后,两条 AVX-512 掩码指令完成核心运算:

// 仅使用掩码加法和掩码减法,无任何乘法指令
acc = _mm512_mask_add_ps(acc, k_pos, acc, X);  // 累加正权重对应的激活
acc = _mm512_mask_sub_ps(acc, k_neg, acc, X);  // 累减负权重对应的激活

内层循环中零乘法指令已通过 objdump 汇编验证确认。每处理 16 元素分块仅执行 8 次 pext、8 次掩码 vaddps、8 次掩码 vsubps。唯一的浮点乘法出现在每行末尾的通道尺度应用(O (n) 复杂度 vs O (nm) 的主循环),占总动态运算量的 0.024% 以下。

复杂值广泛线性层的融合核调度

Fairy2i 复数域量化方案将每个线性层建模为广泛线性变换:

y = Ux + Wx̄

其中 x̄ 表示复共轭。分解为实部 / 虚部后,单层映射为 8 个耦合的实值 GEMV。朴素调度会分别执行 8 次独立 GEMV 核函数,导致:8 次 OpenMP 分叉 / 合并屏障、激活向量重复加载、掩码模式重复解码、寄存器溢出至 DRAM 的中间缓冲区 —— 这些开销几乎抵消了三元压缩的理论收益。

FairyFuse 的融合广泛线性核(Algorithm 1)将 8 个子 GEMV 合并为单一行并行 AVX-512 循环。四项关键设计决策使融合产生净收益:

O1 掩码复用:每对 (k_pos, k_neg) 同时驱动实部和虚部累加路径,使位提取成本在两个 SIMD 更新间摊销。

O2 输入向量复用:x_re 和 x_im 在每个分块中仅加载一次,在全部 8 个子 GEMV 间共享,将激活流量减半。

O3 符号翻转别名neg_x_im = −x_im 在层输入处预计算一次,循环内通过指针切换实现共轭变换,消除逐元素符号翻转。

O4 寄存器驻留累加器:8 组部分和在整个内循环期间保持在 AVX-512 寄存器中,仅在最终水平归约时写出,完全避免中间 DRAM 流量。

消融实验表明:单线程 DRAM-cold 场景下融合带来 1.55× 加速(O4 主导,消除中间缓冲区);48 线程场景下贡献 1.39× 加速(O2 和 OpenMP 屏障消除主导)。

Roofline 分析:为何收益集中在 CPU

FP32 密集 GEMV 的算术强度 AI = 0.25 FLOP/byte,深度处于内存受限区。三元压缩后 AI 提升至 8.0 OP/byte。对于 Intel Xeon 8558P(峰值算力 2.7 TFLOP/s,DRAM 带宽 200 GB/s,脊点 AI = 13.5),压缩后的 8.0 已接近脊点,使核函数从内存受限跃迁至近计算受限,释放 29.6× 加速空间。

然而,同等压缩在 NVIDIA H200 GPU 上呈现截然不同的结果:GPU 峰值算力 134 TFLOP/s(FP16 张量核),HBM3 带宽 4.8 TB/s,脊点 AI = 27.9。三元 GEMV 的 AI = 8.0 仍远低于脊点,核函数继续保持内存受限状态;HBM 的海量带宽使压缩带来的边际收益趋于零。更深层的原因在于 GPU 指令集缺乏 BMI2 _pext 的等效实现,三元解码被迫使用多步移位 / 掩码序列,ALU 利用率显著下降。最终自定义 CUDA 三元核比 cuBLAS FP16 GEMV 慢 130×—— 这一结构性错配使三元推理天然适合 CPU 而非 GPU。

端到端性能与模型质量

全栈评估在 Intel Xeon 8558P(48 核,单插槽 NUMA 绑定)上进行,对比 llama.cpp Q4_K_M 基线:

指标 FairyFuse Q4_K_M Q2_K
吞吐量 (tok/s) 32.43 26.15 20.1
相对加速 1.24× baseline 0.77×
存储占用 3.3 GB 4.1 GB 2.8 GB
WikiText-2 困惑度 5.52 5.68 7.82
下游任务准确率 66.0% 65.1% 56.6%

WikiText-2 困惑度仅比 FP16 基线(5.47)高 0.05,显著优于 Q4_K_M(5.68)和 Q2_K(7.82)。下游零样本评测涵盖 ARC-Challenge、HellaSwag、PiQA、WinoGrande、Lambada,FairyFuse 平均准确率 66.0%,较 FP16 下降 1.3 个百分点,仍优于 Q4_K_M(65.1%)且大幅领先 Q2_K(56.6%)。

每层耗时分解显示:融合 GEMV 占据 90.8% 的计算量,全部为乘法自由路径。RMSNorm(12 μs)、Softmax(45 μs)、SiLU(8 μs)等剩余操作使用标准 FP32,但均为 O (d) 复杂度,与 O (d²) 的 GEMV 相比可忽略不计。

实现工程要点

FairyFuse 推理引擎由约 1500 行 C++(核函数 + 前向传播)和 500 行 Python(权重加载、分词、采样)组成,通过 ctypes 以零拷贝方式调用。权重文件通过 mmap 内存映射实现惰性页面驻留。

ISA 要求:AVX-512F + BMI2(Intel Skylake-X 及更新代际)。编译标志需包含 -mavx512f -mbmi2

NUMA 绑定:跨插槽访问引入约 10–30% 吞吐量损失,推荐使用 numactl --cpunodebind=0 --membind=0 限制在单 NUMA 节点。

线程扩展:1–16 线程区间并行效率 > 80%(近线性扩展);16–48 线程区间因 DRAM 带宽饱和转为次线性;超过 48 线程(跨插槽)出现负收益。最优配置为 48 线程单插槽绑定。

缓存友好性:压缩后权重工作集约 174 KB(4096×4096 层),可完整容纳于 L3 缓存(105 MB)。L3-warm 条件下三元 GEMV 延迟低至约 0.25 ns / 加法,相较 DRAM-cold 提速最高 42 倍。

与现有方案的本质差异

T-MAC 和 BitNet.cpp 采用查找表(LUT)策略:使用 VPSHUFB 将低比特解码为字节后查表替代乘法。这种方法虽消除乘法,但引入间接内存访问和 LUT 缓存竞争,在宽 SIMD 单元上受限于片上存储带宽。FairyFuse 的方案截然不同:掩码直接驱动 SIMD 运算单元,无 LUT 访问、无收集 / 散射式混乱,彻底消除表查找开销和 TLB 压力。

llama.cpp 的低比特格式(如 Q2_K、Q4_K_M)在存储端实现了压缩,但计算路径仍为反量化的 FP16 乘法 —— 压缩仅服务于内存节约,计算瓶颈未根本性改善。FairyFuse 在存储和计算两侧同步压缩,形成乘法自由执行的完整闭环。

总结与启示

FairyFuse 展示了编译器级优化与硬件特性深度协同的工程路径:BMI2 并行位提取 + AVX-512 掩码运算使三元权重在指令层面实现免乘法执行;核融合消除广泛线性层的 8× 调度冗余;Roofline 视角揭示了 CPU 带宽受限特性如何将压缩优势转化为真实加速。这一设计选择将极端量化(2 比特)从理论可能转化为生产可行,为隐私敏感边缘部署、无 GPU 环境的交互式推理提供了新基线。后续方向包括:ARM NEON 后端适配、更大规模模型(13B/70B)的线程映射优化、以及推测解码场景下批处理 GEMM 的融合扩展。

资料来源:FairyFuse 论文原文(arXiv:2604.20913)arXiv 论文页面

compilers

内容声明:本文无广告投放、无付费植入。

如有事实性问题,欢迎发送勘误至 i@hotdrydog.com