Cuda计算模式和';CUBLAS_STATUS_ALLOC_失败';

Cuda计算模式和';CUBLAS_STATUS_ALLOC_失败';,cuda,Cuda,我的集群中有一台主机,有8个Nvidia K80,我想对它进行设置,使每个设备最多可以运行一个进程。以前,如果我在主机上运行多个作业,并且每个作业都使用大量内存,那么它们都会尝试命中同一个设备并失败 我通过nvidiasmi-c3将所有设备设置为计算模式3(E.Process)。然后,我运行2个作业(每个作业仅占用设备上12GB的内存约~150MB),而不指定cudaSetDevice,但第二个作业失败,出现错误:CUBLAS\u STATUS\u ALLOC\u FAILED,而不是转到第二个

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

我通过
nvidiasmi-c3
将所有设备设置为计算模式3(
E.Process
)。然后,我运行2个作业(每个作业仅占用设备上
12GB
的内存约~
150MB
),而不指定
cudaSetDevice
,但第二个作业失败,出现
错误:CUBLAS\u STATUS\u ALLOC\u 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)在这种情况下管理资源。

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

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

它应该在CUDA 7.5中再次“修复”

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


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

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

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

它应该在CUDA 7.5中再次“修复”

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


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

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

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

它应该在CUDA 7.5中再次“修复”

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


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

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