如何选择非繁忙的CUDA设备?

如何选择非繁忙的CUDA设备?,cuda,cluster-computing,gpgpu,gpu,hpc,Cuda,Cluster Computing,Gpgpu,Gpu,Hpc,我在一个有很多节点的集群上工作,每个节点有两个GPU。在集群中,我无法启动“nvidia smi”来检查哪个设备正忙。我的代码选择了性能最好的设备(使用cudaChooseDevice),但是当集群为我分配两个不同作业的相同节点时,我就有两个任务在同一个gpu上运行 我的问题是:有一种方法可以在运行时检查设备是否忙 谢谢您的群集管理器应该安装并使用群集管理(作业调度)软件,该软件允许他们像分配CPU和内存一样分配和跟踪GPU。有许多作业调度器可以执行此操作。即使作业调度器中没有明确的GPU支持,

我在一个有很多节点的集群上工作,每个节点有两个GPU。在集群中,我无法启动“nvidia smi”来检查哪个设备正忙。我的代码选择了性能最好的设备(使用cudaChooseDevice),但是当集群为我分配两个不同作业的相同节点时,我就有两个任务在同一个gpu上运行

我的问题是:有一种方法可以在运行时检查设备是否忙


谢谢您的群集管理器应该安装并使用群集管理(作业调度)软件,该软件允许他们像分配CPU和内存一样分配和跟踪GPU。有许多作业调度器可以执行此操作。即使作业调度器中没有明确的GPU支持,也可以构建正确分配GPU的作业进入/退出脚本

通过在应用程序中嵌入
nvidia smi
,您可以有效地包含与之相同的功能。nvidia smi报告的任何查询或数据项都可以通过NVML编程访问

我也不清楚为什么你不能为你的工作启动一个脚本来检查哪些设备正在使用nvidia smi,然后选择一个不忙的设备


但是请记住,您可能执行的任何运行时检查都会受到其他应用程序行为的影响。如果这些应用程序(无论是由您还是其他用户启动)有异常行为,您的运行时检查很容易失败。

非常感谢,我将看到NVML。集群使用Slurm,只检查是否有可用资源,但在启动任务之前,我没有Slurm提供的GPU ID信息……Slurm可以通过该机制管理GPU。下面是一些用于集群管理器的示例。如果设置正确,则无需从作业中检查GPU情况,因为只有您请求的GPU将被分配,您甚至无法访问节点上的其他GPU。