llama-server 起 7B 模型,参数给了 -c 8192 --parallel 4,单请求长 prompt 报 context 不足,实际可用上下文只有 2048,短请求则完全正常。
这类报错背后常见的原因有几处,逐个排除就行。总上下文会按并发槽位数均分;要 4 路并发各 8k,就得把总上下文开到 32k;模型本身的训练上下文有限制;KV cache 显存随槽位数线性增长。
动手时先确认服务实际的总上下文与槽位
curl -s http://127.0.0.1:8080/props | jq '{n_ctx,total_slots}'
然后把总上下文按槽位数放大后重启
llama-server -m model.gguf -c 32768 --parallel 4 -ngl 99
接着用长 prompt 验证单槽可用长度
curl -s http://127.0.0.1:8080/completion -d '{"prompt":"把下面这段总结成一句话","n_predict":64}'
剩下的就是观察显存占用是否还在余量内
nvidia-smi --query-gpu=memory.used --format=csv
同一份数据我导出了两份,一份留底,一份拿来试。
这类问题以前遇到过,但这次的触发条件和上次不一样。
恢复的判定其实很直接。props 里每个槽位的上下文达到 8192,长 prompt 不再报错,显存占用仍在安全范围。
并发数和上下文是乘法关系,加并发不加上下文,等于把每个请求的可用窗口切小。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
