Cuda计算模式和' CUBLAS_STATUS_ALLOC_FAILED'

时间:2015-09-17 13:47:39

标签: cuda

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

我通过E. Process将所有设备设置为计算模式3(nvidia-smi -c 3),我认为这样可以使每个设备只接受来自一个CPU进程的作业。然后我运行2个作业(每个作业只占设备内存{1}}的约150 MB,不用指定12 GB,但是第二个作业与cudaSetDevice失败,而不是转到第二个可用的设备。

我正在根据this网站的解释对我的假设进行建模,并希望每个作业能够级联到下一个设备上,但它无效。有什么我想念的吗?

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

1 个答案:

答案 0 :(得分:3)

这是依赖于CUDA运行时的正式无证行为(或者证明我错了并指出正式文档),当设备设置为独占计算模式时,会自动选择另一个可用设备,当一个人在使用时。

CUDA运行时显然强制执行了这种行为,但它被打破了#34;在CUDA 7.0中。

My understanding应该是"固定"再次在CUDA 7.5中。

我的猜测是你在那些节点上运行CUDA 7.0。如果是这样,我会尝试更新到CUDA 7.5,否则如果你真的需要这种行为,则还原为CUDA 6.5。

建议您使用外部方法,例如作业调度程序(例如Torque)来管理这种情况下的资源,而不是依赖于此。

相关问题