hybrid_inference_blog llama.cpp b9804 编译实录 Qwen3.6-35B-A3B 混合推理方案一篇关于在 GTX 1060 6GB 上驯服 35B 大模型的实战记录2026-06-26 |—背景手里一台旧机器i7-8750H GTX 1060 6GB 32GB RAM。显存只有 6GB却想跑 35B 的 Qwen3.6-35B-A3BMoE 架构35B 总参3B 激活。这不是天方夜谭——混合推理就是答案。旧版 llama.cpp (b9664) 已经能跑但新版 b9804 带来了关键的 KV 缓存卸载控制参数。本文记录从旧版升级到新版、并设计混合推理方案的全过程。一、b9804 编译为什么不自己编译1.1 预编译包的选用llama.cpp 的 GitHub Releases 页面提供了多种预编译包包名内容llama-b9804-bin-win-cpu-x64.zipCPU 版含 16 种 CPU 架构优化 DLLllama-b9804-bin-win-cuda-12.4-x64.zipCUDA 版含 ggml-cuda.dllcudart-llama-bin-win-cuda-12.4-x64.zipCUDA 运行时 DLLcublas, cudart踩坑一开始只下了 CPU 版 CUDA 运行时以为把 CUDA DLL 丢进去就能用。但 CPU 版的llama-server.exe根本没有编译 CUDA 内核——哪怕有ggml-cuda.dll也无法启用 GPU 加速。正确的做法下载llama-b9804-bin-win-cuda-12.4-x64.zip这才是真正带 CUDA 的 build再加上cudart-llama-bin-win-cuda-12.4-x64.zip运行时依赖1.2 为什么不用源码编译环境检查发现❌ 没有 CMake❌ 没有 MSVC 编译器✅ 有 Git在 Windows 上编译 llama.cpp 需要 CMake 支持 CUDA 的编译器MSVC 或 Clang。如果从零搭建工具链耗时且容易踩坑。预编译包是最快捷的选择。如果要自己编译大致流程gitclone https://github.com/ggml-org/llama.cppcdllama.cppmkdirbuildcdbuild cmake..-DGGML_CUDAON-DCMAKE_BUILD_TYPERelease cmake--build.--configRelease1.3 b9804 的新特性对比旧版 b9664b9804 新增了几个对混合推理至关重要的参数参数作用--no-kv-offload禁止 KV 缓存卸载到 GPU让 KV 留在 CPU/硬盘--cache-ram N设置 RAM KV 缓存上限0 纯磁盘 KV--device dev指定设备列表“none” 不卸载任何层--fit自动调整未设置参数适配显存--fit-target每设备预留 margin这些参数让我们能精准控制每部分资源往哪放。二、混合推理方案设计2.1 核心约束GPU 显存: 6 GB (GTX 1060) CPU 线程: 8 核 (i7-8750H, 12 线程) 物理内存: 32 GB 虚拟内存: Windows 分页文件 (SSD) 模型大小: ~20 GB (Q4_K_M 量化后) KV 缓存: 128K ctx × 2 slot ≈ 很多 GB显存只有 6GB而模型 20GB、KV 缓存随便就几十 GB。必须把不同部分放在不同的存储层级。2.2 资源分配策略┌─────────────────────────────────────────────────┐ │ 混合推理资源分配 │ ├─────────────┬─────────────────────┬─────────────┤ │ GPU 显存 │ 系统内存 │ 硬盘 SSD │ ├─────────────┼─────────────────────┼─────────────┤ │ 前 20 层推理 │ mmap 模型页调度 │ KV 缓存 │ │ flash-attn │ MoE 专家层 (CPU) │ slot 持久化 │ │ │ 中间激活值 │ │ ├─────────────┴─────────────────────┴─────────────┤ │ 物理内存不足时 → Windows 自动分页到虚拟内存 │ └─────────────────────────────────────────────────┘GPU 显存 (6GB)前 20 层推理--n-gpu-layers 206GB 放不下整个模型但放前 20 层的权重 计算中间值绰绰有余启用--flash-attn auto减少显存占用系统内存 (32GB)模型权重 via mmap不--no-mmap让 OS 用虚拟内存管理MoE 专家层--n-cpu-moe 999所有专家层在 CPU 计算物理内存够用时模型常驻 RAM不够时 OS 自动换出到分页文件硬盘 (SSD)KV 缓存--cache-ram 0--no-kv-offloadKV 缓存不走显存、不走 RAM直接写到硬盘slot-save-path128K 上下文 × 双槽再大也不爆显存/内存2.3 关键参数详解llama-server.exe ^-mmodel.gguf ^--mmprojmmproj.gguf ^# 视觉能力可选--n-gpu-layers20^# GPU 处理前 20 层--n-cpu-moe999^# MoE 专家全走 CPU--no-warmup ^# 跳过预热快速启动-t8^# 8 线程推理--ctx-size131072^# 128K 上下文-np2^# 2 个并发槽位--cache-type-k q4_0 ^# KV 缓存 4-bit 量化--cache-type-v q4_0 ^ --cache-ram0^# KV 走硬盘--no-kv-offload ^# KV 不卸载到 GPU--slot-save-path slots\^# 槽位持久化路径--flash-attn auto ^# Flash Attention--temp0.30--top-k60^# 采样参数--min-p0.15--repeat-penalty1.122.4 为什么这么配问题方案显存只有 6GB模型 20GB只放 GPU 前 20 层剩下走 CPU mmapKV 缓存随上下文线性增长走硬盘不受 RAM/VRAM 限制物理内存不够用mmap Windows 分页 虚拟内存兜底7×24 长期运行KV 持久化到磁盘断线可恢复MoE 模型显存爆炸MoE 专家全部 CPUGPU 只处理 dense 层三、实测验证3.1 启动测试用--ctx-size 4096快速验证启动日志关键输出I device_info: - CUDA0: NVIDIA GeForce GTX 1060 (6143 MiB, 5199 MiB free) - CPU: Intel(R) Core(TM) i7-8750H (32608 MiB, 22996 MiB free) I srv llama_server: server is listening on http://127.0.0.1:8080CUDA 正常识别模型加载成功无 OOM 报错。3.2 资源占用预估资源占用预估GPU 显存~3-4 GB20 层权重 计算缓冲物理内存16-24 GBmmap 按需驻留虚拟内存动态OS 自动管理硬盘 KV每 token ~40-80 bytes (q4_0)四、经验总结4.1 编译层面的教训CPU 包 ≠ 通用包CPU-only 的 exe 即使有 CUDA DLL 也无法 GPU 加速必须下对应 CUDA 包CUDA 运行时版本匹配系统装的是 CUDA 12.8但预编译包用 12.4 运行时——向下兼容没问题GitHub 下载慢的替代方案不成功的代理、SSL 错误的镜像站……最后用gh-proxy.com走通了4.2 混合推理的核心原则分层存储显存放计算密集型层内存放权重主体硬盘放 KV 缓存资源隔离--no-kv-offload防止 KV 偷偷吃掉显存虚拟内存兜底mmap让 OS 管理物理内存和分页文件的调度量化贯穿模型 Q4_K_M KV q4_0从头到尾不浪费字节4.3 适用场景这套方案特别适合显存有限6-8GB但内存较大32GB的机器需要超长上下文100K-256K且持续运行MoE 架构大模型DeepSeek、Qwen3 MoE 系列附完整启动脚本echo off set SERVERD:\Llama Server\llama.cpp\bin\llama-server.exe set MODELD:\Llama Server\llama.cpp\models\Qwen3.6-35B-A3B-....gguf set MMPROJD:\Llama Server\llama.cpp\models\mmproj-....gguf set SLOTSD:\Llama Server\llama.cpp\slots %SERVER% ^ -m %MODEL% ^ --mmproj %MMPROJ% ^ --host 127.0.0.1 --port 8080 ^ --n-gpu-layers 20 ^ --n-cpu-moe 999 ^ --no-warmup ^ -t 8 ^ --ctx-size 131072 ^ -np 2 ^ --batch-size 512 ^ --ubatch-size 256 ^ --cache-type-k q4_0 ^ --cache-type-v q4_0 ^ --cache-ram 0 ^ --no-kv-offload ^ --slot-save-path %SLOTS% ^ --flash-attn auto ^ --temp 0.30 --top-k 60 --top-p 0.80 --min-p 0.15 --repeat-penalty 1.12 ^ --repeat-last-n 256 ^ --alias Qwen3.6-35B-A3B ^ --timeout 1800 ^ --ui本文基于 GTX 1060 6GB i7-8750H 32GB RAM Windows 10 实测具体参数请根据你的硬件调整--n-gpu-layers和--ctx-size。