我复刻了 ik_llama.cpp 并添加了 "--numa mirror" 模式,以最大化多路 CPU 系统的性能。分享并寻找测试者!

Reddit r/LocalLLaMA 工具

摘要

一位开发者复刻了 ik_llama.cpp,添加了 '--numa mirror' 模式,该模式在 NUMA 节点间复制模型权重和 KV 缓存,以最大化多路 CPU 推理性能,并分享了基准测试结果,寻求测试者。

GitHub: https://github.com/mikechambers84/ik_llama.cpp/tree/numa-mirror 请务必检出 numa-mirror 分支。 分享给其他试图使用多路 CPU 系统进行推理的人。 我一直渴望拥有 NUMA 镜像模式,所以最终复刻了 ik_llama.cpp 并添加了它。ik_llama.cpp 是 llama.cpp 的一个复刻,为 CPU 推理带来了显著的性能提升,因此基于它进行复刻比基于原始 llama.cpp 更有意义。 对于不了解此模式要解决的问题的人:多路机器中每个插槽拥有本地内存。当 CPU 访问自己的本地内存时速度极快。如果 CPU 需要通过不同插槽远程访问非本地内存,由于数据必须通过远慢于本地内存的桥接传输,会导致巨大的性能损失。对于大多数工作负载,这影响很小,你可能不会注意到。但由于 LLM 推理性能与内存带宽高度相关,如果尝试使用多个 CPU 且每个 token 都需要读取大量远程内存,性能会完全崩溃。 通常的解决方案是使用 llama.cpp 中的 --numa isolate,它将模型/上下文数据固定到单个插槽的 CPU 和内存,消除了远程内存访问,但这样多个 CPU 并无益处,除了一个之外其他都闲置。 本复刻添加了 --numa mirror,它会完整复制模型权重和 KV 缓存,使每个 CPU 插槽都拥有节点本地副本。这允许你实际使用所有插槽上的全部 CPU 核心来加速推理,而非降低速度。代价显而易见:需要更多内存。如果有两个 CPU 插槽,则需要使用双倍 RAM。 我希望 ikawrakow 能接受这次拉取请求。我会尽快提交,但希望首先有更多人在各种硬件配置上测试,而不仅限于我的配置。 我的基准测试显示出了显著的性能提升!我的硬件有些过时,很想知道它在更新设备上的表现。 ### 测试设置 * **操作系统:** Debian 13 "Trixie",基准测试期间禁用 numa_balancing * **硬件:** * **型号:** Dell PowerEdge R740 * **CPU:** 2× Intel Xeon Gold 6248R (Cascade Lake),2 个 NUMA 节点(每个 24 核 / 48 线程) * **RAM:** 768 GB RAM(每个节点 384 GB)ECC DDR4 2400 MHz,全部 12 条内存通道已填满 * **构建:** CPU 后端,Release 模式,-DGGML_NATIVE=ON -DGGML_AVX512=ON -DGGML_AVX512_VNNI=ON。(未启用 VBMI/BF16——Cascade Lake 不支持 avx512_vbmi / avx512_bf16。) * **工具:** llama-bench,每个结果重复 3 次(-r 3)。每次运行标志:-rtr 1 -b 16 -ub 16 -p 512 -n 128(启用运行时重新打包;批大小和微批大小 16;pp512 = 512 个 token 的提示处理,tg128 = 128 个 token 的生成)。 * **比较模式**(-t/-tb 设置相同线程数): * isolate — --numa isolate -t 24 -tb 24(一个插槽 / 24 核)—— 单插槽基线 * mirror — --numa mirror -t 48 -tb 48(两个插槽,每个节点复制权重 + KV) 所有吞吐量数字单位为 token/秒(越高越好)。 #### Token 生成 (tg128) | 模型 | isolate (1 插槽, 24t) | mirror (2 插槽, 48t) | mirror vs isolate | |---|---|---|---| | gemma-4-E2B (dense, Q5_K_M) | 47.20 | 62.00 | 1.31× | | gemma-4-E4B (dense, Q5_K_M) | 23.77 | 33.62 | 1.41× | | gemma-4-26B-A4B (MoE, UD-Q4_K_M) | 23.59 | 34.76 | 1.47× | | Qwen3.6-27B (dense, Q4_K_M) | 5.27 | 8.32 | 1.58× | | Qwen3.6-35B-A3B (MoE, UD-Q5_K_M) | 24.70 | 31.56 | 1.28× | | Qwen3.5-122B-A10B (MoE, UD-Q3_K_XL) | 10.00 | 14.46 | 1.45× | #### 提示处理 (pp512) | 模型 | isolate (1 插槽, 24t) | mirror (2 插槽, 48t) | mirror vs isolate | |---|---|---|---| | gemma-4-E2B (dense,Q5_K_M) | 259.90 | 256.69 | 0.99× | | gemma-4-E4B (dense, Q5_K_M) | 141.88 | 184.06 | 1.30× | | gemma-4-26B-A4B (MoE, UD-Q4_K_M) | 143.41 | 201.69 | 1.41× | | Qwen3.6-27B (dense, Q4_K_M) | 33.04 | 54.22 | 1.64× | | Qwen3.6-35B-A3B (MoE, UD-Q5_K_M) | 153.68 | 193.21 | 1.26× | | Qwen3.5-122B-A10B (MoE, UD-Q3_K_XL) | 57.17 | 83.01 | 1.45× |
查看原文

相似文章

@no_stp_on_snek: 如果你想试试,可以在这里找到:

X AI KOLs Following

这是一个 llama.cpp 的分支,集成了 TurboQuant+,用于先进的 KV 缓存和权重量化,支持跨后端内核(Apple Silicon、NVIDIA CUDA、AMD ROCm、Vulkan),并被 LocalAI、Chronara 和 AtomicChat 用于生产环境。

专家优先的llama.cpp

Reddit r/LocalLLaMA

一位开发者创建了llama.cpp的实验性分支,该分支仅将已使用的专家(expert)而非完整层卸载到显存,从而在RTX 2060 12GB等显存有限的GPU上为MoE模型带来了速度提升。作者正在寻找测试者,以验证其在其他Nvidia GPU上的性能表现。

双GPU llama.cpp加速

Reddit r/LocalLLaMA

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