本地大模型部署实战:llama.cpp + 35B A3B 多模态模型
背景
用户在一台 RTX 3080(20GB 显存)的 Linux 机器上,使用 llama.cpp 的 llama-server 部署了 Qwen3.6-35B-A3B 多模态大模型(Q3_K 量化版),但在使用过程中发现模型退出了。
问题排查
系统状态
| 检查项 | 结果 |
|---|---|
| 显存占用 | 1 MiB / 20480 MiB(完全空闲) |
| 端口监听 | 8001 端口无服务 |
| 进程状态 | 无 llama-server 进程 |
关键发现
系统中存在两套推理方案:vLLM(9B 服务)和 llama.cpp(35B 服务),用户实际使用的是后者。需要正确识别用户使用的模型栈。
解决过程
1. 清理并启动
旧进程挂掉后端口未释放,先清理,然后用完整参数启动:
llama-server \
--model Huihui-Qwen3.6-35B-A3B-abliterated-ggml-model-Q3_K.gguf \
--mmproj mmproj-model-f16.gguf \
--host 0.0.0.0 --port 8001 --alias 35B \
--ctx-size 32768 --n-gpu-layers -1 \
--cont-batching --mlock --no-mmap
2. 多模态能力验证
生成一张测试图片(蓝色边框 + 白色背景 + 红色 “Hello” 文字),模型正确识别:
“一个正方形,蓝色边框,内部白色背景,左上方有红色文字’Hello‘“
3. 性能表现
| 指标 | 实测 |
|---|---|
| 显存占用 | 约 17.8 GB / 20 GB |
| 提示处理(含图片) | 136 tokens/s |
| 文本生成 | 122 tokens/s |
4. 开机自启配置
由于没有 sudo 权限,无法使用 systemd,改用 crontab @reboot 实现:
crontab -l 2>/dev/null; echo "@reboot /path/to/start_35b.sh >> /tmp/llama-35b.log 2>&1" | crontab -
技术要点
参数解析
| 参数 | 作用 |
|---|---|
--mmproj | 加载多模态视觉投影文件(必备!) |
--n-gpu-layers -1 | 全量加载到 GPU |
--mlock --no-mmap | 锁定物理内存,防止被换出 |
--cont-batching | 连续批处理提高吞吐 |
--cache-type-k/q8_0 | KV 缓存用 8-bit 量化节省显存 |
为什么选 Q3_K 量化?
- Q3_K 保留约 85% 的模型质量
- 35B 模型从原始 70GB 压缩到约 17GB
- 恰好塞进 20GB 显存,留出 2GB 余量
经验总结
- 多模态必须加
--mmproj:不带这个参数模型无法处理图片 - Q3_K 量化是 20GB 显存的甜点:35B 级别模型的最佳平衡
- crontab @reboot 破局:无 sudo 时用户级自启的实用方案
- 大模型运维中,善用 nvidia-smi 和端口检查快速定位问题