Tensorflow 2.0 не может использовать графический процессор, что-то не так в cuDNN? : Не удалось получить алгоритм свертки. Вероятно, это связано с тем, что cuDNN не удалось инициализировать

Я пытаюсь понять и отладить свой код. Я пытаюсь предсказать с помощью модели CNN, разработанной под tf2.0 / tf.keras на GPU, но получаю эти сообщения об ошибках. может кто-нибудь помочь мне исправить это?

вот моя конфигурация среды

enviroments:
python 3.6.8
tensorflow-gpu 2.0.0-rc0
nvidia 418.x
CUDA 10.0
cuDNN 7.6+**

и файл журнала,

2019-09-28 13:10:59.833892: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10.0
2019-09-28 13:11:00.228025: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2019-09-28 13:11:00.957534: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2019-09-28 13:11:00.963310: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2019-09-28 13:11:00.963416: W tensorflow/core/common_runtime/base_collective_executor.cc:216] BaseCollectiveExecutor::StartAbort Unknown: 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 mobilenetv2_1.00_192/Conv1/Conv2D}}]]
mobilenetv2_1.00_192/block_15_expand_BN/cond/then/_630/Const: (Const): /job:localhost/replica:0/task:0/device:GPU:0=====>GPU Available:  True
=====> 4 Physical GPUs, 1 Logical GPUs

mobilenetv2_1.00_192/block_15_expand_BN/cond/then/_630/Const_1: (Const): /job:localhost/replica:0/task:0/device:GPU:0
mobilenetv2_1.00_192/block_15_depthwise_BN/cond/then/_644/Const: (Const): /job:localhost/replica:0/task:0/device:GPU:0
mobilenetv2_1.00_192/block_15_depthwise_BN/cond/then/_644/Const_1: (Const): /job:localhost/replica:0/task:0/device:GPU:0
mobilenetv2_1.00_192/block_15_project_BN/cond/then/_658/Const: (Const): /job:localhost/replica:0/task:0/device:GPU:0
mobilenetv2_1.00_192/block_15_project_BN/cond/then/_658/Const_1: (Const): /job:localhost/replica:0/task:0/device:GPU:0
mobilenetv2_1.00_192/block_16_expand_BN/cond/then/_672/Const: (Const): /job:localhost/replica:0/task:0/device:GPU:0
mobilenetv2_1.00_192/block_16_expand_BN/cond/then/_672/Const_1: (Const): /job:localhost/replica:0/task:0/device:GPU:0
mobilenetv2_1.00_192/block_16_depthwise_BN/cond/then/_686/Const: (Const): /job:localhost/replica:0/task:0/device:GPU:0
mobilenetv2_1.00_192/block_16_depthwise_BN/cond/then/_686/Const_1: (Const): /job:localhost/replica:0/task:0/device:GPU:0
mobilenetv2_1.00_192/block_16_project_BN/cond/then/_700/Const: (Const): /job:localhost/replica:0/task:0/device:GPU:0
mobilenetv2_1.00_192/block_16_project_BN/cond/then/_700/Const_1: (Const): /job:localhost/replica:0/task:0/device:GPU:0
mobilenetv2_1.00_192/Conv_1_bn/cond/then/_714/Const: (Const): /job:localhost/replica:0/task:0/device:GPU:0
mobilenetv2_1.00_192/Conv_1_bn/cond/then/_714/Const_1: (Const): /job:localhost/replica:0/task:0/device:GPU:0
Traceback (most recent call last):
  File "NSFW_Server.py", line 162, in <module>
    model.predict(initial_tensor)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training.py", line 915, in predict
    use_multiprocessing=use_multiprocessing)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_arrays.py", line 722, in predict
    callbacks=callbacks)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_arrays.py", line 393, in model_iteration
    batch_outs = f(ins_batch)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/backend.py", line 3625, in __call__
    outputs = self._graph_fn(*converted_inputs)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/function.py", line 1081, in __call__
    return self._call_impl(args, kwargs)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/function.py", line 1121, in _call_impl
    return self._call_flat(args, self.captured_inputs, cancellation_manager)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/function.py", line 1224, in _call_flat
    ctx, args, cancellation_manager=cancellation_manager)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/function.py", line 511, in call
    ctx=ctx)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/execute.py", line 67, in quick_execute
    six.raise_from(core._status_to_exception(e.code, message), None)
  File "<string>", line 3, in raise_from
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 mobilenetv2_1.00_192/Conv1/Conv2D (defined at /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/framework/ops.py:1751) ]] [Op:__inference_keras_scratch_graph_10727]

Function call stack:
keras_scratch_graph

Код

if __name__ == "__main__":

    print("=====>GPU Available: ", tf.test.is_gpu_available())
    tf.debugging.set_log_device_placement(True)

    gpus = tf.config.experimental.list_physical_devices('GPU')
    if gpus:
        try:
            # Currently, memory growth needs to be the same across GPUs

            tf.config.experimental.set_visible_devices(gpus[0], 'GPU')
            tf.config.experimental.set_memory_growth(gpus[0], True)
            logical_gpus = tf.config.experimental.list_logical_devices('GPU')
            print("=====>", len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
        except RuntimeError as e:
            # Memory growth must be set before GPUs have been initialized
            print(e)

    paras_path = "./paras/{}".format(int(2011))
    model = tf.keras.experimental.load_from_saved_model(paras_path)
    initial_tensor = np.zeros((1, INPUT_SHAPE, INPUT_SHAPE, 3))
    model.predict(initial_tensor)

person VinSent TeZla    schedule 28.09.2019    source источник


Ответы (3)


Вы должны убедиться, что у вас правильная версия CUDA + CUDNN + TensorFlow (также убедитесь, что у вас все установлено).

Несколько примеров работающих конфигураций представлены ниже (ОБНОВЛЕНИЕ ДЛЯ ПОСЛЕДНЕЙ ВЕРСИИ TENSORFLOW).

  1. Cuda 11.0 + CuDNN 8.0.4 + TensorFlow 2.4.0

  2. Cuda 10.1 + CuDNN 7.6.5 (обычно ›7.6) + TensorFlow 2.2.0 / TensorFlow 2.3.0 (TF› = 2.1 требует CUDA ›= _ 10_)

  3. Cuda 10.1 + CuDNN 7.6.5 (обычно ›7.6) + TensorFlow 2.1.0 (TF› = 2.1 требует CUDA ›= 10.1)

  4. Cuda 10.0 + CuDNN 7.6.3 + / TensorFlow _19 _ / _ 20_ / TensorFlow 2.0.

  5. Cuda 9.0 + CuDNN 7.0.5 + TensorFlow 1.10

Обычно эта ошибка появляется, если у вас установлена ​​несовместимая версия TensorFlow / CuDNN. В моем случае это появилось, когда я попытался использовать более старый TensorFlow с более новой версией CuDNN.

** Если по какой-то причине вы получаете сообщение об ошибке типа (и после этого ничего не происходит):

Использование драйвера для компиляции ptx

Решение: установите последнюю версию драйвера nvidia.

person Timbus Calin    schedule 28.09.2019
comment
спасибо, чтобы убедиться, что CUDA / cuDNN / TF - правильная версия, я вытащил образ из концентратора докеров, который является tenorflow / tensorflow: 2.0.0rc0-gpu-py3, и запустил свой код в контейнере ... Но он все еще не Не работает и возникает такая же ошибка. - person VinSent TeZla; 29.09.2019
comment
Попробуйте установить их вручную, а затем еще раз проверьте зависимости, установленные в образе Docker. Должна быть небольшая разница, которую вам не хватает. - person Timbus Calin; 01.10.2019
comment
Спасибо, кто-нибудь пробовал с какими-либо вышеперечисленными версиями? как cuda 10.1 + CuDNN 7.64. - person Profstyle; 18.11.2019
comment
Я изменил ответ, чтобы быть более ясным. Cuda 10.0 не только 10, потому что есть разница между 10.0 и 10.1. - person Timbus Calin; 18.11.2019
comment
@Profstyle Я обновил ответ на последнюю версию TensorFlow - person Timbus Calin; 06.03.2020
comment
Как насчет Tensorflow 2.2.0? Какие версии Cuda и CuDNN совместимы? - person jakes; 10.06.2020
comment
@jakes Я должен это проверить, на данный момент на одном из моих компьютеров у меня есть CUDA 10.0 + TF 1.14, а на моем ноутбуке CUDA 10.1 + TF 2.1 с упомянутыми выше CUDNN. К сожалению, не раньше начала июля, когда я попытаюсь увидеть другую конфигурацию. - person Timbus Calin; 10.06.2020
comment
@mobinalhassan вам понадобится CUDA 10.1 - person Timbus Calin; 12.06.2020
comment
@TimbusCalin Я установил CUDA версии 10.2.89, как я могу понизить эту версию ... у меня проблема с нехваткой памяти - person Mobin Al Hassan; 12.06.2020
comment
Вам необходимо полностью удалить CUDA, а затем выполнить чистую установку CUDA 10.1. - person Timbus Calin; 12.06.2020
comment
@VinSentTeZla помог ли мой ответ решить вашу проблему? - person Timbus Calin; 17.10.2020

Для тех, кто сталкивается с проблемами, связанными с вышеуказанной ошибкой (для платформы Windows), я отсортировал ее, просто установив версию CuDNN, совместимую с CUDA, уже установленной в системе.

    • This suitable version can be downloaded from the website Download CuDNN from Developer's portal. You might need Nvidia account for it. This will be easily created by providing mail id and filling a questionnaire.
    • To check the CUDA version, run NVCC --version.
    • Once the suitable version is downloaded, extract the folder from the zip file.
    • Go to the bin folder of the extracted folder. copy the cudnn64:7.dll and paste it in the CUDA's bin folder. In my case, the location where Cuda is installed is C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin.
    • This would most probably solve the problem.

Сведения о моей системе:

  1. Windows 10
  2. CUDA 10.0
  3. TensorFlow 2.0
  4. Графический процессор - Nvidia GTX 1060

Я также нашел этот блог Установка TensorFlow с поддержкой CUDA и GPU в Windows 10. очень полезен.

person Raj Rajeshwari Prasad    schedule 09.02.2021

Ознакомьтесь с инструкциями на странице инструкций графического процессора TensorFlow для вашей ОС. Это решило проблему для меня в Ubuntu 16.04.6 LTS и Tensorflow 2.0.

person RadV    schedule 18.10.2019