【问题标题】:Limiting access to resources for Cuda and OpenCL限制对 Cuda 和 OpenCL 资源的访问
【发布时间】:2011-05-03 22:18:57
【问题描述】:

我们希望扩展批处理系统以支持 GPU 计算。

问题在于,从批处理系统的角度来看,GPU 是一种资源。我们可以很容易地统计使用的资源,但我们也需要限制对它们的访问。

对于 GPU,这意味着每个作业都只要求一个 GPU(当请求 GPU 时)。

据我所知,在作业之间共享 GPU 是一个非常糟糕的主意(因为作业的 GPU 部分可能会被随机终止)。

所以,我需要一些方法来限制对 CUDA 和 OpenCL 的 GPU 的访问。批处理系统具有 root 权限。我可以使用cgroups 限制对/dev/ 中设备的访问,但我认为在这种情况下这还不够。

理想状态是,作业只能看到它请求的 GPU 数量,并且任何其他作业都无法访问这些 GPU。

【问题讨论】:

  • 为什么不能在 /dev/nvidiax 设备上运行作业时更改其所有权,并在尝试在那里运行之前检查谁拥有它?跨度>
  • @Marm 我可以很容易地禁止该工作访问/dev/something。够了吗?
  • 将所有权更改为 /dev/nvidia 的其他用户,然后在运行作业之前对所有权进行检查就足够了 - 我通过网络使用 nvidia GPU,有时人们在本地登录这些机器- 当他们更改所有权并且我无法访问 nvidia 设备时。您可能希望以 sudo 访问 chown /dev/nvidia 的非特权用户身份运行作业 - 这可以工作。

标签: linux cuda opencl ulimit


【解决方案1】:

我开发了一个库,可以对可用的 OpenCL 平台和设备进行排序。它将选择平台上最好的设备。然后它会尝试在其上创建上下文。如果失败,它将转到列表中的下一个。该列表按计算单元数排序。

它支持nvidia (gpu)、amd (gpu & cpu)、intel (cpu) 和apple (gpu & cpu)。

有独占访问的锁定机制。虽然它不是最好的。我仍在寻找更好的解决方案。基本上,它使用 /tmp 中使用的平台+设备保存文件。

这是我们在实验室中使用的。它在 GPLv3 下可用,可以在 github 上找到:https://github.com/nbigaouette/oclutils/

【讨论】:

    【解决方案2】:

    我相信有两件事可以帮助 NVIDIA CUDA GPU:

    1. 通过 nvidia-smi 工具将 GPU 置于“计算独占”模式
    2. 指示用户使用无参数“cudaSetDevice()”调用,该调用将自动选择未使用的 GPU
    3. 指示用户使用cudaSetDevice 以外的其他方式初始化设备,如"Best Practices Guide" 的第 8.3 节所述

    我不确定如何为 OpenCL 实现这一目标。

    【讨论】:

    • 好的,这有点帮助。如果请求已使用的卡,cudaSetDevice 是否会在独占模式下失败?不幸的是,它并没有解决在一台机器上使用不同卡的问题,也没有禁止用户使用比他请求的更多的卡。
    • 是的,如果 cudaSetDevice() 已经在使用中,它在独占模式 GPU 上确实会失败。
    • 啊,重新阅读最佳实践指南部分 - 没有“no-args cudaSetDevice”
    【解决方案3】:

    目前有两种相关机制:

    • 使用 nvidia-smi 将设备设置为独占模式,这样一旦进程拥有 GPU,其他进程就无法连接到同一个 GPU。
    • 使用 CUDA_VISIBLE_DEVICES 变量来限制进程在查找 GPU 时看到的 GPU。

    后者当然会受到滥用,但现在只是一个开始。

    据我所知,在作业之间共享 GPU 是一个非常糟糕的主意(因为作业的 GPU 部分可能会被随机终止)。

    并非如此,共享 GPU 是一个坏主意的主要原因是它们将不得不竞争可用内存,并且进程可能全部失败,即使实际上其中一个进程可能已经继续。此外,它们还会争夺对 DMA 和计算引擎的访问权限,这可能会导致整体性能不佳。

    【讨论】:

    • 啊,CUDA_VISIBLE_DEVICES 是我忘记的一件事,非常有用。
    猜你喜欢
    • 2013-08-28
    • 2011-10-14
    • 2021-09-21
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    相关资源
    最近更新 更多