这是到目前为止(2023/10)应该是唯一一篇在认真思考并且实现 GPU 抢占的论文了。
之前很多论文都研究过 GPU 怎么混部,怎么做算力和显存的隔离,但是目标都是提升利用率,但是很难保证长尾延迟。比较适合训练,但不适合推理。
但是这篇论文其实也是有很多限制的:
- 不支持 nvidia GPU,只支持 amd
- 模型需要经过 tvm 的编译,因为抢占的实现依赖了编译技术
这篇论文主要的工作就2个事情:
- GPU 抢占:real-time任务启动的时候,best-effort 任务怎么做到快速的退出。
- dynamic kernel padding:怎么在尽可能保证 rt 任务 latency 的情况下,混部 be 的任务
最终效果:
- 2% 的延迟损失,换取 7.7x 倍的性能提升
1. 系统架构
reef 在 GPU runtime 的基础上扩展了4个核心组件:
- Task Queues:一个rt队列和多个be队列,每个队列绑定一个 GPU Stream
- Scheduler:一个调度器,2种模式,rt模式,normal模式,如果当前没有rt任务,调度器会切换到normal模式,如果有rt任务,会切换到rt模式。这个地方应该是为了和下面的抢占进行协同
- Preemption:抢占模块,实现rt抢占be
- DKP:dynamic kernel padding
前面2个没啥东西,重点讲一下抢占是怎么实现的吧,这个比较有意思