用 llama-cli 加载 7B 的 q4 模型,任务管理器里 CPU 跑满而显卡闲着,生成速度只有 4 token/s。

一开始怀疑是「显存不足,部分层被自动回退到内存」,查了一圈,方向不对。

真正麻烦的地方在于,几个原因的现象几乎一样。没有传 -ngl,默认全部放在 CPU 上。少数情况下是编译时没有开 CUDA 支持,只能用 CPU 后端。

另外,模型文件本身是纯 CPU 优化格式。

动手时先确认二进制是否带 CUDA 支持

./llama-cli --version

然后把层数全部卸载到显卡

./llama-cli -m qwen2.5-7b-q4.gguf -ngl 99 -c 4096 -p "你好" -n 64

显存不够时逐档下调找平衡点

./llama-cli -m qwen2.5-7b-q4.gguf -ngl 20 -c 4096 -p "你好"

剩下的就是观察显存与速度变化

nvidia-smi --query-gpu=memory.used --format=csv

同样的操作我在测试机上先走了一遍,线上只做验证过的部分。

恢复的判定其实很直接。生成速度提升到 40 token/s 以上,nvidia-smi 显存占用上升,CPU 占用明显下降,长时间对话也不再掉速。

补一句。上下文越长占用的显存越多,-c 设得很大时即使层数合适也可能爆显存,调 ngl 和 c 要一起看。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189