Cuda计算模式和“CUBLAS\u状态\u分配\u失败”

Cuda计算模式和“CUBLAS\u状态\u分配\u失败”,cuda,Cuda,我有一个主机在我们的集群与8 Nvidia K80,我想设置它,使每个设备可以运行最多一个进程。以前,如果我在主机上运行多个作业,并且每个作业都使用大量内存,那么它们都会尝试命中同一个设备并失败 我通过NVIDIASMI-C3将所有设备设置为计算模式3e.Process,我相信这使每个设备只能接受来自一个CPU进程的作业。然后,我运行两个作业,每个作业只占用设备上12 GB内存中约150 MB的空间,而不指定cudaSetDevice,但第二个作业失败并出现错误:CUBLAS_STATUS_AL

我有一个主机在我们的集群与8 Nvidia K80,我想设置它,使每个设备可以运行最多一个进程。以前,如果我在主机上运行多个作业,并且每个作业都使用大量内存,那么它们都会尝试命中同一个设备并失败

我通过NVIDIASMI-C3将所有设备设置为计算模式3e.Process,我相信这使每个设备只能接受来自一个CPU进程的作业。然后,我运行两个作业,每个作业只占用设备上12 GB内存中约150 MB的空间,而不指定cudaSetDevice,但第二个作业失败并出现错误:CUBLAS_STATUS_ALLOC_FAILED,而不是转到第二个可用设备

我根据网站的解释对我的假设进行建模,并期望每个作业都能级联到下一个设备上,但它不起作用。我有什么遗漏吗


更新:我在多个不同的实例中使用gpuArray运行Matlab,它正确地将Matlab作业级联到不同的设备上。因此,我相信我在操作系统级别正确设置了计算模式。除了cudaSetDevice,还有什么可能迫使我的CUDA代码锁定到设备0中?

这依赖于官方未记录的行为,或者证明我错了,请指出CUDA运行时的官方文档,当设备设置为独占计算模式时,会自动选择另一个可用设备,使用时

CUDA运行时显然强制执行了此行为,但在CUDA 7.0中被破坏

它应该在CUDA 7.5中再次修复

我猜您正在这些节点上运行CUDA 7.0。如果是这样的话,我会尝试更新到CUDA 7.5,或者如果您真的需要这种行为,就恢复到CUDA 6.5


建议您不要依赖于此,而是使用外部手段,例如作业调度器,例如Torque,在这种情况下管理资源。

实际上,我使用的是作业调度器,但是我很难让它与这些设备配合得很好,因此我决定只将每个设备锁定在一个进程中。而且我们正在使用7.0-time将映像重新映射到7.5,看看它是否修复了问题!