“解決”CUDNN_STATUS_ALLOC_FAILED

比来正在做一個煉丹深度學習的項目,不成避免地利用到了GPU加快。此中,在利用cuDNN的時候碰到了CUDNN_STATUS_ALLOC_FAILED的問題,記錄一下。

起首給出我的系統硬件和軟件環境:

  • OS: Windows Server 2019 Standard
  • CPU: Intel Xeon W-2123 3.6GHz
  • Memory: 64G ECC
  • GPU: NVIDIA Quadro P4000(8G)
  • Tensorflow: 1.13.2
  • Keras: 2.1.5
  • CUDA: 10.0
  • cuDNN: 7.3

具體報錯信息以下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
2021-03-22 20:39:27.884555: E tensorflow/stream_executor/cuda/cuda_dnn.cc:334] Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED
2021-03-22 20:39:27.888005: E tensorflow/stream_executor/cuda/cuda_dnn.cc:334] Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED
Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\envs\ly\lib\site-packages\tensorflow\python\client\session.py", line 1334, in _do_call
    return fn(*args)
  File "C:\ProgramData\Anaconda3\envs\ly\lib\site-packages\tensorflow\python\client\session.py", line 1319, in _run_fn
    options, feed_dict, fetch_list, target_list, run_metadata)
  File "C:\ProgramData\Anaconda3\envs\ly\lib\site-packages\tensorflow\python\client\session.py", line 1407, in _call_tf_sessionrun
    run_metadata)
tensorflow.python.framework.errors_impl.UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
         [[{{node conv2d_1/convolution}}]]
         [[{{node concat_9}}]]

Quick Fix

此處參考stackoverflow上的一個方案

1
2
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"

直接禁用GPU,自然也就不會牽扯到cuDNN。

Problem solved, amazing!

個鬼。

禁用GPU也就意味著禁用了GPU加快,意味着可怜的CPU要burn itself,這在對于效力有要求的生産環境是不可的??♂?。

觀察

在成立模型後顯存直接爆炸,以下圖:

AF436168-5387-4556-979B-721BE57A7A39.png

查閱資料,初步猜測是顯存不足導致的,所以想到了限制一下顯存的耗损:

1
2
3
4
5
import tensorflow as tf
from keras.backend.tensorflow_backend import set_session  
config = tf.ConfigProto()  
config.gpu_options.allow_growth = True  
set_session(tf.Session(config=config))  

限制後顯存明顯降落了。

AF436168-5387-4556-979B-721BE57A7A39.png

可是崩潰的問題依舊?。

又想到了一個問題,因爲服務器是多個項目組共用的,是不是是有可能爲其它組正在利用導致cuDNN無法創建句柄呢?

有可能,可是我也不克不及去關別人的法式呀boss不得打死我?。

疑問留在這裏,等服務器空了就來補充。(當然可能我也壓根不會填坑,不如留給讀者當一個思路)


Reference

利用 Hugo 構建
主題 StackJimmy 設計
xxfseo.com