llama.cpp 发布了新版本,提高了将计算分配给多个专家的人工智能模型的 GPU 处理效率。运行这类模型的开发者可以获得任务布局改进,以及半精度运算性能下降问题的修复。
1. 按分块重新安排各专家的任务
此次变更让辅助运算在 CUDA 执行混合专家模型的矩阵乘法,即对按行列排列的数进行相乘的运算时,预先分配称为分块的小型计算任务。相比仅传递各专家计算范围的方式,这减少了主运算负责的分块数量和额外工作,也使专家间的任务分配更灵活。
2. 中型混合专家模型的实测吞吐量
据变更提案(PR)作者介绍,数据布局调整本身带来的性能提升为 2~4%,其余收益来自使用更小的分块减少无效计算。此前仅用于部分图形处理器的小分块偏好优化,也扩展到了更多 GPU。
以下是 PR 作者公布的部分中型模型测量值。模型为 gemma4 26B.A4B,量化方式为 Q4_0;量化即降低模型数值精度的过程。
在处理 8192 个提示词元的测试中,微批次大小设为 64,即每次分批处理的规模为 64。表格对比了原有 master 与修改版 bea596f39,展示各 GPU 相对自身基准值的变化。
表:各 GPU 的中型混合专家模型吞吐量
条件:gemma4 26B.A4B Q4_0,pp8192,微批次 64,master 与 bea596f39 对比(PR 基准测试表)
单位:吞吐量为每秒词元数(t/s),加速比为倍
| GPU | master | bea596f39 | 加速比 |
|---|---|---|---|
| MI60 / MI50 | 453.58 | 649.18 | 1.43 |
| MI100 | 765.78 | 962.42 | 1.26 |
| P40 | 428.34 | 600.66 | 1.40 |
| RTX 3090 | 1611.88 | 1950.45 | 1.21 |
| RTX 4090 | 3785.17 | 3906.79 | 1.03 |
| RTX 5090 | 4690.15 | 4870.64 | 1.04 |
| RX 6800 | 408.49 | 601.58 | 1.47 |
| RX 9060 XT | 920.30 | 936.63 | 1.02 |
| Strix Halo | 631.28 | 647.92 | 1.03 |
| V100-PCIE-32GB | 625.76 | 625.11 | 1.00 |
在相同模型和设置下,RX 6800 达到原有吞吐量的 1.47倍,MI60 / MI50 为 1.43倍。表中其他设备也有变化较小的情况,表明该优化的效果因硬件而异。
3. 通过跳过空任务修复 F16 性能下降
PR 评审中有人报告半精度(F16)运算性能下降,提出的修复方案是立即结束未分配到列的专家的计算任务。变更代码如下。
const int expert_end = ts.col_high;
const int ncols_expert = expert_end - expert_start;
if (ncols_expert == 0) {
return;
}
GGML_UNUSED(channel_ratio);以下是小型混合专家模型出现性能下降时的测量值,相对原有版本的倍率低于 1。
表:F16 修复前的吞吐量下降案例
条件:granitemoe 3B.A800M F16,pp8192,微批次 32,master 与 bea596f39 对比(PR 基准测试表)
单位:吞吐量为每秒词元数(t/s),加速比为倍
| GPU | master | bea596f39 | 加速比 |
|---|---|---|---|
| RTX 3090 | 2655.92 | 2111.88 | 0.80 |
| RTX 4090 | 3686.06 | 3096.57 | 0.84 |
跳过空任务的修复是在对比版本 bea596f39 之后加入的,因此该表展示的是修复前的结果。PR 作者解释,Granite 3.0 是否执行后续校正运算(fixup kernel)对总耗时影响很大,导致测量值波动较大。
4. 需要同时考虑收益与成本
小分块能根据计算范围更细致地分配任务,减少浪费。相应地,预先计算并存储新布局信息的工作转移到了辅助运算中。变更后的代码也从存储各专家计算范围,改为分配临时内存来存储各分块的信息。
在不将计算分配给专家、无需专家分支的稠密模型验证测试中,变化较小。PR 中 llama 8B Q4_0 模型的 pp1024 测试,相对原有版本的倍率为 0.99~1.03。
此次改进侧重于减少混合专家模型的无效计算,而非普遍提高稠密模型的速度。b12144 发布说明在 CUDA 变更之外,也列入了半精度性能下降问题的修复。
b12144 改进了混合专家模型的 CUDA 处理,并修复了 F16 性能回退,实际性能表现应结合 GPU 和模型条件判断。
