@analogalok:别再盲目信任本地 LLM 的默认多 GPU 设置了,你实际上正浪费 25% 的性能……

X AI KOLs Timeline 工具

摘要

基准测试结果对比了 llama.cpp 中针对双 GPU 设置的层并行与张量并行:层模式在预填充(RAG 管道)中快 25%,而张量模式在解码(交互式聊天)中快 16%。

别再盲目信任本地 LLM 的默认多 GPU 设置了,你实际上正浪费 25% 的性能。 我花了最后 3 小时熔化免费的的双 Nvidia T4 GPU,最终解决了 Llama.cpp 的争议:层分割 vs 张量分割。 结果完全颠覆了你在 RAG 与聊天管道上的架构选择。以下是原始数据: 如果你运行的模型超过了单个 GPU 的显存,llama.cpp 提供了两种分割权重的方式:层模式(管道并行)和实验性的张量模式(张量并行)。 文档给出了理论,但我要的是实证数据。 我在双 T4 GPU 机器上加载了 unsloth 的 Gemma 4 26B QAT (MoE) 的 Q4_K_XL 量化版本。 关键的是,这个设置使用标准的 PCIe 互连,没有高速 NVLink。我写了一个脚本,将上下文窗口从 10k 扩展到高达 50k 个 token,并在每次运行间清除显存,以精确查看硬件瓶颈在哪里。 以下是基准测试实际证明的结果: # 最适合 RAG:层模式 llama.cpp 标志:llama-server -m gemma-4-26B-A4B-it-qat-UD-Q4_K_XL.gguf -ngl 99 -c 60000 -fa on --split-mode layer --host 127.0.0.1 --port 8080 如果你正在构建文档摘要、RAG 管道或处理大量数据,`--split-mode layer` 是你的神级标志。 在 50,000 token 节点: - 层模式预填充:1,223 tokens/秒 - 张量模式预填充:979 tokens/秒 结论:层模式在处理大规模提示时快 25%。 原因?:层模式按顺序分割网络。GPU 0 完成计算,然后将接力棒传递给 GPU 1。它最小化了跨 GPU 流量。如果你的 GPU 通过标准 PCIe 通道通信,这可以防止互连成为预填充的瓶颈。 # 最适合聊天:张量模式 llama.cpp 标志: llama-server -m model.gguf -ngl 99 -c 60000 -fa on --split-mode tensor --host 127.0.0.1 --port 8080 如果你正在构建交互式聊天 UI 或 AI 编码助手,人类感知延迟(解码速度)至关重要。这正是 `--split-mode tensor` 大放异彩的地方。 在整个基准测试矩阵中: - 张量模式解码:52 到 57 tokens/秒 - 层模式解码:44 到 52 tokens/秒 结论:张量模式生成输出 token 的速度大约快 16%。 原因:张量并行将单个矩阵乘法分割到多个 GPU 上。两个 GPU 同时工作来预测下一个 token,从而加快了生成速度。 我将完整的 50k 压力测试代码和数据可视化脚本打包到了一个完全可重现的 Kaggle Notebook 中。该 Notebook 完全即插即用。它会自动从 huggingface 拉取 Gemma 26B GGUF,获取预构建的 llama.cpp CUDA 二进制文件,并运行整个多 GPU 矩阵,所以你无需编译任何东西。 Fork 代码,在自己的硬件上运行,亲自查看瓶颈。或者用不同的模型运行同一个 Notebook 并发布结果。评论中附带了免费 2x Nvidia T4 GPU 的 Notebook 链接。
查看原文
查看缓存全文

缓存时间: 2026/07/09 23:53

停止盲目信任本地大语言模型的默认多GPU设置。你实际上正在浪费25%的性能。

我花了整整3小时压榨免费的双Nvidia T4 GPU,终于解决了Llama.cpp长期以来的争议:层并行 vs 张量并行。

测试结果完全颠覆了RAG和聊天管线的架构设计。以下是原始数据:

如果你的模型超出单张GPU VRAM,llama.cpp提供两种权重分配方式:层模式(流水线并行)和实验性的张量模式(张量并行)。

官方文档只给了理论说明,但我需要实证数据。

我在双T4 GPU主机上加载了unsloth的Gemma 4 26B QAT(MoE)的Q4_K_XL量化版本。

关键点:这套系统使用标准PCIe互连,没有高速NVLink。我编写了脚本,将上下文窗口从10k逐步扩大到50k个token,每次运行之间清空VRAM,以精确观察硬件瓶颈。

以下是基准测试的实际结果:

RAG场景最佳选择:层模式

llama.cpp参数:llama-server -m gemma-4-26B-A4B-it-qat-UD-Q4_K_XL.gguf -ngl 99 -c 60000 -fa on –split-mode layer –host 127.0.0.1 –port 8080

如果你正在构建文档摘要、RAG管线或处理大规模数据,–split-mode layer 就是你的神级参数。

在50k token标记下:

  • 层模式预填充:1,223 tokens/秒
  • 张量模式预填充:979 tokens/秒

结论:层模式在处理大型提示时快25%。

原因:层模式顺序拆分网络。GPU 0先完成计算,然后将接力棒交给GPU 1。它最大程度减少了跨GPU流量。如果GPU通过标准PCIe通信,这种模式能防止互连线成为预填充瓶颈。

聊天场景最佳选择:张量模式

llama.cpp参数:
llama-server -m model.gguf -ngl 99 -c 60000 -fa on –split-mode tensor –host 127.0.0.1 –port 8080

如果你在构建交互式聊天界面或AI编码助手,人类感知延迟(解码速度)至关重要。这正是 –split-mode tensor 的强项。

在整个基准测试矩阵中:

  • 张量模式解码:52 到 57 tokens/秒
  • 层模式解码:44 到 52 tokens/秒

结论:张量模式生成输出token大约快16%。

原因:张量并行将单个矩阵乘法拆分到多个GPU上。两个GPU同时工作以预测下一个token,从而加速生成。

我将完整的50k压力测试代码和数据可视化脚本打包成了一个可直接复现的Kaggle Notebook。该Notebook完全即开即用,会自动从HuggingFace拉取Gemma 26B GGUF模型,获取预编译的llama.cpp CUDA二进制文件,然后运行完整的双GPU矩阵测试,你无需编译任何东西。

Fork这段代码,在自己的硬件上运行,亲眼看看瓶颈在哪里。或者用不同的模型运行同一个Notebook并发布结果。Notebook链接(含免费双T4 GPU)在评论区。

Kaggle Notebook(含全部代码,免费双T4 GPU)

测试中使用的模型

是的,我两种都试过了并发布了结果。见图表。

是的,层模式在预填充上表现更好,张量模式在解码上表现更好。

相似文章

双GPU llama.cpp加速

Reddit r/LocalLLaMA

llama.cpp的一个分支修复了量化KV缓存中的--split-mode tensor问题,在双GPU配置上实现高达40%的速度提升,且无质量损失。