tensorflow使用时GPU同步失败

5

我正在尝试运行这段简单的代码来测试tensorflow

  from __future__ import print_function

    import tensorflow as tf

    a = tf.constant(2)
    b = tf.constant(3)


    with tf.Session() as sess:
        print("a=2, b=3")
        print("Addition with constants: %i" % sess.run(a+b))

但是奇怪的是出现了GPU同步失败的错误。

跟踪信息:

runfile('D:/tf_examples-master/untitled3.py', wdir='D:/tf_examples-master')
a=2, b=3
Traceback (most recent call last):

  File "<ipython-input-5-d4753a508b93>", line 1, in <module>
    runfile('D:/tf_examples-master/untitled3.py', wdir='D:/tf_examples-master')

  File "C:\ProgramData\Anaconda3\envs\env3-gpu\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
    execfile(filename, namespace)

  File "C:\ProgramData\Anaconda3\envs\env3-gpu\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "D:/tf_examples-master/untitled3.py", line 15, in <module>
    print("Multiplication with constants: %i" % sess.run(a*b))

  File "C:\ProgramData\Anaconda3\envs\env3-gpu\lib\site-packages\tensorflow\python\client\session.py", line 900, in run
    run_metadata_ptr)

  File "C:\ProgramData\Anaconda3\envs\env3-gpu\lib\site-packages\tensorflow\python\client\session.py", line 1135, in _run
    feed_dict_tensor, options, run_metadata)

  File "C:\ProgramData\Anaconda3\envs\env3-gpu\lib\site-packages\tensorflow\python\client\session.py", line 1316, in _do_run
    run_metadata)

  File "C:\ProgramData\Anaconda3\envs\env3-gpu\lib\site-packages\tensorflow\python\client\session.py", line 1335, in _do_call
    raise type(e)(node_def, op, message)

InternalError: GPU sync failed

非常感谢您的帮助。

4个回答

10

当我遇到这个错误 GPU 同步失败 时,重启笔记本或内核并没有帮助。

我有另一个未关闭且正在使用GPU的笔记本/内核,所以为了解决这个问题,我只需要关闭另一个笔记本,重新启动当前笔记本,一切就正常了!


除了重新启动之外,还有其他方法吗? - Hong Cheng

6
如果你发现tensorflow报出“GPU同步失败错误”,可能是因为模型的输入太大(就像我第一次遇到这个问题时一样),或者你没有正确安装cuDNN。请验证cuDNN是否正确安装,并重置你的nvidia缓存(例如,如果你在最初安装CUDA和cuDNN后还没有这样做,请使用“sudo -rf $HOME/.nv/”命令),然后重新启动你的机器。
在运行tensorflow(TF)文档中找到的示例(https://www.tensorflow.org/tutorials/keras/save_and_restore_models#checkpoint_callback_usage)时,运行tf.keras模型(具有大输入(向量化MNIST特征数据(长度=28^2)))时出现“GPU同步失败错误”。查看此问题,发现了这篇文章(https://github.com/tensorflow/tensorflow/issues/5688),其中讨论了该问题是由于对模型的大输入引起的,并且(按照所假定的效果链)在这里(https://github.com/tensorflow/tensorflow/issues/5688)找到。第二个帖子问题显示错误消息片段的最后一行为:F tensorflow/stream_executor/cuda/cuda_dnn.cc:2440] failed to enqueue convolution on stream: CUDNN_STATUS_NOT_SUPPORTED

基于此,我决定尝试并测试是否已正确安装cuDNN(https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#installlinux-deb),按照文档尝试验证cuDNN的安装情况(https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#verify)。

#Copy the cuDNN sample to a writable path.
$cp -r /usr/src/cudnn_samples_v7/ $HOME
#Go to the writable path.
$ cd  $HOME/cudnn_samples_v7/mnistCUDNN
#Compile the mnistCUDNN sample.
$make clean && make
#Run the mnistCUDNN sample.
$ ./mnistCUDNN
#If cuDNN is properly installed and running on your Linux system, you will see a message similar to the following:
Test passed!

发现出现了错误。
cudnnGetVersion() : 6021 , CUDNN_VERSION from cudnn.h : 6021 (6.0.21)
Host compiler version : GCC 5.4.0
There are 1 CUDA capable devices on your machine :
device 0 : sms 20  Capabilities 6.1, SmClock 1797.0 Mhz, MemSize (Mb) 8107, MemClock 5005.0 Mhz, Ecc=0, boardGroupID=0
Using device 0

Testing single precision
CUDNN failure
Error: CUDNN_STATUS_INTERNAL_ERROR
mnistCUDNN.cpp:394
Aborting...

我进一步调查后,在这里找到了nvidiadev的帖子(https://devtalk.nvidia.com/default/topic/1025900/cudnn/cudnn-fails-with-cudnn_status_internal_error-on-mnist-sample-execution/post/5259556/#5259556)和这里(https://devtalk.nvidia.com/default/topic/1024761/cuda-setup-and-installation/cudnn_status_internal_error-when-using-cudnn7-0-with-cuda-8-0/post/5217666/#5217666),建议通过清除nvidia缓存来解决问题。

sudo rm -rf ~/.nv/
重新启动(否则CUDA和cuDNN的安装验证测试都会失败)我的计算机。完成此操作后,CUDA (https://docs.nvidia.com/cuda/archive/9.0/cuda-installation-guide-linux/index.html#install-samples)和cuDNN (https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#installlinux-deb) 安装检查均已通过。
最终能够成功运行TF模型,没有任何错误。
model.fit(train_images, train_labels,  
          epochs = 10, 
          validation_data = (test_images, test_labels),
          callbacks = [cp_callback])  # pass callback to training

在1000个样本上训练,在1000个样本上验证,第1个epoch 1000/1000 [==============================] - 1s 604us/step - 损失: 1.1795 - 准确率: 0.6720 - val_loss: 0.7519 - val_acc: 0.7580

Epoch 00001: 将模型保存到training_1/cp.ckpt WARNING:tensorflow:该模型被编译为Keras优化器(),但使用save_weights以TensorFlow格式进行保存。模型的权重将被保存,但与TensorFlow优化器不同,在TensorFlow格式中,优化器的状态将不会被保存。

希望这能对您有所帮助。

注意:这可能是一个容易遇到的问题,因为tensorflow文档明确要求安装CUDA和cuDNN来支持TF中的GPU,但实际上即使没有安装cuDNN,您也可以通过pip install tensorflow-gpu来安装GPU版本的tensorflow,虽然这不是正确的方法,但(如果某个人太热心)可能会误导某些人将问题归咎于他们的代码,而不是其他潜在的安装要求(在这种情况下这才是正确的选择)。


6

我也遇到了同样的错误。

GPU同步失败。

当我的CNN运行了大约12个小时时,今天出现了这个错误。
暂时通过重新启动计算机解决了这个问题。

编辑:

今天我再次遇到了这个错误。但是不像之前一样重启电脑,而是重新启动IPython控制台,错误也消失了。似乎在相同的Python环境中,TensorFlow无法找到可用的GPU。如果重新启动Python环境,则一切恢复正常。我的使用的是TensorFlow-GPU v1.10.0和cudnn v7.1.4以及GTX 950M。


0

这是一个较旧的问题,但对于那些遇到此问题的人来说,我的解决方法与其他答案不同。

代码使用import schedule在预定时间运行Tensorflow模型。 代码第一次运行没有问题,然后在第二次运行时,代码会返回一个

GPU同步失败

错误。 以前,我使用from numba import cuda解决了内存问题,以释放Tensorflow分配的内存。 代码中包含了一行cuda.close(),因为我认为Tensorflow会在下一次运行时重新打开Cuda会话。 我删除了cuda.close()这一行,自那以后一切都运行良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接