Keras + tensorflow + P100:cudaErrorNotSupported = 71错误

时间:2017-04-18 11:59:30

标签: tensorflow cuda deep-learning keras

道歉,如果已经在其他地方报道了这一点,我一直在寻找它,但没有成功。

在使用P100 GPGPU运行keras + tensorflow的简单mnist示例(在github /fchollet/keras/blob/master/examples/mnist_cnn.py上可用)时,我们在keras / tensorflow / cuda的交叉点遇到问题:

Using TensorFlow backend.
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcurand.so.8.0 locally
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties:
name: Tesla P100-PCIE-16GB
major: 6 minor: 0 memoryClockRate (GHz) 1.3285
pciBusID 0000:02:00.0
Total memory: 15.89GiB
Free memory: 15.51GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0: Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Tesla P100-PCIE-16GB, pci bus id: 0000:02:00.0)
F tensorflow/core/common_runtime/gpu/gpu_device.cc:121] Check failed: err == cudaSuccess (71 vs. 0)
srun: error: nid02011: task 0: Aborted
srun: Terminating job step 1262138.0

我们正在使用keras 2.0.2,tensorflow 1.0.0。 cuda 8.0.53。 我们似乎在python2.7.12和python3.5.2(keras 1.2和2.0 ......)中都有这个问题。

裸露张量流测试正常,这让我们认为这确实是在keras / tensorflow / cuda的交叉点。

同样的测试在各种机器上使用相同版本的软件但使用TitanX GPGPU运行良好。

似乎正在追溯到tensorflow line 121

CUDA error types

cudaErrorNotSupported = 71
This error indicates the attempted operation is not supported on the current system or device.

我对下一步要解决此问题的方法毫无头绪。我非常感谢有关此事的任何反馈和指导。

1 个答案:

答案 0 :(得分:0)

此处问题的根本原因似乎是Tensorflow与CUDA MPS服务之间不兼容(请参阅相关的Tensorflow跟踪器问题here)。它应该只影响使用MPS服务的集群和大型系统,以提高对GPU设备的访问粒度。

这应该可以作为一个错误来提出,与同时是NVIDIA和 Tensorflow开发团队。

已编辑以添加Tensorflow跟踪器问题中的诊断:

似乎潜在的原因是在Tensorflow中广泛使用流回调,MPS在最近从NVIDIA发布的Volta硬件之前没有支持。显然,也可以从源代码构建Tensorflow,这些选项可以使它在早期硬件上与MPS一起正常工作。有关详细信息,请参阅链接的跟踪器讨论。

[这个答案是从评论中汇总而来,并作为社区维基条目添加,以便将其从CUDA标签的未答复列表中删除]