6

背景

最近我的实验室投资了 GPU 计算基础设施。更具体的说:两个 TitanV 安装在标准服务器机器上。目前,该机器正在运行一个根本没有配置的 Windows Server。我实验室的每个人都可以登录并做他们想做的任何事情。有时会发生机器对其他人完全无用的情况,因为有人不小心占用了所有可用内存。

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

要求

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

到目前为止我尝试了什么

我有一个小型测试设置(带有 GTX 1070 的消费类 PC)用于实验。我的互联网研究让我想到了 SLURM 和 Kubernetes。

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

SLURM 相当容易设置,但我无法设置远程提交或时间片调度之类的东西。

与此同时,我也尝试使用 Kubernetes。对我来说,它提供了更多有趣的功能,尤其是容器化。然而,所有这些特性使得设置和理解变得更加复杂。再一次,我无法构建类似远程提交的东西。

我的问题

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

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

谢谢蒂姆!

4

1 回答 1

2

据我所知,Kubernetes 不支持 GPU 的共享,这是在这里提出的。

正在进行讨论将 GPU 共享到多个容器是否可行?#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 。

于 2018-11-23T16:09:00.283 回答