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

标签 kubernetes gpu cluster-computing slurm docker-datacenter

背景

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

由于机器学习在这里增长。我正在寻找一种更好的方式来利用我们的基础设施。

需求

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

  • 到目前为止我尝试了什么

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

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

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

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

    我的问题

    有没有人遇到过同样的问题,可以报告他/她的解决方案吗?我有一种感觉,Kubernetes 为 future 做好了更好的准备。

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

    谢谢
    蒂姆!

    最佳答案

    据我所知,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这仍然是实验性的。

    关于kubernetes - 为数据科学/机器学习任务设置多用户作业调度程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53445020/

    相关文章:

    没有 HDFS 存储的 Hadoop Namenode

    amazon-web-services - 多次 OOMKill 重启后的 AWS EKS + Fargate 错误

    kubernetes - 从在 Kubernetes 的同一命名空间中运行的进程中删除 ClusterRoleBinding 和命名空间

    cuda - Windows 8 应用程序中的 GPU 计算 - 适用于 x86 和 ARM

    queue - SGE : Jobs stuck in qw state

    classpath - Jar 适用于独立的 Hadoop,但不适用于实际的集群(java.lang.ClassNotFoundException : org. jfree.data.xy.XYDataset)

    kubernetes - 使用 kubeconfig 在 coreos 上安装 kubernetes(而不是弃用的 --api-server)

    docker - 是否可以从主机操作系统文件系统访问 Kubernetes 中已安装的卷

    java - Java 在一个 CPU 上可以并发运行的最大线程数

    cuda - 需要帮助诊断 cudaMemcpyToSymbol 错误