双GPU llama.cpp加速
摘要
llama.cpp的一个分支修复了量化KV缓存中的--split-mode tensor问题,在双GPU配置上实现高达40%的速度提升,且无质量损失。
llama.cpp 长期以来存在 "--split-mode tensor" 的问题,使用该模式能获得极佳效果,但仅支持非量化 KV 缓存。正因如此,许多人选择配置足够大小的 KV 缓存而放弃张量并行。 我在此处尝试修复了该问题 - [https://github.com/RedToasty/llama.cpp_qts](https://github.com/RedToasty/llama.cpp_qts) \- 该分支基于当前主线,改动极小。 我本人在使用 3060 12GB + 4070 Super 12GB 的双卡组合,总计 24GB 显存。 以下是使用 Q8_0/Q8_0 和 "-sm tensor" 的测试结果: **llama-bench.exe -m Qwen3.6-27B-Q4_K_M.gguf -sm tensor -fa 1 -ctk q8_0 -ctv q8_0 -p 128 -n 32 -b 128 -ub 128** | Model | Size | Params | Backend | NGL | Batch | UBatch | Type K | Type V | SM | FA | Test | Tokens/s | |--------------------------|-----------:|---------:|---------|----:|------:|--------:|-------:|-------:|--------|---:|------|-----------------:| | Qwen3.5 27B Q4_K Medium | 15.65 GiB | 26.90 B | CUDA | 99 | 128 | 128 | q8_0 | q8_0 | tensor | 1 | pp128 | 544.82 ± 6.01 | | Qwen3.5 27B Q4_K Medium | 15.65 GiB | 26.90 B | CUDA | 99 | 128 | 128 | q8_0 | q8_0 | tensor | 1 | tg32 | 30.05 ± 0.38 | 以下是不使用张量拆分的测试结果: **llama-bench.exe -m Qwen3.6-27B-Q4_K_M.gguf -fa 1 -ctk q8_0 -ctv q8_0 -p 128 -n 32 -b 128 -ub 128** | Model | Size | Params | Backend | NGL | Batch | UBatch | Type K | Type V | FA | Test | Tokens/s | |--------------------------|-----------:|---------:|---------|----:|------:|--------:|-------:|-------:|---:|------|------------------:| | Qwen3.5 27B Q4_K Medium | 15.65 GiB | 26.90 B | CUDA | 99 | 128 | 128 | q8_0 | q8_0 | 1 | pp128 | 582.60 ± 28.57 | | Qwen3.5 27B Q4_K Medium | 15.65 GiB | 26.90 B | CUDA | 99 | 128 | 128 | q8_0 | q8_0 | 1 | tg32 | 21.22 ± 0.52 | 速度提升超过 **40%,且无质量损失**。此分支还 **支持最新的 mtp 变更**,我个人一直在使用: **--spec-type draft-mtp --spec-draft-p-min 0.75 --spec-draft-n-max 2** 实际使用中,我的每秒 token 数从约 25tps 提升到约 40tps,在类似“写一个故事”的长文本生成场景中。我认为这得益于受限的显存,但在使用 agentic 编码和更长上下文时,我个人更青睐 ngram-mod。 非常希望听到使用双 5060 Ti 或类似配置的用户的反馈。另外,双 Vulkan 配置的任何反馈也很有趣,我正关注相关问题。 **简而言之**:如果你使用双 GPU,请获取/构建此分支,在命令行中添加 "-sm tensor",看看速度是否提升 50%!**注意**:我刚刚发现 MoE 模型与 "-sm tensor" 存在一个问题,与本修复无关。目前建议在密集模型上测试,例如 Qwen3.6 27b/9b 等。张量拆分似乎很不受重视,但它可是免费提升 50% 的性能啊!如果反响不错,我将着手修复 MoE 问题并引入 Turboquants。
相似文章
Llama.cpp:拆分模式张量修复即将到来?
Llama.cpp 预计将获得针对多 GPU 配置下拆分模式张量崩溃问题的修复,该问题目前每 90-120 分钟导致 VRAM 耗尽。据称,该修复还能带来约 35% 的吞吐量提升,优于分层模式。
ICYM: llama.cpp b9455 --SM Tensor KV 缓存修复已合并
llama.cpp 版本 b9455 合并了一个针对多 GPU 设置中 `-sm tensor` KV 缓存量化的修复,解决了展平张量时形状信息丢失的问题。
llama.cpp b9095 发布!支持双 Blackwell PCIe 显卡无需 NCCL 的张量并行
llama.cpp b9095 版本引入了针对双 Blackwell PCIe GPU 的免 NCCL 张量并行功能,使得在不依赖 NCCL 的情况下也能实现高效的多 GPU 推理。
SYCL: 从 CUDA 后端移植多列 MMVQ(在 Intel Arc 上获得约 45% 的推测解码加速)by masonmilby · Pull Request #21845 · ggml-org/llama.cpp
一个针对 llama.cpp 的拉取请求,将多列 MMVQ 从 CUDA 移植到 SYCL,在 Intel Arc GPU 上实现了约 45% 的推测解码加速。
[llama.cpp] 非对称 KV q8/q4 缓存:当前注意事项及 GGML 仓库中的讨论
讨论了在 llama.cpp 中使用非对称 KV 缓存量化时的注意事项,其中不匹配的 q8/q4 类型会导致提示处理在 CPU 而非 GPU 上进行,并提出了通过编译标志进行修复的方案。