一句话定义: GPU 时分复用(Time-Slicing)是把同一块 GPU 的计算时间切成一个个很短的时间片,轮流交给不同的进程或租户使用,让它们在同一段时间里"看起来"是同时在跑的。
它到底在切什么
想象公司只有一间会议室,但有三个人要开会。没有第二间房,前台只好让每人进去讲 20 秒,然后换下一个。三个会都在推进,但谁也没法一口气讲完。GPU 时分复用就是这个逻辑:调度器在毫秒级不停地切换,进程 A 跑一会儿、进程 B 跑一会儿。
要特别注意:被切的是"时间",不是"显存"。每个进程依然按自己的需要把模型权重、AI 词典:KV Cache">KV Cache 等数据搬进显存并一直占着。所以一张显存有限的卡上,几个模型各自的显存加起来超了,照样会 OOM——时分复用救不了显存不够。
和相邻概念的区别
| 方案 | 切的是什么 | 隔离性 | 典型感受 |
|---|---|---|---|
| 时分复用 Time-Slicing | 时间片 | 弱,互相干扰 | 能用,但延迟忽高忽低 |
| MPS(Multi-Process Service) | 同一个上下文里并发跑 kernel | 中 | 吞吐好些,仍无硬隔离 |
| MIG(Multi-Instance GPU) | 硬件上切成独立实例,含显存与计算单元 | 强 | 像几张小卡,贵且切法固定 |
| 批处理(Batching) | 把请求合成一批喂给同一个模型 | — | 真正提升吞吐、还能降平均延迟 |
一张表看下来就清楚了:时分复用解决的是"卡不够分"的问题,不是"性能不够"的问题。
代价是什么
- 延迟抖动。 你的请求排在别人后面等时间片,P99 延迟(尾部延迟)会明显变差。离线批处理无所谓,在线对话就很难受。
- 切换开销。 上下文切换要把状态换进换出,GPU 上尤其贵,因为显存带宽本来就是稀缺资源。切得太碎,光切换就吃掉一部分算力。
- 互相拖累。 一个租户跑了个特别大的 kernel,占满时间片,其他租户就卡住。没有服务质量(QoS)保障时,这叫"吵闹的邻居"问题。
- 计费与配额难做。 按时间片分出去的算力,很难精确折算成"谁用了多少"。
对从业者的实际意义
对小团队和个人,时分复用是省钱的正解:一张卡上同时挂两三个量化小模型加一个 embedding 服务,利用率上去了,成本摊薄了。对线上推理服务,要谨慎——对延迟敏感的接口,宁可独占或上 MIG,也别指望时分复用兜底。对做多租户平台的人,关键问题是"有没有硬隔离",没有的话就要在调度层做优先级和限流。
另外,各个平台开不开时分复用、时间片设多长、默认策略是什么,差异很大,实际以官方文档和你的压测结果为准。
