视频长序列推理别让单任务独占 GPU:API 中转站的五个工程手段

2 阅读4分钟

视频长序列推理(长视频问答、视频理解、AIGC 长片生成)动辄让一个任务独占一张卡几十分钟,在多租户共享的 API 中转站场景下极易 "一用户堵死整卡"。 API 中转站能落地的五件事:网关层租户配额与队列隔离、把长序列切成 GOP/chunk 调度单元、负载感知路由避开饱和实例、调度提示头驱动后端分块执行、P95/P99 监控闭环。划重点:别让长视频请求以 "整段推理" 的原子形态直接打到 GPU 上。


1. 网关层租户级配额 + 队列隔离

视频长任务独占 GPU,根源往往不是 GPU 调度器不够聪明,而是上游没限制单租户 / 单请求的并发权重。API 中转站在路由转发前做两道拦截:

  • 刚性并发配额:按租户(API Key / 企业 ID)限制同时 "运行中" 的长序列请求数。普通租户最多同时 1 个长视频任务,超出的进该租户专属队列,而不是直接怼到 GPU 后端。
  • 独立队列隔离:为核心租户、大客户分独立队列,避免一个用户的大视频任务堵死公共队列。调度器从多队列轮询取任务,单个队列积压不影响其他租户拿到 GPU 时间。

效果:长视频任务只能占用本租户配额内的通道,其他租户通过并行通道或轮转仍能进 GPU。

2. 把长序列切成 GOP /chunk 级调度单元

中转站不直接控制解码器,但能通过请求参数和路由层推动后端细粒度执行。

视频长序列有个天然特征:解码和推理可按 GOP(图像组)或固定帧块切分。以 GOP 为调度粒度,解码单元完成当前 GOP 后立即派发下一个,而不是等整段解码完再进推理,能显著减少解码器空闲等待。中转站的对应动作:请求里标记 long_video=true,路由到启用分块调度的后端池,而非默认池。

3. 多实例 / 多副本负载分散

中转站掌握所有后端实例的负载视图,路由时避开已被长任务饱和的 GPU:

  • 感知长任务的路由权重:不只看连接数,结合后端上报的 long_task_slots(如每卡最多同时接 2 个长序列任务),只在槽位未满的实例间轮转。
  • 会话亲和性有选择用:视频问答等多次提问场景,后端有缓存预处理结果的 worker,路由到同一 worker 可减少重复解码。但必须设亲和性 TTL(如 300 秒),过期重新参与轮转,避免 worker 被 "记住" 而持续承接同一来源长任务,最终被单用户独占。

4. 对后端施加调度约束信号

转发时携带调度提示头,让支持该语义的后端据此做准入:

  • X-Scheduling-Class: long-video + X-Max-Execution-Slice: gop:允许后端以 GOP / 帧块为单位在任务间切换,而非原子性跑完。
  • X-Tenant-Weight:按租户等级传权重,高权重租户的短请求可插队到低权重租户的长任务切片之间。

5. 监控与反馈闭环

关键指标:单个 GPU 被同一请求连续占用的时长分位数(P95/P99) 。P99 持续超阈值(如 10 分钟),说明配额或路由策略没生效,或后端缺分块能力。此时自动降级:把新到的长视频请求路由到备用池,同时告警,推动后端启用更细粒度调度。监控是校准前面所有策略的最后一环。

总结

别让长视频请求以 "整段推理" 的原子形态直接打到 GPU。网关层用租户配额切断单个用户的无限并发,用负载感知路由避开饱和实例,用调度提示头推动后端按 GOP 轮转执行 —— 三层叠加,单任务独占 GPU 的概率大幅下降,再用 P99 监控持续校准,整个系统就能 "能拆、能避、能控、能纠"。

以上思路来自工程实践,落地时需结合后端框架对分块调度、调度提示头的实际支持情况,避免把调度语义传给不认的后端反而引入额外开销。