展示 HN:为 5090 找到的最佳本地 LLM 设置(llama.cpp 分支 + turboquant)
本文详细介绍了如何在单张 32GB VRAM 的 RTX 5090 显卡上,通过 llama.cpp 的 TurboQuant 分支和 YaRN 缩放技术,运行 Qwen 3.6 35B MoE 模型并实现 450K token 的上下文窗口。内容涵盖模型选择、量化权衡、内存预算校准、KV 缓存量化、RoPE 缩放、多模态设置、实际复制指南、VRAM 生命周期管理以及性能评估。
本文详细介绍了如何在单张 32GB VRAM 的 NVIDIA RTX 5090 显卡上,通过 llama.cpp 的 TurboQuant 分支和 YaRN 缩放技术,运行 Qwen 3.6 35B MoE 模型,并实现高达 450,000 token 的上下文窗口。该方案已在 Windows 上完整实现并运行,但核心参数同样适用于 Linux 系统。
模型选择与量化权衡
选用的模型为 Qwen3.6-35B-A3B-Q6_K.gguf(28.5GB)。该模型采用混合专家(MoE)架构,每 token 仅激活约 3B 参数,兼顾速度与推理能力。量化级别选择 Q6_K 而非更低的 Q4 或 Q5,以保留超过 99% 的原始 BF16 困惑度,确保复杂代码生成的逻辑准确性和语法结构。
内存预算与上下文校准
在 32GB 物理显存中,模型权重占用 28.5GB,静态开销约 0.8GB,剩余约 2.7GB 用于上下文。标准 FP16 KV 缓存仅支持约 32K token。为实现 450K 上下文,采用两项关键技术:
- KV 缓存量化(TurboQuant):使用
--cache-type-k turbo3和--cache-type-v turbo3将 KV 缓存压缩至 3 位,减少约 80% 的缓存占用,使 450K 上下文适应剩余显存。该功能基于社区分支TheTom/llama-cpp-turboquant。
- RoPE 缩放(YaRN):模型的原始上下文长度为 262,144 token,通过
--rope-scaling yarn和--rope-scale 1.72扩展至 450K。需注意,超出原生范围会导致检索准确率和推理能力显著下降,困惑度随上下文长度增加而上升。
多模态设置
模型支持图像输入,需下载对应的视觉投影器 Qwen3.6-35B-A3B-mmproj-F16.gguf,并通过 --mmproj 参数加载。注意,llama.cpp 的图像解码器基于 stb_image 库,仅支持 PNG 和 JPEG,不支持 WebP 格式。
技术复制指南
提供了完整的模型下载脚本和服务器启动参数。推荐使用 --no-mmap 强制模型权重连续加载到显存,--flash-attn 开启闪存注意力机制,-ngl 99 将所有层和输出张量卸载至 GPU。另外,为管理近乎占满显存的后台进程,实现了基于 Go 的按需生命周期管理,通过 Web 仪表板控制服务器的启停,确保释放显存供其他应用使用。
性能评估与代码生成
测试中,模型成功生成了一个包含 Three.js 的交互式 3D 场景,代码一次性编译运行,展示了其处理大型代码库的能力。通过配置 OpenCode 客户端的 modalities 块,可解锁图像拖放支持,实现多模态开发辅助。
结论
在消费级硬件上运行 35B MoE 模型并实现 450K 上下文,体现了本地推理优化的进步。但该方案处于 32GB 显存的物理极限,几乎无动态分配余量,且扩展上下文会牺牲检索忠实度和逻辑推理准确性。对于关键任务,建议保持上下文在原生范围内;450K 限制更适合探索性搜索和广泛总结任务。