这类问题我又碰上了一次。MacBook 外接显卡跑 LM Studio 0.3.5,加载 13B 的 q4 模型,生成速度只有 3 token/s,设置页里 GPU Offload 那一栏显示的层数是 0。

第一反应是「选错了运行时,用的是 CPU 版后端」,验证下来不成立。

原因不止一个,得分开看。模型加载时没开 GPU 卸载,全在 CPU 上跑;显存不够时自动回落到部分卸载,层数被悄悄调低;上下文长度设得过大,挤占了可用于权重的显存。

第一件事是看模型加载后的运行信息

curl -sS http://localhost:1234/v1/models | jq -r '.data[].id'

再往下把 GPU 卸载层数拉满后重新加载

curl -sS http://localhost:1234/v1/chat/completions -H 'content-type: application/json' -d '{"model":"qwen2.5-7b-instruct","messages":[{"role":"user","content":"hi"}],"max_tokens":32}'

等前面都确认过,再把上下文从 32768 降到 8192 再测速

curl -sS http://localhost:1234/v1/completions -H 'content-type: application/json' -d '{"model":"qwen2.5-7b-instruct","prompt":"写一段话","max_tokens":128}' -w '\n%{time_total}\n'

当时还开着另一个排查窗口,两边日志对照着看才定位到。

恢复的判定其实很直接。生成速度稳定在每秒二十个 token 以上,加载信息里的卸载层数接近总层数,显存占用留有余量。

卸载层数不是拉满就最快,最后一层放到 CPU 反而会因为来回搬运变慢,显存够就全放,不够就整段挪。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189