问题出现得很突然,日志倒是留得挺全。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% 以上。

容易忽略的是,排队不是并发不够,往往是单个请求占得太久,先限长再谈扩容。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189