在 RTX 4060 笔记本上运行 Qwen 3.5 9B:llama.cpp 本地部署实录
之前写了在 Fedora 44 上编译支持 CUDA 的 llama.cpp 的过程,这次记录一下用编译好的二进制运行 Qwen 3.5 9B 模型的完整经历,包括踩坑和性能测试结果。
硬件与模型
| 项目 | 配置 |
|---|---|
| CPU | AMD Ryzen 7 7840HS |
| GPU | NVIDIA RTX 4060 Max-Q 8GB |
| 内存 | 32GB DDR5 |
| 系统 | Fedora 44 (Linux 7.0.9) |
| 模型 | Qwopus3.5-9B-coder-Exp-IQ4_XS.gguf (5.2GB) |
| 视觉投影器 | mmproj.gguf (921MB) |
模型是 Qwen 3.5 系列的 9B 参数编码变体,IQ4_XS 量化后体积约 5.2GB。Qwen 3.5 是混合架构,同时使用 Transformer 注意力机制和 Mamba 状态空间模型(SSM),其中只有部分层(第 3、7、11、15、19、23、27、31 层)使用完整注意力,其余为 Mamba 层。这种设计使得 KV cache 占用比纯 Transformer 模型小得多。
编译产物在 /home/insidentally/Documents/shell/llama-cpp/bin/,模型文件在 /home/insidentally/Documents/shell/llama-cpp/model/。
启动服务
最基础的启动命令:
1 | cd /home/insidentally/Documents/shell/llama-cpp/bin |
踩坑 1:CUDA runtime 找不到
编译好的 llama-server 依赖 libcudart.so.13,但系统没有独立安装 CUDA Toolkit。本机的 CUDA 库来自 Ollama 自带的版本,位于 /usr/local/lib/ollama/cuda_v13/。需要在 LD_LIBRARY_PATH 中显式加入这个路径。
踩坑 2:--flash-attn 参数格式变了
早版本 llama.cpp 中 --flash-attn 是一个布尔开关,不带参数。当前版本(b9161)要求显式指定 on、off 或 auto:
1 | 旧写法,会报错 |
上下文长度的权衡
模型原生支持的上下文长度为 262144(262K),但 8GB 显存是硬约束。我测试了几种配置:
| 配置 | 上下文 | 视觉模型 | GPU 占用 | 能否运行 |
|---|---|---|---|---|
| A | 4096 | 加载 | 6534 MiB | 正常 |
| B | 65536 (64K) | 不加载 | 7336 MiB | 正常 |
| C | 65536 (64K) | 加载 | - | OOM 崩溃 |
64K 上下文加上 mmproj 视觉模型会超出显存。最终选择了方案 B:64K 上下文,不加载视觉模型。
对于混合架构的 Qwen 3.5 来说,Mamba 层的内存占用是 O(1) 的(固定大小状态),只有注意力层的 KV cache 随上下文长度线性增长。这使得 64K 上下文在 8GB 显存上成为可能。纯 Transformer 的 9B 模型在这个显存下大概只能跑到 8K-16K。
性能测试
用 OpenAI 兼容 API 进行测试:
1 | curl -s http://localhost:8080/v1/chat/completions \ |
结果:
| 指标 | 数值 |
|---|---|
| Prompt 处理速度 | 433.6 tokens/s |
| Token 生成速度 | 46.3 tokens/s |
| 单 token 延迟 | 21.6 ms |
| Prompt 处理延迟 | 2.3 ms/token |
46 tokens/s 的生成速度在笔记本 GPU 上算是不错的表现,日常对话基本感觉不到延迟。
注意事项
Qwen 3.5 默认开启思考模式(thinking mode),模型会先在 reasoning_content 字段输出推理过程,再在 content 字段输出正式回复。如果 max_tokens 设得太小,可能所有 token 都花在思考上,导致实际回复为空。建议至少设 300-500。
服务管理
启动后可以通过以下方式使用:
- 聊天页面:
http://localhost:8080(默认自带 WebUI,如果你 llama.cpp 没有编译 WebUI 则无法访问) - OpenAI 兼容 API:
http://localhost:8080/v1/chat/completions - 健康检查:
http://localhost:8080/health
后台运行可以用 nohup 或 systemd user service。
总结
在 8GB 显存的笔记本上运行 9B 参数的混合架构模型,体验比预期好。IQ4_XS 量化在体积和质量之间取得了不错的平衡,混合架构的内存效率让 64K 上下文成为可能。主要限制是视觉模型和大上下文不能同时启用,以及量化级别不宜再低(否则质量下降明显)。
如果需要视觉能力,可以切换回 4K 上下文 + mmproj 的配置。两种方案各有取舍,根据实际需求选择即可。
