大幅提升 --n-cpu-moe 部分卸载模型的提示词处理速度
摘要
本文分享了一个 llama.cpp 的性能优化技巧,展示了增大微批大小(`-ub`)并结合部分 CPU 卸载(`--n-cpu-moe`)可以显著提升 gpt-oss-120b 等大型模型在消费级 GPU 上的提示词处理速度。
# 增大 ubatch 让我的 RTX 3090 在处理 gpt-oss-120b 提示词时快得多
我在 RTX 3090(24 GB 显存)上使用 llama.cpp 调优 `gpt-oss-120b-F16.gguf` 时发现,只要同时提高 `--n-cpu-moe` 以保持运行在显存范围内,增加物理微批大小(`-ub`)就能大幅提升提示词处理的吞吐量。llama.cpp 的默认设置是 `-b 2048` 和 `-ub 512`;我在图表中将该默认运行结果作为单独的一个数据点列出。以下是我绘制的非正式 `llama-bench` 结果:
|ubatch|n-cpu-moe|prefill|generation|
|:-|:-|:-|:-|
|256|25|240.03 tok/s|33.14 tok/s|
|512 (默认)|26|380.27 tok/s|32.29 tok/s|
|2048|25|1112.54 tok/s|32.96 tok/s|
|4096|26|1682.47 tok/s|32.38 tok/s|
|8192|28|2090.68 tok/s|30.05 tok/s|
与 llama.cpp 默认值 `-ub 512` 相比,提示词处理速度从约 380 tok/s 提升至约 2091 tok/s,大约提升了 5.5 倍。与较小的 `-ub 256` 运行相比,大约提升了 8.7 倍。Token 生成速度从默认设置下的约 32.3 tok/s 下降到 `-ub 8192` 时的 30.1 tok/s,降幅约为 7%。关键在于,更大的 ubatch 需要更多的 GPU 计算工作区。在我的机器上,`-ub 4096` 需要 `--n-cpu-moe 26`,而 `-ub 8192` 需要 `--n-cpu-moe 28`。因此这是一种吞吐量权衡:将更多的 MoE 层移到 CPU 上以为更大的批次腾出空间,这样提示词密集型工作负载会变得明显更快,而生成速度则会略微变慢。
https://preview.redd.it/s750judj7m0h1.png?width=2250&format=png&auto=webp&s=c696d26db310933120b9b99c310b2662e2d4f390
注意:前四个预填充数据点来自 `pp4096`;8192 ubatch 数据点来自 `pp8192` 运行,因此请将此视为非正式调优结果,而非严格控制的基准测试。
\-----
我购买 DGX Spark 的原因之一是为了获得更好的提示词处理速度。如果我知道这个技巧,我可能就不会这么做了,尽管它是一台非常棒的机器,并且在处理 gpt-oss-120b 时提示词处理性能略高,Token 生成速度几乎翻倍。提高 ubatch 可以*大幅*缩小这一差距。
相似文章
llama.cpp 在混合专家模型(MoE)和 GPU+CPU 卸载场景下,P 核比 E 核更慢?
观察到在使用 GPU+CPU 卸载运行混合专家模型时,llama.cpp 在 P 核上的运行速度比 E 核慢。
@leftcurvedev_: 任何拥有8GB或12GB显存配置的用户都需要明白,“-ncmoe”是在llama.cpp上提升性能的关键标志…
解释了llama.cpp中的-ncmoe标志如何通过将部分专家层卸载到CPU+内存,在有限显存(8-12GB)上提升MoE模型(如Qwen3.6 35B A3B)的性能,基准测试显示在RTX 3070Ti上可实现高达5倍的加速。
AMD 用户:您试过 llama.cpp 的 AMD-Ecosystem 分支吗?最高 2 倍提示处理速度
本文讨论了 llama.cpp 的一个 AMD 特定分支,该分支显著提升了 AMD 用户的提示处理速度,使用 ROCm/Hip 时,在密集模型上性能最高提升 2 倍,尽管在其他指标上有些权衡。
[草案 - 开放PR] AVX2:通过 bartowski1182 加速 IQ 模型的大批量提示处理 · 拉取请求 #27402 · ggml-org/llama.cpp
本草案拉取请求引入了 AVX2 优化,旨在加速 llama.cpp 中 IQ 模型的大批量提示处理。llama.cpp 是一款用于高效 LLM 推理的开源工具。
Auto-fit vs tuned MoE offload: 564 → 1330 pp tok/s, unchanged decode (Qwen3.6-35B-A3B Q6 / RTX 3090)
A developer benchmarks Qwen3.6-35B-A3B Q6 on an RTX 3090, showing that offloading eight MoE expert layers to CPU and increasing batch sizes improves prompt processing by 2.36× (564→1330 tok/s) with no decode speed regression, using evolutionary search to find the tuning config.