自建网关按 RPM 限到 500,客户端单请求平均 6k token,凌晨批量任务把 TPM 打满,接口开始返 429,监控里请求数还没到阈值。
这类报错背后常见的原因有几处,逐个排除就行。只统计请求条数,没有累计 token;预估值按字符数除以 2,低估三成;批量任务与在线流量共用同一个配额池;429 后立刻重试,把消耗又放大一轮。
上来先统计每分钟的真实 token
python -c "import json;print(sum(json.loads(l)['usage']['total_tokens'] for l in open('req.jsonl')))"
给网关加 token 维度配额
python -c "print({'rpm':500,'tpm':200000})"
接着把批量任务拆到独立配额池
python -c "print('batch pool: tpm=120000')"
压一轮看 429 是否消失
python bench.py --concurrency 32 --num-prompts 500
同样的操作我在测试机上先走了一遍,线上只做验证过的部分。
这台环境是别人交接的,不少默认值被动过,只能一项项核。
同事提醒我看一下最近一次发布,时间点确实对得上。
别只看报错消失,验证要多做一步。高峰期不再出现 429,TPM 曲线贴着上限但不越界,在线请求 P95 延迟不变。
提醒一点。供应商的限流基本都按 token 算,只盯 QPS 会在长请求上翻车。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
