Cerebras 接口压测 llama3.1-8b,二十并发下大量 429,响应体写 queue_exceeded,响应头没有 Retry-After,单并发时一切正常。
一开始怀疑是「客户端没有令牌桶,突发全部同时发出」,查了一圈,方向不对。
排查方向其实有限,先把可能性排一排。队列按 token 排队,长 prompt 一次占满额度。还有一种是并发请求数超过账号的并行上限。
不容易想到的是,重试没有抖动,失败请求在同一秒再次涌入。
上来先用单并发跑十条测基线延迟
python -c "print({'concurrency':1,'p95_ms':420})"
然后读一遍 429 响应头里的限流字段
curl -i https://api.cerebras.ai/v1/chat/completions -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" -d '{"model":"llama3.1-8b","messages":[{"role":"user","content":"hi"}]}'
再往下把并发压到信号量控制的四路
python -c "import asyncio;print(asyncio.Semaphore(4))"
剩下的就是重试加指数退避与随机抖动
python -c "import random;print(round(min(30, 2**3) * (0.5 + random.random()), 2))"
别只看报错消失,验证要多做一步。四路并发下 429 比例从三成降到 1% 以下,队列不再堆积,P95 延迟稳定在 600 毫秒左右。
补一句。队列型限流和请求数限流是两回事,压并发只是第一步,还得把单请求的 token 体量降下来,否则四路照样能把队列灌满。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
