为数据科学/机器学习任务设置多用户作业调度程序

Setting up a multi-user job scheduler for data science / ML tasks

背景

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

因为 ML 在这里成长。我正在寻找一种更好的方式来利用我们的基础设施。

要求

到目前为止我尝试了什么

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

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

SLURM 相当容易设置,但我无法设置远程提交或时间片调度等功能。

同时我也尝试使用 Kubernetes。对我来说,它提供了更多有趣的功能,最重要的是容器化。但是,所有这些功能都使设置和理解变得更加复杂。我又一次无法构建类似远程提交的东西。

我的问题

有没有人遇到同样的问题,可以报告his/her解决方案?我感觉 Kubernetes 为未来做好了更好的准备。

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

谢谢 蒂姆!

据我所知,Kubernetes不支持共享GPU,有人问here

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

我找到了一张 docker 图片,其中包含示例 "support share GPUs unofficially",可在此处 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 的文章,该文章仍处于实验阶段。