设置用于数据科学/ ML任务的多用户作业计划程序

时间:2018-11-23 10:33:59

标签: kubernetes gpu cluster-computing slurm docker-datacenter

背景

最近,我的实验室投资了GPU计算基础架构。更具体地说:在标准服务器计算机上安装了两个TitanV。当前,该机器运行的不是完全配置的Windows Server。我实验室中的每个人都可以登录并执行他们想要的任何操作。有时,由于某人不小心占用了所有可用内存,因此该机器对其他人完全无用。

由于ML在这里不断发展。我正在寻找一种更好的方式来利用我们的基础设施。

要求

  • 多用户。博士和学生应该能够执行任务。
  • 工作队列或调度(最好是时间分段调度)
  • 动态分配资源。如果单个任务正在运行,则可以利用整个内存,但是一旦启动一个任务,它们应该共享资源。
  • 轻松/远程提交作业:也许是网页?

到目前为止我尝试过的事情

我有一个小的测试设置(带有GTX 1070的家用PC)用于实验。我的互联网研究将我指向SLURM和Kubernetes。

首先,我喜欢集群管理系统的想法,因为它提供了将来扩展基础架构的选项。

SLURM的设置非常容易,但是我无法设置远程提交或时间片计划之类的东西。

与此同时,我也尝试与Kubernetes合作。对我来说,它提供了更有趣的功能,首先是容器化。但是,所有这些功能使设置和理解变得更加复杂。同样,我无法构建类似远程提交的内容。

我的问题

有人遇到过同样的问题并且可以报告他/她的解决方案吗?我觉得Kubernetes为未来做好了更好的准备。

如果您需要更多信息,请告诉我。

谢谢 蒂姆!

1 个答案:

答案 0 :(得分:1)

据我所知,Kubernetes不支持共享GPU,这是here的要求。

正在进行讨论Is sharing GPU to multiple containers feasible? #52757

我能够找到示例为“支持非官方共享GPU” 的docker映像,可在cvaldit/nvidia-k8s-device-plugin处找到。

这可以通过以下方式使用:

apiVersion: v1 kind: Pod metadata: name: gpu-pod spec: containers: - name: cuda-container image: nvidia/cuda:9.0-devel resources: limits: nvidia.com/gpu: 2 # requesting 2 GPUs - name: digits-container image: nvidia/digits:6.0 resources: limits: nvidia.com/gpu: 2 # requesting 2 GPUs

这将使容器内的2个GPU暴露出来以运行您的作业,并且将这2个GPU锁定为无法继续使用,直到作业结束。

我不确定您将如何为多个用户扩展它们,以其他方式限制他们每个作业使用的最大GPU数量。

您还可以阅读仍在实验中的Schedule GPUs