问题出现得很突然,日志倒是留得挺全。TGI 2.4 部署 7B 模型,高峰时部分请求等 60 秒后返回 504,日志里有 Queue full 和 request timeout,GPU 利用率只有 70%。
刚开始盯着「单请求生成长度不受限,长请求占住槽位」,折腾了半个多小时,排掉了。
把日志和配置对完,能解释这个现象的基本就这几处。max_concurrent_requests 大于显存能支撑的并发。另一种情况是等待队列没有上限,请求全堆在里面。
另外,网关读超时比 TGI 的处理时间短。
动手时先看当前的并发配置
curl -s localhost:8080/info | jq '.max_concurrent_requests, .max_waiting_requests'
限制生成长度并降并发
text-generation-launcher --model-id Qwen/Qwen2.5-7B-Instruct --max-concurrent-requests 32 --max-total-tokens 4096
压测确认排队时间
python bench.py --url http://localhost:8080/generate --concurrency 48 --num-prompts 300
剩下的就是核对网关读超时
grep -r proxy_read_timeout /etc/nginx/conf.d/
报错是间歇性的,我蹲守了半小时才抓到一次完整现场。
白天有业务在跑,能验证的部分都压到了晚上做。
改完先别撤,确认这几项。504 消失,P95 排队时间低于 3 秒,GPU 利用率升到 85% 以上。
容易忽略的是,排队不是并发不够,往往是单个请求占得太久,先限长再谈扩容。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
