先看现象。sglang 0.3.4 跑多轮问答,日志里 radix cache 命中率只有 2%,每个请求的 system 开头都拼了当前时间,前缀永远不同。
原因不止一个,得分开看。system 里带时间戳,前缀每次都变。另一种情况是多轮历史从最新往前拼,前缀顺序不稳定。
另外,请求带随机 few-shot 采样,前缀被扰动。
少数情况下是缓存容量设得很小,命中后立即被淘汰。
第一件事是看缓存命中指标
curl -s localhost:30000/metrics | grep -i cache
随后把时间戳挪到 user 末尾
python -c "print('你是助手\n当前问题:')"
固定前缀顺序后重测
python bench.py --url http://localhost:30000/v1/chat/completions --concurrency 16 --num-prompts 200
再取一次命中率对比
curl -s localhost:30000/metrics | grep -i 'cache_hit'
手上没有现成的复现脚本,就照着线上请求手工拼了一个。
报错是间歇性的,我蹲守了半小时才抓到一次完整现场。
怎么算真的好了,看的是同一批现象。前缀命中率升到 60% 以上,首 token 延迟下降 35%,输出质量无变化。
前缀缓存只认完全相同的开头,任何动态字段都要放到后面,否则等于关闭缓存。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
