论文部分内容阅读
随着云计算中以Docker和Kubernetes为代表的容器云技术逐渐成熟,许多企业开始将应用容器化,并利用Kubernetes对容器化应用进行管理,其中也包括人工智能应用。然而在当前的容器云技术中,GPU资源的虚拟化与管理技术尚未成熟,而对于人工智能应用,特别是深度学习这类应用又非常需要利用GPU来加速计算,这给人工智能应用迁移到Kubernetes的过程带来了挑战。目前Kubernetes系统通过NVIDIA提供的一种设备插件来对GPU资源进行管理,使得部署在Kubernetes中的工作负载也可以使用GPU资源。然而这种方式只支持容器独占使用物理GPU设备,这会带来两个问题:(1)对于占用GPU资源较少的任务,如模型推理,独占使用会使得GPU利用率较低;(2)物理GPU设备有限,在任务并发较高的情况下,独占使用会使得部分任务长时间不能分配到GPU设备,导致任务平均时延增加。针对上述问题,本工作提出在Kubernetes中集成GPU共享的功能,让多个工作负载可以共享物理GPU,从而提高GPU利用率并降低任务平均时延。本文提出了一项名为Krux的方案,该方案基于Kubernetes的扩展机制,对如何在Kubernetes平台中使用GPU以及共享GPU进行了设计,基于该方案本工作实现了一个GPU资源管理组件。该组件从功能上划分为四个模块,分别是资源发现模块、调度插件模块、资源限制模块以及容器运行时模块。资源发现模块基于Kubernetes的设备插件机制开发,用于监测工作节点上的GPU设备,并将虚拟化后的GPU资源上报到Kubernetes集群;调度插件模块基于Kubernetes的调度框架开发,配合默认调度器对GPU工作负载进行调度决策;资源限制模块负责对CUDA驱动API进行拦截,添加额外的控制逻辑,从而对CUDA应用使用的GPU资源进行限制;容器运行时模块在NVIDIA官方提供的容器运行时的基础上进行了定制化修改,作为一个辅助功能模块将容器创建上游的两个模块与资源限制模块串联起来。目前该GPU资源管理组件已经被集成到星环公司的容器平台3.0版本中。该平台支持的大数据与人工智能平台在最新的开发版本中已开始广泛使用GPU共享的功能,有效地提高了GPU利用率,降低了任务平均时延,帮助企业降低了硬件资源的成本。