为数据科学/机器学习任务设置多用户作业调度程序
Setting up a multi-user job scheduler for data science / ML tasks
背景
最近我的实验室投资了 GPU 计算基础设施。更具体地说:两个 TitanV 安装在一台标准服务器机器上。当前机器是 运行ning 一个根本没有配置的 Windows 服务器。我实验室的每个人都可以登录并做任何他们想做的事情。时不时会发生机器对别人完全没用的情况,因为有人不小心占用了所有可用内存。
因为 ML 在这里成长。我正在寻找一种更好的方式来利用我们的基础设施。
要求
- 多用户。博士和学生应该能够 运行 他们的任务。
- 作业队列或调度(最好是时间片调度)
- 资源的动态分配。如果单个任务 运行ning 可以利用整个内存,但是一旦启动第二个任务,它们就应该共享资源。
- 轻松/远程作业提交:也许是网页?
到目前为止我尝试了什么
我有一个小型测试装置(配备 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 的文章,该文章仍处于实验阶段。
背景
最近我的实验室投资了 GPU 计算基础设施。更具体地说:两个 TitanV 安装在一台标准服务器机器上。当前机器是 运行ning 一个根本没有配置的 Windows 服务器。我实验室的每个人都可以登录并做任何他们想做的事情。时不时会发生机器对别人完全没用的情况,因为有人不小心占用了所有可用内存。
因为 ML 在这里成长。我正在寻找一种更好的方式来利用我们的基础设施。
要求
- 多用户。博士和学生应该能够 运行 他们的任务。
- 作业队列或调度(最好是时间片调度)
- 资源的动态分配。如果单个任务 运行ning 可以利用整个内存,但是一旦启动第二个任务,它们就应该共享资源。
- 轻松/远程作业提交:也许是网页?
到目前为止我尝试了什么
我有一个小型测试装置(配备 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 的文章,该文章仍处于实验阶段。