llama.cpp - 如何在GPU上释放更多空间

Reddit r/LocalLLaMA 工具

摘要

一则讨论如何在llama.cpp中释放GPU内存实用技巧的帖子,例如将mmproj卸载到CPU、调整KV缓存类型,同时讨论了--cache-type-k/v和--spec-draft-n-max等参数。

在过去一两周里,llama.cpp在RAM使用方面表现好了很多。我不再看到内存泄漏,一切都能很好地适配在GPU上——我的默认设置是--n-gpu-layers 99 --no-mmap --mlock,以避免使用普通RAM,因为我用的是3090配合eGPU配置:Qwen3.6-27B-UD-Q5_K_XL-mtp, q4_0, 150k上下文。我创建这个帖子是想看看有没有更多技巧来释放更多内存,以便进一步增大上下文大小。以下是我针对某个模型(当然,这是内存占用最大的因素)整理的VRAM相关参数列表: --no-mmproj-offload:这是最大的改进:如果你的模型支持视觉,你可以将mmproj卸载到CPU。性能会有一点下降,但你的显卡上会多出1GB的可用空间。 --cache-type-k, --cache-type-v:KV缓存(显然)——可以将内存分配减少50%、75%等,但质量也会相应下降。我的观察是,自从引入了注意力旋转(attention rotation)后,我甚至可以用q4而不会明显感觉到质量下降,因为我可以用更大的基座模型——这比因KV缓存导致质量下降更有帮助。 --cache-type-k-draft, --cache-type-v-draft:同样适用于mtp模型的KV缓存。 --spec-draft-n-max:在单次前向传递中最多猜测未来x个token。对于编码,我通常用“2”就够了。“1”会稍微少用一些内存,但TPS下降约5%。“3”对我的用例没有意义——消耗更多内存,但TPS和“1”一样。 --flash-attn on:据我所知,现在这已经是默认值了。如果关闭它,内存分配会增加,但如果你使用量化v缓存,无论如何也不能关闭。 一些我本以为会有帮助的参数,后来发现其实并没有: --ctx-checkpoints:我听说减小这个值也能减少内存分配,但对我来说并非如此。默认值是64,我减小到一个很小的值也没变化。 --parallel:同时活跃的用户请求数。由于默认值是1,在单用户设置下你无能为力。但如果你增大它,主会话的KV缓存会相应减少(50%、66%等)。 --fit-target:设置一个严格的安全缓冲区(单位MB,默认1024),引擎必须保证GPU上完全空出这么多空间(例如,留给视频I/O)。由于我的显示器插在另一张卡上,我把它减到了64,但一点帮助也没有。据我所知,llama.cpp现在会在启动时运行内部计算循环,自动调整一些变量以防止OOM崩溃。 我已经分享了我的技巧,你有哪些?还有别的吗?你的体验和我的不同吗?谢谢!
查看原文

相似文章

也许将KV缓存卸载到RAM并不差

Reddit r/LocalLLaMA

一位用户分享了在llama.cpp中将KV缓存卸载到RAM的经验,在释放显存以便运行更大模型和上下文窗口的同时,实现了相近的速度,表明这种权衡通常是值得的。

双GPU llama.cpp加速

Reddit r/LocalLLaMA

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