让需要 24GB 显存的模型跑在 6GB 显卡上
Henrique Soares 用 lowvram 在 CUDA 分配层接入统一内存,让原本直接 OOM 的模型把不活跃页放进系统内存;YuE2 在 RTX 3060 6GB 上跑到 43.1 tokens/s。
- 具体怎么做
- 作者没有继续修改 YuE2 源码,而是做了一个可包裹 CUDA 程序的拦截层:通过 LD_PRELOAD 抢先加载,把 cuMemAlloc 换成 cuMemAllocManaged。应用仍看到普通设备指针,NVIDIA 驱动负责在显存与系统内存之间迁移页面。运行时只需在原命令前加 lowvram。
- 做到了什么
- 未经修改的 PyTorch 无法在 6GB RTX 3060 上加载要求 24GB 显存的 YuE2;lowvram 跑到平均 43.1 tokens/s,范围 41.0–46.0,约为手工删除 NAR 部分的 oracle 45.3 tokens/s 的 95%,并比 Accelerate 的 1.9 tokens/s 快 23 倍。Qwen3-TTS 也从 cudaMalloc OOM 变为成功生成。
- 上手要点
- 仅适用于 Linux、NVIDIA CUDA 和支持统一内存的环境。工作集超出显存后会受 PCIe 分页影响;还要限制系统内存,避免应用持续分配把 RAM 耗尽。
你可以这样试
使用 Claude Code在【Linux 发行版】和【NVIDIA GPU/显存】上评估用 lowvram 运行【模型或 CUDA 程序】。先记录原命令、峰值显存、系统内存和 OOM 位置;再安装并用 lowvram 包裹同一命令。分别测量成功率、吞吐、首结果延迟、峰值 RAM、峰值显存和页面迁移造成的停顿。与【原生 / CPU / Accelerate】做同输入对照,输出可复现命令、结果表、风险和是否值得长期使用。