两个同事同时提交任务,第二个一直在排队,第一个人不结束第二个就不动。

原因不止一个,得分开看。默认并发限制是一,请求被串行处理;模型是全局单例,无法同时推理;队列长度设得太小,超出直接拒绝;长任务占住唯一的执行槽。

提高默认并发限制

demo.queue(default_concurrency_limit=4).launch()

然后把推理改成批处理合并请求

python -c "print('dynamic batching')"

适当增大队列长度

demo.queue(max_size=64)

监控单次请求耗时定位瓶颈

python -c "print('log latency per request')")

隔了一天再看,现象没变,说明不是偶发。

那几天正好在做别的变更,先把时间线对齐才敢动手。

排查用的命令都是临时敲的,没有写成脚本,事后才整理。

手上没有现成的复现脚本,就照着线上请求手工拼了一个。

恢复的判定其实很直接。多人同时提交时能并行处理或快速轮流完成,排队时间明显缩短。

并发调高会让显存压力成倍上升,先用单个请求测出显存余量,再决定能开几路。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189