[基准测试] llama.cpp batch 与 ubatch 对 PP 和 TG 的影响
摘要
本文基准测试了在 DGX Spark 机器上使用 DeepSeek v4 Flash 时,llama.cpp 中 batch 和 ubatch 参数对提示处理和文本生成速度的影响,揭示了文本生成性能的惊人效果。
我的测试在 DGX Spark 机器(GB10,128 GB 统一内存)上运行原生尺寸的 DeepSeek v4 Flash 0731。模型大小大于内存,因此运行时权重会被多次加载。为了提高速度,必须尽可能减少权重的加载次数,所以我探索了 batch 和 ubatch 参数的影响。
PP ubatch/batch 128 256 512 1024 2048 4096 8192
128 1.70
256 1.78 2.31
512 1.70 2.33 3.32
1024 1.64 2.18 3.21 6.62
2048 1.65 2.16 3.59 6.37 10.33
4096 1.65 2.29 3.40 6.70 9.99 15.78
8192 ? ? ? ? ? ? 18.61
输入提示为 4143 个令牌。
TG batch/ubatch 128 256 512 1024 2048 4096 8192
128 3.11
256 3.41 3.07
512 3.37 3.37 3.02
1024 3.50 3.10 2.95 2.61
2048 3.26 3.20 2.91 2.82 2.38
4096 3.04 3.51 3.19 2.59 2.32 1.81
8192 ? ? ? ? ? ? 1.15
注意:生成了 256 个令牌,在输入提示之后。MTP=2,这给生成速度增加了少量随机性。
结论:
- 在这种配置下,批大小 != 子批大小对 PP 无用
- 增加子批大小会按预期提高 PP 速度
- 增加子批大小会降低 TG 速度。这对我来说是个惊喜。有人能解释为什么更大的子批值会影响 TG 吗?我以为 ubatch 只会改变 PP,所以现在我不确定如何理解代码中的 ubatch 参数用法。是否有方法同时获得高子批值的 PP 速度和小子批值的 TG 速度?
相似文章
提示:使用这个llama.cpp的PR提升Intel ARC上的提示处理速度
一个llama.cpp的PR显著提升了Intel ARC GPU上的提示处理速度,基准测试显示在B580上从245t/s提升到462t/s。目前该改进仅适用于F16 KV量化,计划后续支持其他量化方式。
花了3天在搭载40GB显存笔记本+TB4外置显卡的独特组合上,对llama.cpp的各类标志参数进行基准测试。最终实现:生成速度提升70%、预填充速度提升40%、上下文容量增加6万token,并向llama项目提交了关于MTP的技术问题报告。以下是实践中的关键发现。
作者在配备RTX 4090笔记本显卡和AMD XTX 7900外置显卡的混合GPU环境中对llama.cpp运行参数进行了基准测试,实现了生成速度提升70%、预填充速度提升40%,并在多GPU配置中发现了一个与MTP相关的错误。
比较 llama.cpp 行/张量分割与 ik_llama 图分割的双GPU推理速度
一位用户使用llama.cpp(行/张量切分)和ik_llama(图切分)在两张RTX 3080 20GB上对双GPU推理速度进行了基准测试,使用Qwen3.6-27B GGUF模型,比较了token生成和提示处理速度。
大幅提升 --n-cpu-moe 部分卸载模型的提示词处理速度
本文分享了一个 llama.cpp 的性能优化技巧,展示了增大微批大小(`-ub`)并结合部分 CPU 卸载(`--n-cpu-moe`)可以显著提升 gpt-oss-120b 等大型模型在消费级 GPU 上的提示词处理速度。
@populartourist: llama.cpp 发布版本 b9235 添加了一些用于提升推理性能的新工具。使用 llama.c 对 RTX 5090 上的 Qwen3.6 27B 进行了基准测试…
llama.cpp 发布版本 b9235 引入了推测性 n-gram 调优,在 RTX 5090 上的 Qwen3.6 27B 上实现了高达约 7 倍的吞吐量提升,其中 k4v96 配置在 10k 和 70k token 测试中表现出最佳的持续性能。