专家优先的llama.cpp
摘要
一位开发者创建了llama.cpp的实验性分支,该分支仅将已使用的专家(expert)而非完整层卸载到显存,从而在RTX 2060 12GB等显存有限的GPU上为MoE模型带来了速度提升。作者正在寻找测试者,以验证其在其他Nvidia GPU上的性能表现。
此内容适用于所有拥有12GB显存的用户。嗨,我创建了llama.cpp的一个分支,实现了实验性的“专家替代层”方案。原因是我的RTX 2060只有12GB显存。听起来似乎不小,但对于密集模型来说仍然太少。正因如此,我主要使用MoE模型。
问题在于,你需要将一些层拆分到CPU上。想必大家都知道,Qwen3.6-35B-A3B每个token仅使用8个专家,其余专家未被使用。那么,为什么不将专家填满显存,而非要加载包含大量未使用专家的完整层呢?
我开始创建一个UI来监控哪些专家被使用。这已经显示出,前几层比后几层更有必要放在显存中;原因是它们比其他层更频繁地更换专家。
不幸的是,llama.cpp的n-cpu-moe会将前几层留在CPU上,所以我尝试了-ot,但那是另一个故事了。通过优化配置,我达到了大约22 tk/s。(请记住,2060的CUDA核心数量仅为3060的一半左右。)
使用默认的--n-cpu-moe,我得到19 tk/s。我只运行Q6模型,因为编码时的退化很明显。我的上下文未量化(同样原因),而且由于Java开发,我需要100k的大上下文窗口。
然而,使用我的专家变体,命中率约为62%,速度提升到了26 tk/s。盈亏平衡点出现在42%的命中率。这意味着提示词在缓存中使用了GPU上所选专家中的42%。
当我测试较小的RAM大小(内置参数用于指定显存使用量)时,我想到了另一个用例。通过良好的配置文件,你可以在不牺牲速度的情况下大幅减少显存使用。
现在,我的问题是:有人愿意测试一下吗?我真的很想知道它在3060/4060或类似显卡上的表现。(需要CUDA,以及Qwen 35B A3B或Gemma 26B A4B)。**目前仅限Linux上测试。** 真的,我并不想赚取任何星星之类的。我不在乎;我只想知道它在哪些NVIDIA显卡上能提升多少token生成速度。
需要以下操作:
检出并构建 [https://github.com/adrianhoehne/llama.cpp](https://github.com/adrianhoehne/llama.cpp)
然后使用额外参数启动:
./build/bin/llama-server --moe-layer-perf-out experts.json \
--cpu-moe \
--ctx-size 100000 \
--parallel 1
然后启动一个提示词并等待。这比平时更长,因为所有专家仍在CPU上。之后,将参数替换为:
./build/bin/llama-server --moe-hot-cache experts.json \
--moe-hot-cache-max-mib -1 \
--moe-hot-cache-auto-reserve-mib 1024 \
--moe-hot-cache-update-rate 0.10 \
--cpu-moe \
--ctx-size 100000 \
--parallel 1
并开始测量。
我还将专家使用情况的视图添加到了Llama UI中:[UI按钮](https://preview.redd.it/1yy5050qgp2h1.png?width=238&format=png&auto=webp&s=d088ae8ce597204f19f68f828be5be1da1fc2d9d)
相似文章
llama.cpp 专家池分支:针对 Qwen 3.8 Flash next IQ4 + 16Gb 显存在 MI50 gfx906 上带参数测试
llama.cpp 的一个非官方分支为混合专家模型引入了持久化的专家池,优化以减少在 16GB AMD gfx906 GPU 上通过 PCIe 的专家重新拷贝,从而提升大上下文长度的解码吞吐量。
一个 llama.cpp PR 在 GPU 上缓存“热”MoE 专家 — 8GB VRAM 下报告 33 → 56 tok/s
一个 llama.cpp PR 增加了基于热力图的“热”MoE 专家 GPU 缓存,在 8GB VRAM 下对某些模型将 tok/s 提升了约 1.7-2 倍,但对其他模型结果不一。
@leftcurvedev_: 任何拥有8GB或12GB显存配置的用户都需要明白,“-ncmoe”是在llama.cpp上提升性能的关键标志…
解释了llama.cpp中的-ncmoe标志如何通过将部分专家层卸载到CPU+内存,在有限显存(8-12GB)上提升MoE模型(如Qwen3.6 35B A3B)的性能,基准测试显示在RTX 3070Ti上可实现高达5倍的加速。
llama.cpp 在混合专家模型(MoE)和 GPU+CPU 卸载场景下,P 核比 E 核更慢?
观察到在使用 GPU+CPU 卸载运行混合专家模型时,llama.cpp 在 P 核上的运行速度比 E 核慢。
花了3天在搭载40GB显存笔记本+TB4外置显卡的独特组合上,对llama.cpp的各类标志参数进行基准测试。最终实现:生成速度提升70%、预填充速度提升40%、上下文容量增加6万token,并向llama项目提交了关于MTP的技术问题报告。以下是实践中的关键发现。
作者在配备RTX 4090笔记本显卡和AMD XTX 7900外置显卡的混合GPU环境中对llama.cpp运行参数进行了基准测试,实现了生成速度提升70%、预填充速度提升40%,并在多GPU配置中发现了一个与MTP相关的错误。