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 不再报错,显存占用仍在安全范围。

并发数和上下文是乘法关系,加并发不加上下文,等于把每个请求的可用窗口切小。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189