2026年7月3日
ChatGPT-Image-May-24-2026-05_05_52-PM

目录

这次测试的结论很直接:

  • 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。

不建议直接设为 016。实测 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 的方案。

About The Author

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注