Qwen3.6-35B 内存优化方案
·
GTX 1060 6GB跑Qwen3.6-35B-A3B 100K 大模型内存优化方案
21GB MoE 模型在 32GB 系统上流畅跑 100K 上下文
—
硬件环境
| 项目 | 配置 |
|---|---|
| CPU | Intel i7-8750H (6核12线程, 2.20GHz) |
| GPU | NVIDIA GTX 1060 (6GB VRAM) |
| 内存 | 32GB DDR4 2667 |
| C 盘 | 512GB NVMe SSD (系统盘) |
| D 盘 | 1.36TB (模型 + KV 缓存 + 页面文件) |
| E 盘 | 慢速盘 (已弃用) |
模型信息
- 模型: Qwen3.6-35B-A3B-Uncensored (MoE)
- 量化: Q4_K_M
- 文件大小: 21.17 GB
- mmproj: 多模态投影文件 (899 MB)
- 架构特点: Mixture of Experts,每次推理只激活 ~3B/35B 参数
优化目标
在 32GB 物理内存的系统上,流畅运行 21GB 的 MoE 大模型,上下文窗口达到 200K tokens。
核心优化思路
1. 内存分层管理
21GB 模型加载
│
├── ~3-5GB 物理内存 🔥 ← 频繁访问的共享层 + 常用专家
│
└── ~16-18GB 页面文件 💾 ← 冷门专家,被 OS 自动换出
KV 缓存 (200K 上下文 @ q4_0 ≈ 12GB)
│
├── 物理内存: 0 🚫 ← --cache-ram 0
│
└── D:\...\slots 💾 ← --slot-save-path 直接写入磁盘
2. 关键参数详解
--no-mmap (非内存映射加载)
- 将整个 21GB 模型加载到虚拟地址空间
- 由操作系统自动管理物理内存和页面文件之间的换入换出
- 优点:经常访问的页面始终在物理内存中,推理速度稳定
- 缺点:首次加载需要分配全部虚拟内存
--n-cpu-moe 999 (MoE 专家全走 CPU)
- 注意力层等稠密层 → GPU (GTX 1060, 6GB 足够)
- 专家权重 → CPU 计算
- 原因:MoE 模型的专家参数占 16GB+,GPU 装不下
- 配合
--no-mmap,专家权重由 OS 管理在物理内存和页面文件之间
--cache-ram 0 (KV 缓存不走物理内存)
- KV 缓存直接写入磁盘,不占用物理内存
- 通过
--slot-save-path指定磁盘路径 - 配合
--flash-attn减少每次推理需要读取的 KV 数据量
--cache-type-k/v q4_0 (KV 缓存量化)
- 将 KV 缓存从 fp16 压缩到 4-bit
- 内存占用减少 4 倍
- 200K 上下文从 ~50GB 降到 ~12GB
--n-gpu-layers 999 (最大 GPU 卸载)
- 所有支持 GPU 的层都卸载到 GPU
- 结合
--n-cpu-moe,GPU 只处理稠密层
3. 页面文件配置
页面文件(虚拟内存)是 --no-mmap 方案的关键:
❌ 错误配置:
C:\pagefile.sys 2 GB ← 太小,不够用
E:\pagefile.sys 64 GB ← 最慢盘,严重拖后腿
✅ 优化配置:
C:\pagefile.sys 2 GB ← 系统保留
D:\pagefile.sys 24 GB ← 和模型同盘,速度最快
E:\pagefile.sys 删除 ← 慢盘不用
为什么 D 盘最好?
- 模型文件在 D 盘
- KV 缓存也在 D 盘
- 页面文件放在 D 盘 = 所有大文件操作在同一块盘上,减少跨盘寻道
4. 完整启动脚本
@echo off
chcp 65001 > nul
title Qwen3.6-35B-A3B @ 200K 极速响应版
set SERVER=D:\Llama Server\llama.cpp\bin\llama-server.exe
set MODEL=D:\Llama Server\llama.cpp\models\Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf
set MMPROJ=D:\Llama Server\llama.cpp\models\mmproj-Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-f16.gguf
set SLOTS=D:\Llama Server\llama.cpp\slots
"%SERVER%" ^
-m "%MODEL%" ^
--mmproj "%MMPROJ%" ^
--host 127.0.0.1 --port 8080 ^
--n-gpu-layers 999 ^
--n-cpu-moe 999 ^
--no-mmap ^
--no-warmup ^
-t 8 ^
--ctx-size 200000 ^
-np 2 ^
--batch-size 512 ^
--ubatch-size 256 ^
--cache-type-k q4_0 ^
--cache-type-v q4_0 ^
--cache-ram 0 ^
--slot-save-path "%SLOTS%" ^
--rope-scale 2.5 ^
--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-Uncensored" ^
--timeout 1800 ^
--ui
pause
5. 性能预期
| 指标 | 值 |
|---|---|
| 模型物理内存 | ~3-5 GB |
| KV 缓存物理内存 | 0 GB (全走磁盘) |
| 页面前换出 | ~16-18 GB (D 盘) |
| GPU VRAM 占用 | ~2 GB (仅稠密层) |
| 上下文长度 | 200,000 tokens |
| 每秒生成速度 | 取决于 CPU MoE 性能 |
6. 优化历程总结
关键发现
- MoE 模型天然省内存:每次只激活 ~3B/35B 参数,大部分专家权重可以换出到页面文件
--no-mmap+ 页面文件:比传统 mmap 占用更多物理内存,但推理更稳定(无缺页中断抖动)- mmap 方案:物理内存占用低 (~6-7GB),但偶有 page fault 导致推理瞬断
- KV 缓存走磁盘:
--cache-ram 0+ q4_0 量化 + flash-attn,200K 上下文完全无物理内存压力 - 页面文件位置关键:一定要和模型放同一个最快盘,否则跨盘 I/O 严重拖慢推理
避坑指南
- ❌
--no-mmap+ 页面文件在慢盘 = 灾难性性能 - ❌
--cache-ram设太大 = 没必要占物理内存(反正 KV 缓存走磁盘是可行的) - ❌
--n-cpu-moe 999不配合--no-mmap= mmap 下 CPU 频繁缺页中断 - ✅
--no-mmap+ 同盘页面文件 + 磁盘 KV 缓存 = 最佳平衡
2026-06-24 | 记录
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)