助力深度学习!阿里开源可插拔 GPU 共享调度工具( 三 )

Kubernetes 共享 GPU 集群调度

共享 GPU 的集群调度就是能够让更多的模型开发和预测服务共享同一个 GPU 卡 , 进而提高集群中 Nvidia GPU 的利用率 。 而这就需要提供 GPU 资源的划分 , 而这里 GPU 资源划分的维度指的就是 GPU 显存和 Cuda Kernel 线程的划分 。 通常在集群级别谈支持共享 GPU 是以下两件事情:
1.调度
2.隔离 , 我们这里主要讨论的是调度 , 隔离的方案目前需要用户通过应用限制(比如使用 Tensorflow 的per_process_gpu_memory_fraction 来控制) , 未来会提供基于 Nvidia 的 MPS 的可选项 也会考虑 GPU 的方案 。

而对于细粒度的 GPU 卡调度 , 目前 Kubernetes 社区并没有很好的方案 , 这是由于 Kubernetes 对于 GPU 这类扩展资源的定义仅仅支持整数粒度的加加减减 , 无法支持复杂资源的分配 。 比如用户希望使用 Pod A 占用半张 GPU卡 , 这在目前 Kubernetes 的架构设计中无法实现资源分配的记录和调用 。 这里挑战是多卡 GPU 共享是实际矢量资源问题 , 而 Extened Resource 是标量资源的描述 。

针对此问题 , 我们设计了一个 Out Of Tree 的共享 GPU 调度方案 , 该方案依赖于 Kubernetes 的现有的工作机制:

推荐阅读