Tensorflow 2.1 Не удалось получить алгоритм свертки. Вероятно, это связано с тем, что cuDNN не удалось инициализировать

Я использую anaconda python 3.7 и tensorflow 2.1 с cuda 10.1 и cudnn 7.6.5 и пытаюсь запустить набор retinaset (https://github.com/fizyr/keras-retinanet):

python keras_retinanet/bin/train.py --freeze-backbone --random-transform --batch-size 8 --steps 500 --epochs 10 csv annotations.csv classes.csv

Ниже приведены результирующие ошибки:

Epoch 1/10
2020-02-10 20:34:37.807590: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-02-10 20:34:38.835777: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-02-10 20:34:39.753051: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-02-10 20:34:39.776706: W tensorflow/core/common_runtime/base_collective_executor.cc:217] 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 conv1/convolution}}]]
Traceback (most recent call last):
  File "keras_retinanet/bin/train.py", line 530, in <module>
    main()
  File "keras_retinanet/bin/train.py", line 525, in main
    initial_epoch=args.initial_epoch
  File "C:\Anaconda\Anaconda3.7\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "C:\Anaconda\Anaconda3.7\lib\site-packages\keras\engine\training.py", line 1732, in fit_generator
    initial_epoch=initial_epoch)
  File "C:\Anaconda\Anaconda3.7\lib\site-packages\keras\engine\training_generator.py", line 220, in fit_generator
    reset_metrics=False)
  File "C:\Anaconda\Anaconda3.7\lib\site-packages\keras\engine\training.py", line 1514, in train_on_batch
    outputs = self.train_function(ins)
  File "C:\Anaconda\Anaconda3.7\lib\site-packages\tensorflow_core\python\keras\backend.py", line 3727, in __call__
    outputs = self._graph_fn(*converted_inputs)
  File "C:\Anaconda\Anaconda3.7\lib\site-packages\tensorflow_core\python\eager\function.py", line 1551, in __call__
    return self._call_impl(args, kwargs)
  File "C:\Anaconda\Anaconda3.7\lib\site-packages\tensorflow_core\python\eager\function.py", line 1591, in _call_impl
    return self._call_flat(args, self.captured_inputs, cancellation_manager)
  File "C:\Anaconda\Anaconda3.7\lib\site-packages\tensorflow_core\python\eager\function.py", line 1692, in _call_flat
    ctx, args, cancellation_manager=cancellation_manager))
  File "C:\Anaconda\Anaconda3.7\lib\site-packages\tensorflow_core\python\eager\function.py", line 545, in call
    ctx=ctx)
  File "C:\Anaconda\Anaconda3.7\lib\site-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 conv1/convolution (defined at C:\Anaconda\Anaconda3.7\lib\site-packages\keras\backend\tensorflow_backend.py:3009) ]] [Op:__inference_keras_scratch_graph_12376]

Function call stack:
keras_scratch_graph

Кто-нибудь испытывал подобные проблемы?


person jingweimo    schedule 11.02.2020    source источник
comment
Тебе удалось это решить? У меня точно такие же проблемы.   -  person Eduardo    schedule 10.03.2020


Ответы (4)


Я получал ту же ошибку при попытке обучить мою модель CNN на двух графических процессорах с использованием tf.distribute.MirroredStrategy(). На данный момент я нашел обходной путь, который позволяет мне использовать их оба (хотя обучение на одном графическом процессоре работало нормально). Попробуйте указать в начале своего приложения следующее:

config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True
session =tf.compat.v1.InteractiveSession(config=config)

Надеюсь, это поможет!

person Gary    schedule 25.03.2020
comment
Я добавил эти строки в свой скрипт, но ошибка свертки все еще возникает. Должен ли я помещать его поверх основного сценария, или сценария обучения, или обоих, кстати? - person Leevo; 08.05.2020

Сделай это:

physical_devices = tf.config.experimental.list_physical_devices(‘GPU’)
tf.config.experimental.set_memory_growth(physical_devices[0], True)
person Atif Faridi    schedule 17.02.2021

Согласно этому комментарию в проблеме Tensorflow GitHub, эта ошибка может быть вызвано превышением лимита памяти вашего графического процессора (вы можете проверить использование графического процессора с помощью команд nvidia-smi или gpustat).

Если настройка tf.config.experimental.set_memory_growth = True не работает, мы надеемся, что ограничение использования памяти графического процессора вручную сработает:

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
    # Restrict TensorFlow to only allocate 1GB * 2 of memory on the first GPU
    try:
        tf.config.experimental.set_virtual_device_configuration(
            gpus[0],
            [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=1024 * 2)])
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
    except RuntimeError as e:
        # Virtual devices must be set before GPUs have been initialized
        print(e)

Благодарим BryanBo-Cao за его комментарий.

person BurntIce    schedule 28.10.2020

Получил ту же ошибку с python 3.7.9, tensorflow 2.1.0, cuda 10.1.105 и cudnn 7.6.5. Решено после обновления драйвера графического процессора от NVIDIA.

person xldk    schedule 22.06.2021