目录
这次测试的结论很直接:
- RTX 3060 12GB 可以跑 Qwen3.6-35B-A3B-UD-Q4_K_M
- 64K 上下文可以正常启动
- 单路长任务实际生成速度约 33 tok/s
- 显存不是瓶颈,CPU/RAM 和 MoE offload 策略才是瓶颈
本教程记录完整复现流程,适合 Windows + NVIDIA 显卡用户照着做。
一、实测硬件环境
本次远程测试机器配置:
| 项目 | 配置 |
|---|---|
| CPU | AMD Ryzen 7 3700X,8 核 16 线程 |
| GPU | NVIDIA RTX 3060 12GB |
| 内存 | 32GB DDR4 |
| 系统 | Windows 11 专业版 |
| 驱动 | NVIDIA Driver 595.97 |
| CUDA Driver Runtime | CUDA 13.2 |
| 推理框架 | llama.cpp b9297 Windows CUDA 13.1 release |
| 模型 | Qwen3.6-35B-A3B-UD-Q4_K_M.gguf |
模型文件位置:
D:\Qwen3.6-35B-A3B-UD-Q4_K_M.gguf
新版 llama.cpp 安装位置:
C:\Users\yang2\llama-b9297-bin-win-cuda-13.1-x64
二、为什么 12GB 显存能跑 35B Q4
Qwen3.6-35B-A3B 是 MoE 模型。
它的总参数是 35B 级别,但每个 token 不会激活全部参数。再配合 llama.cpp 的 MoE CPU offload,可以把一部分专家层放到 CPU/RAM,GPU 主要承担更适合它的计算。
关键点不是“12GB 显存装下完整 35B Q4”,而是:
- 模型权重通过 mmap 和 CPU/RAM 参与加载
- MoE 专家层可以部分放 CPU
- GPU 负责 CUDA 加速路径
- KV cache 使用
q4_0降低上下文成本 - Flash Attention 降低长上下文压力
这也是为什么显存只用了 3GB 到 7GB,但模型仍能正常生成。
三、下载官方 llama.cpp Windows CUDA release
打开官方 release 页面:
https://github.com/ggml-org/llama.cpp/releases
本次测试使用:
llama.cpp b9297
Windows x64 CUDA 13
CUDA 13.1 DLLs
需要下载两个文件:
llama-b9297-bin-win-cuda-13.1-x64.zip
cudart-llama-bin-win-cuda-13.1-x64.zip
解压到同一个目录,例如:
C:\Users\你的用户名\llama-b9297-bin-win-cuda-13.1-x64
注意:两个 zip 要解压到同一个目录。第一个是 llama.cpp 程序,第二个是 CUDA runtime DLL。
四、验证 CUDA 后端是否正常
进入 llama.cpp 目录后运行:
llama-bench.exe --help
正常情况下应该能看到类似信息:
ggml_cuda_init: found 1 CUDA devices
Device 0: NVIDIA GeForce RTX 3060
load_backend: loaded CUDA backend
load_backend: loaded CPU backend
如果看到 CUDA backend 成功加载,说明 Windows CUDA 版 llama.cpp 可用。
五、推荐启动参数:单人 64K 高吞吐版
这是本次实测后推荐的最终参数:
@echo off
chcp 65001 >nul
cd /d C:\Users\你的用户名\llama-b9297-bin-win-cuda-13.1-x64
llama-server.exe ^
-m "D:\Qwen3.6-35B-A3B-UD-Q4_K_M.gguf" ^
-ngl 99 ^
--n-cpu-moe 32 ^
--flash-attn on ^
--jinja ^
-c 65536 ^
-t 8 ^
-b 512 ^
-ub 128 ^
--cache-type-k q4_0 ^
--cache-type-v q4_0 ^
-np 1 ^
--cache-ram 0 ^
--host 127.0.0.1 ^
--port 8080
pause
启动后浏览器访问:
http://127.0.0.1:8080
六、参数解释
-ngl 99
尽可能把可 offload 的层放到 GPU。
--n-cpu-moe 32
这是这次测试最关键的优化参数。
一开始参考 RTX 3070 8GB 的配置使用:
--n-cpu-moe 999
这个参数更保守,能保证启动,但 GPU 使用率偏低。
本次 RTX 3060 12GB 实测发现:
--n-cpu-moe 32
能把更多 MoE 计算交给 GPU,实际生成速度从约 26.8 tok/s 提升到约 33.1 tok/s。
不建议直接设为 0 或 16。实测 Q4 模型下反而变慢。
-c 65536
上下文长度设为 64K。
单人模式下 64K 已经测试通过,资源占用可控。
-np 1
只开 1 个并发 slot。
llama-server 默认可能自动开多个 slot。之前测试中默认开了 4 个 32K slot,会额外占用内存。
单人使用建议明确加:
-np 1
--cache-ram 0
关闭 prompt cache。
新版 llama-server 默认可能启用 8GB prompt cache。32GB 内存机器上建议关闭。
--cache-type-k q4_0 / --cache-type-v q4_0
KV cache 量化。
这是 64K 上下文能稳定跑的重要条件之一。
-b 512 -ub 128
比较稳的 batch 设置。
如果只想提升长文档 prompt processing,可以再试:
-b 1024 -ub 256
但这不一定提升生成速度。
七、实测性能结果
1. 文章保守参数:--n-cpu-moe 999
使用 64K 上下文、单人模式、关闭 prompt cache:
Prompt processing: 57.8 tok/s
Generation: 26.8 tok/s
资源占用:
| 项目 | 结果 |
|---|---|
| 显存 | 约 3330 MiB / 12288 MiB |
| GPU 利用率 | 约 33-38% |
| GPU 显存控制器利用率 | 约 19-25% |
| GPU 功耗 | 约 44-53W |
| llama 进程工作集 | 约 20.8GB |
| 系统剩余内存 | 约 5.7-6GB |
判断:能跑,稳定,但 GPU 没吃满。
2. 优化参数:--n-cpu-moe 32
使用同样的 64K 上下文和其他参数,仅把:
--n-cpu-moe 999
改成:
--n-cpu-moe 32
实际生成速度:
Generation: 33.1 tok/s
资源占用:
| 项目 | 结果 |
|---|---|
| 显存 | 约 7100 MiB / 12288 MiB |
| GPU 利用率 | 约 42% |
| 系统剩余内存 | 约 5.27GB |
判断:这是当前 RTX 3060 12GB 上更合理的吞吐参数。
3. --n-cpu-moe 对比
llama-bench 补测结果:
--n-cpu-moe |
生成速度 |
|---|---|
| 0 | 12.31 tok/s |
| 16 | 19.29 tok/s |
| 32 | 29.93 tok/s |
| 64 | 27.37 tok/s |
| 128 | 26.16 tok/s |
| 256 | 26.40 tok/s |
| 999 | 24.92 tok/s |
结论:
Q4_K_M 模型在 RTX 3060 12GB 上,--n-cpu-moe 32 是目前实测最佳点。
八、如何复现测速
基准测试
C:\Users\你的用户名\llama-b9297-bin-win-cuda-13.1-x64\llama-bench.exe ^
-m D:\Qwen3.6-35B-A3B-UD-Q4_K_M.gguf ^
-ngl 99 ^
-ncmoe 32 ^
-fa 1 ^
-ctk q4_0 ^
-ctv q4_0 ^
-b 512 ^
-ub 128 ^
-t 8 ^
-p 512 ^
-n 128 ^
-r 1 ^
-o md
重点看 tg128,它对应生成速度。
实际生成测试
C:\Users\你的用户名\llama-b9297-bin-win-cuda-13.1-x64\llama-cli.exe ^
-m D:\Qwen3.6-35B-A3B-UD-Q4_K_M.gguf ^
-ngl 99 ^
--n-cpu-moe 32 ^
--flash-attn on ^
--jinja ^
-c 65536 ^
-t 8 ^
-b 512 ^
-ub 128 ^
--cache-type-k q4_0 ^
--cache-type-v q4_0 ^
-p "Write a detailed technical note about local LLM inference tuning on RTX 3060 12GB." ^
-n 512 ^
--temp 0.6 ^
-st
结束后看输出里的:
Prompt: xx.x t/s
Generation: xx.x t/s
查看显存
nvidia-smi
或用更简洁的查询:
nvidia-smi --query-gpu=memory.used,memory.total,utilization.gpu,utilization.memory,temperature.gpu,power.draw --format=csv,noheader,nounits
九、32GB 内存够不够
够,但不宽裕。
本次 64K 单任务实测:
llama 进程工作集约 20.8GB
系统剩余内存约 5-6GB
因此建议:
- 只跑单人单任务:32GB 可用
- 想长时间开服务:建议 64GB
- 想多并发:建议 64GB 起步
- 不要同时开重型后台软件、浏览器大量标签、网盘同步、游戏录制
十、显存为什么只用了 7GB 左右
这是正常现象,不是 GPU 没工作。
原因是当前参数仍然有一部分 MoE 专家层放在 CPU/RAM。显存没有被塞满,但吞吐已经提高。
如果盲目把 --n-cpu-moe 降到 0,理论上更多东西进 GPU,但实测 Q4 反而变慢:
--n-cpu-moe 0 -> 12.31 tok/s
这说明瓶颈不是简单的“显存越满越快”,而是 MoE 调度、CPU/RAM、PCIe、GPU kernel 之间的平衡。
十一、常见问题
1. 启动时报 CUDA 后端找不到
确认两个 zip 是否解压到同一个目录:
llama-b9297-bin-win-cuda-13.1-x64.zip
cudart-llama-bin-win-cuda-13.1-x64.zip
目录里应该能看到:
ggml-cuda.dll
cublas64_13.dll
cublasLt64_13.dll
cudart64_13.dll
2. 速度只有十几 tok/s
检查是否用了:
--n-cpu-moe 0
Q4 模型在 RTX 3060 12GB 上,0 不一定更快。本次实测最佳是:
--n-cpu-moe 32
3. 内存占用太高
确认是否加了:
-np 1
--cache-ram 0
没有这两个参数,llama-server 可能自动开多个 slot,并启用 prompt cache。
4. 中文乱码
批处理开头加:
chcp 65001 >nul
如果仍然乱码,建议把 prompt 写入 UTF-8 文本文件,再用:
-f prompt.txt
5. 64K 还能不能再加
理论上模型支持更长上下文,日志显示:
n_ctx_train = 262144
但 32GB 内存机器不建议默认上 128K。64K 是当前更稳的平衡点。
十二、最终建议
如果你的机器是 RTX 3060 12GB + 32GB 内存,建议直接使用:
-c 65536
--n-cpu-moe 32
-np 1
--cache-ram 0
--cache-type-k q4_0
--cache-type-v q4_0
这组参数在本次测试中实现了:
64K 上下文
约 33 tok/s 实际生成速度
约 7.1GB 显存占用
约 20.8GB 进程工作集
这是最适合 RTX 3060 12GB 的方案。