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

В Tensorflow / Keras при запуске кода из https://github.com/pierluigiferrari/ssd_keras используйте оценщик: ssd300_evaluation. Я получил эту ошибку.

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.

Это очень похоже на нерешенный вопрос: Ошибка Google Colab: не удалось получить алгоритм свертки. Вероятно, это связано с тем, что cuDNN не удалось инициализировать

С проблемой, с которой я столкнулся:

питон: 3.6.4.

Версия Tensorflow: 1.12.0.

Керас Версия: 2.2.4.

CUDA: V10.0.

cuDNN: V7.4.1.5.

NVIDIA GeForce GTX 1080.

Также я побежал:

import tensorflow as tf
with tf.device('/gpu:0'):
      a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
      b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
      c = tf.matmul(a, b)
with tf.Session() as sess:
print (sess.run(c))

Без ошибок или проблем.

Минималистичный пример:

 from keras import backend as K
 from keras.models import load_model
 from keras.optimizers import Adam
 from scipy.misc import imread
 import numpy as np
 from matplotlib import pyplot as plt

 from models.keras_ssd300 import ssd_300
 from keras_loss_function.keras_ssd_loss import SSDLoss
 from keras_layers.keras_layer_AnchorBoxes import AnchorBoxes
 from keras_layers.keras_layer_DecodeDetections import DecodeDetections
 from keras_layers.keras_layer_DecodeDetectionsFast import DecodeDetectionsFast
 from keras_layers.keras_layer_L2Normalization import L2Normalization
 from data_generator.object_detection_2d_data_generator import DataGenerator
 from eval_utils.average_precision_evaluator import Evaluator
 import tensorflow as tf
 %matplotlib inline
 import keras
 keras.__version__



 # Set a few configuration parameters.
 img_height = 300
 img_width = 300
 n_classes = 20
 model_mode = 'inference'


 K.clear_session() # Clear previous models from memory.

 model = ssd_300(image_size=(img_height, img_width, 3),
            n_classes=n_classes,
            mode=model_mode,
            l2_regularization=0.0005,
            scales=[0.1, 0.2, 0.37, 0.54, 0.71, 0.88, 1.05], # The scales 
 for MS COCO [0.07, 0.15, 0.33, 0.51, 0.69, 0.87, 1.05]
            aspect_ratios_per_layer=[[1.0, 2.0, 0.5],
                                     [1.0, 2.0, 0.5, 3.0, 1.0/3.0],
                                     [1.0, 2.0, 0.5, 3.0, 1.0/3.0],
                                     [1.0, 2.0, 0.5, 3.0, 1.0/3.0],
                                     [1.0, 2.0, 0.5],
                                     [1.0, 2.0, 0.5]],
            two_boxes_for_ar1=True,
            steps=[8, 16, 32, 64, 100, 300],
            offsets=[0.5, 0.5, 0.5, 0.5, 0.5, 0.5],
            clip_boxes=False,
            variances=[0.1, 0.1, 0.2, 0.2],
            normalize_coords=True,
            subtract_mean=[123, 117, 104],
            swap_channels=[2, 1, 0],
            confidence_thresh=0.01,
            iou_threshold=0.45,
            top_k=200,
            nms_max_output_size=400)

 # 2: Load the trained weights into the model.

 # TODO: Set the path of the trained weights.
 weights_path = 'C:/Users/USAgData/TF SSD 
 Keras/weights/VGG_VOC0712Plus_SSD_300x300_iter_240000.h5'

 model.load_weights(weights_path, by_name=True)

 # 3: Compile the model so that Keras won't complain the next time you load it.

 adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)

 ssd_loss = SSDLoss(neg_pos_ratio=3, alpha=1.0)

 model.compile(optimizer=adam, loss=ssd_loss.compute_loss)


dataset = DataGenerator()

# TODO: Set the paths to the dataset here.
dir= "C:/Users/USAgData/TF SSD Keras/VOC/VOCtest_06-Nov-2007/VOCdevkit/VOC2007/"
Pascal_VOC_dataset_images_dir = dir+ 'JPEGImages'
Pascal_VOC_dataset_annotations_dir = dir + 'Annotations/'
Pascal_VOC_dataset_image_set_filename = dir+'ImageSets/Main/test.txt'

# The XML parser needs to now what object class names to look for and in which order to map them to integers.
classes = ['background',
           'aeroplane', 'bicycle', 'bird', 'boat',
           'bottle', 'bus', 'car', 'cat',
           'chair', 'cow', 'diningtable', 'dog',
           'horse', 'motorbike', 'person', 'pottedplant',
           'sheep', 'sofa', 'train', 'tvmonitor']

dataset.parse_xml(images_dirs=[Pascal_VOC_dataset_images_dir],
                  image_set_filenames=[Pascal_VOC_dataset_image_set_filename],
                  annotations_dirs=[Pascal_VOC_dataset_annotations_dir],
                  classes=classes,
                  include_classes='all',
                  exclude_truncated=False,
                  exclude_difficult=False,
                  ret=False)



evaluator = Evaluator(model=model,
                      n_classes=n_classes,
                      data_generator=dataset,
                      model_mode=model_mode)



results = evaluator(img_height=img_height,
                    img_width=img_width,
                    batch_size=8,
                    data_generator_mode='resize',
                    round_confidences=False,
                    matching_iou_threshold=0.5,
                    border_pixels='include',
                    sorting_algorithm='quicksort',
                    average_precision_mode='sample',
                    num_recall_points=11,
                    ignore_neutral_boxes=True,
                    return_precisions=True,
                    return_recalls=True,
                    return_average_precisions=True,
                    verbose=True)

При использовании сред Conda в моем случае проблема была решена установкой tensorflow-gpu и нет CUDAtoolkit или cuDNN, потому что они уже установлены с помощью tensorflow-gpu (см. Этот отвечать). Однако обратите внимание, что новые версии conda tensorflow-gpu могут не устанавливать CUDAtoolkit или cuDNN -> решение состоит в том, чтобы установить более низкую версию tensorflow-gpu, а затем обновить ее с помощью pip (см. Этот отвечать).

Javier TG 20.06.2021 17:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
67
1
104 308
30
Перейти к ответу Данный вопрос помечен как решенный

Ответы 30

Ответ принят как подходящий

У меня была эта ошибка, и я исправил ее, удалив все версии CUDA и cuDNN из моей системы. Затем я установил Набор инструментов CUDA 9.0 (без всяких патчей) и cuDNN v7.4.1 для CUDA 9.0.

Вы также можете понизить версию TensorFlow

Vidit Varshney 20.12.2019 06:52

Та же ошибка, что и у меня.Причина получения этой ошибки связана с несоответствием версии cudaa / cudnn с вашей версией tensorflow, есть два способа решить эту проблему: Либо вы понижаете версию своей версии Tensorflow, устанавливая пип-пакет --upgrade tensorflowgpu == 1.8.0 Или вы можете выполнить шаги, указанные в tenorflow.org/install/gpu. Совет: выберите свою версию Ubuntu и следуйте инструкциям. :-)

Vidit Varshney 20.12.2019 07:00

Для меня это было несоответствие между CUDA и cuDNN. Замена библиотек cuDNN на соответствующую версию решила проблему.

Fang Zhang 22.01.2020 05:54

Это не настоящее решение, оно просто каким-то образом сработало, вы посмотрите на stackoverflow.com/questions/53698035/… для фактического решения.

Shrijit Basak 01.05.2020 13:26

Как я могу скачать cudatookkit 9.0 для Windows 10?

Yang Yu 04.05.2021 17:28

Проблема заключается в несовместимости более новых версий tensorflow 1.10.x plus с версиями cudnn 7.0.5 и cuda 9.0. Самое простое решение - понизить тензорный поток до 1.8.0

pip install --upgrade tensorflow-gpu == 1.8.0

Я видел это сообщение об ошибке по трем разным причинам и с разными решениями:

1. У вас проблемы с кешем

Я регулярно работаю над этой ошибкой, завершая свой процесс python, удаляя каталог ~/.nv (в linux, rm -rf ~/.nv) и перезапуская процесс Python. Я точно не знаю, почему это работает. Вероятно, это частично связано со вторым вариантом:

2. У вас не хватает памяти

Ошибка также может появиться, если у вас закончилась оперативная память видеокарты. С помощью графического процессора nvidia вы можете проверить использование памяти видеокарты с помощью nvidia-smi. Это даст вам представление о том, сколько ОЗУ графического процессора у вас используется (что-то вроде 6025MiB / 6086MiB, если вы почти на пределе), а также список того, какие процессы используют ОЗУ графического процессора.

Если у вас закончилась оперативная память, вам необходимо перезапустить процесс (который должен освободить оперативную память), а затем использовать менее интенсивный подход к памяти. Вот несколько вариантов:

  • уменьшение размера партии
  • используя более простую модель
  • используя меньше данных
  • ограничить долю памяти графического процессора TensorFlow: например, следующее будет гарантировать, что TensorFlow использует <= 90% вашей оперативной памяти:
import keras
import tensorflow as tf

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.9  # 0.6 sometimes works better for folks
keras.backend.tensorflow_backend.set_session(tf.Session(config=config))

Это может замедлить оценку вашей модели, если не используется вместе с перечисленными выше элементами, предположительно из-за того, что придется менять местами большой набор данных, чтобы он поместился в небольшой объем выделенной вами памяти.

Второй вариант - запустить TensorFlow с минимальным объемом памяти, а затем выделить больше по мере необходимости (задокументировано здесь):

os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'

3. У вас несовместимые версии драйверов CUDA, TensorFlow, NVIDIA и т. д.

Если у вас никогда не работали аналогичные модели, у вас не заканчивается VRAM и, ваш кеш чист, я бы вернулся и настроил CUDA + TensorFlow, используя лучшее из доступных руководств по установке - я добился наибольшего успеха, следуя инструкции на https://www.tensorflow.org/install/gpu, а не на сайте NVIDIA / CUDA. Лямбда-стек - тоже хороший вариант.

Я поддерживаю этот ответ, так как для меня не хватило только памяти.

Carlos B 05.02.2020 17:48

В моем случае это были несовместимые версии. Инструкции tenorflow.org/install/gpu верны, если вы обратите пристальное внимание на такие операторы, как = или> =. Первоначально я предполагал «равный или новее», но с TensorFlow 2.2 (по-видимому, нужно рассматривать как 2.1) вам нужны точно CUDA 10.1 и> = CuDNN 7.6, которые совместимы с CUDA 10.1 (в настоящее время это только 7.6.5 - и есть два разные для CUDA 10.2 и 10.1.

Heath 29.06.2020 01:03

Это было воспоминанием и для меня. Спасибо за подробное объяснение.

natsuozawa 01.07.2020 13:02

В моем случае это нехватка памяти. И ваш код для версии 0.6 работал у меня [per_process_gpu_memory_fraction = 0.6]. Спасибо

Nitesh 16.12.2020 20:44

Я все время терял память. Фоновый процесс занимал всю мою память графического процессора. Перекрестно проверил идентификаторы процессов с htop и nvidia-smi

24dinitrophenylhydrazine 17.12.2020 12:28

Целую неделю боролся с этой проблемой. Причина была очень глупой: я использовал фотографии в высоком разрешении для тренировок.

Надеюсь, это сэкономит чье-то время :)

Проблема также может возникнуть, если есть несовместимая версия cuDNN, что может иметь место, если вы установили Tensorflow с conda, поскольку conda также устанавливает CUDA и cuDNN при установке Tensorflow.

Решение состоит в том, чтобы установить Tensorflow с помощью pip и установить CUDA и cuDNN отдельно без conda, например. если у вас CUDA 10.0.130 и cuDNN 7.4.1 (протестированные конфигурации), то

pip install tensorflow-gpu==1.13.1

1) закройте все остальные ноутбуки, использующие GPU

2) TF 2.0 требует cuDNN SDK (> = 7.4.1)

извлеките и добавьте путь к папке 'bin' в "переменные среды / системные переменные / путь": "D: \ Programs \ x64 \ Nvidia \ cudnn \ bin"

У меня возникла эта проблема после обновления до TF2.0. Следующее начало выдавать ошибку:

   outputs = tf.nn.conv2d(images, filters, strides=1, padding = "SAME")

Я использую Ubuntu 16.04.6 LTS (виртуальная машина данных Azure) и TensorFlow 2.0. Обновлен в соответствии с инструкциями по этой инструкции TensorFlow GPU страница. Это решило проблему для меня. Между прочим, это куча обновлений / установок apt-get, и я выполнил их все.

Я сделал то же самое для Ubuntu 18.04, и теперь все работает нормально. Но теперь, когда я запускаю nvidia-smi в терминале, он показывает CUDA 10.2. Но здесь говорит, что Tensorflow 2.0 совместим с CUDA 10.0. Я не понимаю, как все работает? Вывод which nvcc в терминале дает /usr/local/cuda-10.0/bin/nvcc

Malgo 18.12.2019 13:26

Итак, я думаю, что есть 2 независимых CUDA, один для драйвера nvidia, а другой для базовой среды.

Malgo 18.12.2019 13:33

Думаю, должно быть. Я не обратил внимания на отображаемую версию CUDA. Мое окружение изменилось, и теперь я больше не мог проверять. Интересная информация. Спасибо.

RadV 20.12.2019 19:35

Keras включен в состав TensorFlow 2.0 выше. Так

  • удалить import keras и
  • заменить оператор from keras.module.module import class на -> from tensorflow.keras.module.module import class
  • Возможно, ваша память GPU заполнена. Поэтому используйте параметр allow growth = True в параметре GPU. Сейчас это устарело. Но используйте этот ниже фрагмент кода после того, как импорт может решить вашу проблему.
import tensorflow as tf
from tensorflow.compat.v1.keras.backend import set_session
config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True  # dynamically grow the memory used on the GPU
config.log_device_placement = True  # to log device placement (on which device the operation ran)
sess = tf.compat.v1.Session(config=config)
set_session(sess)

Спасибо за прекрасный ответ! Это мне очень помогает.

Saurabh Chauhan 13.12.2019 13:11

Как уже заметил выше Анураг Бхалкар, это можно исправить с помощью грязного обходного пути, настроив и запустив модель в вашем коде перед загрузкой старой модели с load_model () из keras. Это правильно инициализирует cuDNN, который, кажется, затем можно использовать для load_model ().

В моем случае я использую Spyder IDE для запуска всех своих скриптов на Python. В частности, я настраиваю, обучаю и сохраняю CNN в одном скрипте. После этого другой скрипт загружает сохраненную модель для визуализации. Если я открываю Spyder и напрямую запускаю скрипт визуализации для загрузки старой сохраненной модели, я получаю ту же ошибку, что и упоминалось выше. Я все еще мог загрузить модель и изменить ее, но когда я попытался создать прогноз, я получил ошибку.

Однако если я сначала запустил свой обучающий сценарий в экземпляре Spyder, а затем запустил сценарий визуализации в том же экземпляре Sypder, он будет работать нормально без каких-либо ошибок:

#training a model correctly initializes cuDNN
model=Sequential()
model.add(Conv2D(32,...))
model.add(Dense(num_classes,...))
model.compile(...)
model.fit() #this all works fine

Затем следующий код, включая load_model (), работает нормально:

#this script relies on cuDNN already being initialized by the script above
from keras.models import load_model
model = load_model(modelPath) #works
model = Model(inputs=model.inputs, outputs=model.layers[1].output) #works
feature_maps = model.predict(img) #produces the error only if the first piece of code is not run

Я не мог понять, почему это так или как решить проблему по-другому, но для меня обучение небольшой рабочей модели keras перед использованием load_model () - это быстрое и грязное исправление, которое не требует переустановки cuDNN или иного .

Та же ошибка, что и у меня. Причина получения этой ошибки связана с несоответствием версии cudaa / cudnn вашей версии tenorflow, есть два метода решения этой проблемы:

  1. Либо вы понижаете версию Tensorflow pip install --upgrade tensorflowgpu==1.8.0

  2. Или вы можете выполнить действия, указанные в Здесь.

    Совет: выберите свою версию ubuntu и следуйте инструкциям. :-)

У меня была такая же проблема, но с более простым решением, чем у других, опубликованных здесь. У меня установлены как CUDA 10.0, так и 10.2, но у меня был только cuDNN для 10.2, и эта версия [на момент публикации] несовместима с TensorFlow GPU. Я только что установил cuDNN для CUDA 10.0, и теперь все работает нормально!

Обходной путь: Свежая установка TF 2.0 и запуск простого учебника Minst, все прошло нормально, открыл другой блокнот, попытался запустить и столкнулся с этой проблемой. Я существовал все записные книжки и перезапустил Jupyter и открыл только один ноутбук, успешно запустил его. Проблема связана либо с памятью, либо с запуском нескольких ноутбуков на графическом процессоре.

Спасибо

Некоторое время я боролся с этим, работая над экземпляром AWS Ubuntu.

Затем я нашел решение, которое в данном случае оказалось довольно простым.

Не устанавливайте tenorflow-gpu с помощью pip (pip install tensorflow-gpu), а с conda (conda install tensorflow-gpu), чтобы он находился в среде conda и устанавливал cudatoolkit и cudnn в правильной среде.

Это сработало для меня, спасло мне день и надеюсь, что это поможет кому-то другому.

См. Исходное решение здесь от LearnermaxRL: https://github.com/tensorflow/tensorflow/issues/24828#issuecomment-453727142

У меня была такая же проблема, я решил ее благодаря этому:

os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'

или

physical_devices = tf.config.experimental.list_physical_devices('GPU')
if len(physical_devices) > 0:
   tf.config.experimental.set_memory_growth(physical_devices[0], True)

1-е решение решило это как по волшебству. Таким образом, вероятно, не решен источник проблемы.

Inyoung Kim 김인영 16.09.2020 05:18

На данный момент это кажется очень распространенной проблемой, я нашел похожие решения на GitHub и Medium. У меня тоже сработало, так что, по-видимому, проблема с текущими версиями TF или CuDNN, а не с неправильными установками. Это была проблема со слоями CNN, независимо от их размера. Другие операции / слои в порядке.

Denziloe 06.12.2020 23:02

1-е решение отлично подходит для меня.

ThisIsNotMe 04.10.2021 21:23

Спасибо! это решение сработало и для меня. Я просто использовал рецепт ответа, получившего наибольшее количество голосов (за исключением переустановки), но это не сработало. Думаю, было бы отличной идеей создать рецепт из всех мер, описанных в этой ветке, чтобы закрепить его.

jottbe 25.11.2021 18:37

У меня такая же проблема с вами, и моя конфигурация - tenorflow1.13.1, cuda10.0, cudnn7.6.4. Я пытаюсь сменить версию cudnn на 7.4.2 повезло, я решил проблему.

Просто добавь

from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession

config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)

добавить from tensorflow.compat.v1 import ConfigProto

toliveira 09.09.2020 11:29

Это продолжение пункта 2 https://stackoverflow.com/a/56511889/2037998.

2. У вас не хватает памяти

Я использовал следующий код, чтобы ограничить использование ОЗУ графического процессора:

import tensorflow as tf

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  # Restrict TensorFlow to only allocate 1*X GB of memory on the first GPU
  try:
    tf.config.experimental.set_virtual_device_configuration(
        gpus[0],
        [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=(1024*4))])
    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)

Этот пример кода взят из: TensorFlow: использование графического процессора: ограничение роста памяти графического процессора Поместите этот код перед любым другим кодом TF / Keras, который вы используете.

Примечание. Приложение может использовать немного больше ОЗУ графического процессора, чем указано выше.

Примечание 2: если в системе также работают другие приложения (например, пользовательский интерфейс), эти программы также могут потреблять некоторое количество ОЗУ графического процессора. (Xorg, Firefox, ... иногда до 1 ГБ ОЗУ графического процессора вместе)

Включение увеличения памяти на GPU в начале моего кода решило проблему:

import tensorflow as tf

physical_devices = tf.config.experimental.list_physical_devices('GPU')
print("Num GPUs Available: ", len(physical_devices))
tf.config.experimental.set_memory_growth(physical_devices[0], True)

Num GPUs Available: 1

Ссылка: https://deeplizard.com/learn/video/OO4HD-1wRN8

при запуске записной книжки или кода добавьте следующие строки кода

import tensorflow as tf

physical_devices = tf.config.experimental.list_physical_devices('GPU')

tf.config.experimental.set_memory_growth(physical_devices[0], True)

У меня была аналогичная проблема. Tensorflow жаловался, что ожидает определенную версию cuDNN, но не ту, которую нашел. Итак, я скачал ожидаемую версию от https://developer.nvidia.com/rdp/cudnn-archive и установил ее. Теперь это работает.

У меня была такая же проблема с RTX 2080. Затем у меня сработал следующий код.

from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession

config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)

У меня такая же проблема. Я использую среду conda, поэтому мои пакеты автоматически управляются conda. Я решил проблему, ограничив выделение памяти для tenorflow v2, python 3.x

physical_devices = tf.config.experimental.list_physical_devices(‘GPU’)
tf.config.experimental.set_memory_growth(physical_devices[0], True)

Это решило мою проблему. Однако это очень сильно ограничивает память. Когда я одновременно запускаю

nvidia-smi

Увидел, что это около 700мб. Итак, чтобы увидеть больше вариантов, можно проверить коды в сайт tenorflow

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  # Restrict TensorFlow to only allocate 1GB of memory on the first GPU
  try:
    tf.config.experimental.set_virtual_device_configuration(
        gpus[0],
        [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=1024)])
    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)

В моем случае приведенный выше фрагмент кода отлично решил проблему.

Примечание: я не пробовал устанавливать tenorflow с помощью pip, это эффективно работало с установленным tenorflow conda.

Ubuntu: 18.04

питон: 3.8.5

тензорный поток: 2.2.0

cudnn: 7.6.5

cudatoolkit: 10.1.243

Столкнулся с той же проблемой, я думаю, что графический процессор не может загрузить все данные сразу. Я решил это, уменьшив размер партии.

У меня также была такая же проблема с Tensorflow 2.4 и Cuda 11.0 с CuDNN v 8.0.4. На решение этой проблемы я потратил почти 2-3 дня. Проблема была просто в несовпадении драйверов. Я устанавливал Cuda 11.0 Update 1, я думал, что это обновление 1, поэтому может работать хорошо, но это было виновником. Я удалил Cuda 11.0 Update 1 и установил его без обновления. Вот список драйверов, которые работали для TensorFlow 2.4 на графическом процессоре RTX 2060 6GB.

Список необходимых аппаратных и программных требований указан здесь

Я тоже должен был сделать это

import tensorflow as tf
physical_devices = tf.config.list_physical_devices('GPU') 
tf.config.experimental.set_memory_growth(physical_devices[0], True)

чтобы избежать этой ошибки

2020-12-23 21:54:14.971709: I tensorflow/stream_executor/stream.cc:1404] [stream=000001E69C1DA210,impl=000001E6A9F88E20] did not wait for [stream=000001E69C1DA180,impl=000001E6A9F88730]
2020-12-23 21:54:15.211338: F tensorflow/core/common_runtime/gpu/gpu_util.cc:340] CPU->GPU Memcpy failed
[I 21:54:16.071 NotebookApp] KernelRestarter: restarting kernel (1/5), keep random ports
kernel 8b907ea5-33f1-4b2a-96cc-4a7a4c885d74 restarted
kernel 8b907ea5-33f1-4b2a-96cc-4a7a4c885d74 restarted

Вот некоторые из примеров ошибок, которые я получал.

Тип 1

UnpicklingError: invalid load key, 'H'.

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
<ipython-input-2-f049ceaad66a> in <module>

Тип 2


InternalError: Blas GEMM launch failed : a.shape=(15, 768), b.shape=(768, 768), m=15, n=768, k=768 [Op:MatMul]

During handling of the above exception, another exception occurred:

Тип 3

failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
2020-12-23 21:31:04.534375: E tensorflow/stream_executor/cuda/cuda_blas.cc:226] failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
2020-12-23 21:31:04.534683: E tensorflow/stream_executor/cuda/cuda_blas.cc:226] failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
2020-12-23 21:31:04.534923: E tensorflow/stream_executor/cuda/cuda_blas.cc:226] failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
2020-12-23 21:31:04.539327: E tensorflow/stream_executor/cuda/cuda_dnn.cc:336] Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED
2020-12-23 21:31:04.539523: E tensorflow/stream_executor/cuda/cuda_dnn.cc:336] Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED
2020-12-23 21:31:04.539665: W tensorflow/core/framework/op_kernel.cc:1763] OP_REQUIRES failed at conv_ops_fused_impl.h:697 : 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.

Работает как шарм.Спасибо

Anoop saju 24.03.2021 08:49

Если вы установили Tensorflow-gpu с помощью Conda, установите cudnn и cudatoolkit, которые были установлены вместе с ним, и перезапустите ноутбук.

ПРИМЕЧАНИЕ: попытка удалить только эти два пакета в conda приведет к удалению сила цепочки других пакетов. Итак, используйте следующую команду, чтобы удалить только эти пакеты

(1) Для удаления cuda

conda remove --force cudatookit

(2) Чтобы удалить cudnn

conda remove --force cudnn

Теперь запустите Tensorflow, он должен работать!

Без какого-либо ответа я не могу добавить это в качестве комментария к двум существующим ответам выше от Anurag и Obnebion, я также не могу проголосовать за ответы, поэтому я даю новый ответ, даже если он, похоже, нарушает руководящие принципы. Во всяком случае, у меня изначально была проблема, что другие ответы на этом адресе страницы, и я исправил это, но затем снова встретил то же сообщение позже, когда я начал использовать обратные вызовы контрольной точки. На данный момент актуален только ответ Анурага / Обнебиона. Оказывается, я изначально сохранял модель как .json, а веса отдельно как .h5, а затем использовал model_from_json вместе с отдельной model.load_weights, чтобы снова вернуть веса. Это сработало (у меня CUDA 10.2 и tensorflow 2.x). Это сломалось только тогда, когда я попытался переключиться на эту универсальную модель save / load_model из обратного вызова контрольной точки. Это небольшое изменение, которое я внес в keras.callbacks.ModelCheckpoint в методе _save_model:

                            if self.save_weights_only:
                                self.model.save_weights(filepath, overwrite=True)
                            else:
                                model_json = self.model.to_json()
                                with open(filepath+'.json','w') as fb:
                                    fb.write(model_json)
                                    fb.close()
                                self.model.save_weights(filepath+'.h5', overwrite=True)
                                with open(filepath+'-hist.pickle','wb') as fb:
                                    trainhistory = {"history": self.model.history.history,"params": self.model.history.params}
                                    pickle.dump(trainhistory,fb)
                                    fb.close()
                                # self.model.save(filepath, overwrite=True)

Дамп рассола истории - это просто кладжа для еще одного вопроса о переполнении стека, что происходит с объектом истории, когда вы выходите раньше из обратного вызова контрольной точки. Вы можете видеть, что в методе _save_model есть строка, которая извлекает массив монитора потерь из журнала dict ... но никогда не записывает его в файл! Поэтому я просто добавил кладж соответственно. Большинство людей не рекомендуют использовать такие соленья. Мой код - это просто взлом, так что это не имеет значения.

У меня была такая же проблема, но добавление этой строки кода в начале решило мою проблему:

physical_devices = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(physical_devices[0], True)

работает с тензорным потоком V2.

не работал у меня с tenorflow-gpu 2.2, cuda 10.2 и cudnn 7.4.2 в CentOS 7, и ошибка требует, чтобы я установил cudnn 7.6.4

Mona Jalal 11.06.2021 06:29

@MonaJalal Вы можете понизить версию TensorFlow или обновить CUDNN для совместимости, проверьте эту ссылку: tenorflow.org/install/source#gpu

Haziq Sheikh 21.06.2021 17:03

Похоже, библиотеки нуждаются в разогреве. Это не эффективное решение для производства, но вы, по крайней мере, можете продолжить работу с другими ошибками ...

from keras.models import Sequential
import numpy as np
from keras.layers import Dense
from keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
model = Sequential()
model.add(Dense(1000,input_dim=(784),activation='relu') )  #imnput layer
model.add(Dense(222,activation='relu'))                     #hidden layer
model.add(Dense(100,activation='relu'))   
model.add(Dense(50,activation='relu'))   
model.add(Dense(10,activation='sigmoid'))   
model.compile(optimizer = "adam",loss='categorical_crossentropy',metrics=["accuracy"])
x_train = np.reshape(x_train,(60000,784))/255
x_test = np.reshape(x_test,(10000,784))/255
from keras.utils import np_utils
y_train = np_utils.to_categorical(y_train) 
y_test = np_utils.to_categorical(y_test)
model.fit(x_train[:1000],y_train[:1000],epochs=1,batch_size=32)

Если вы китаец, убедитесь, что ваш рабочий путь не включает китайский язык, и все больше и больше уменьшайте размер batch_size. Спасибо!

Просто установите TensorFlow с графическим процессором с помощью этой команды: pip install tensorflow; Вам не нужно отдельно устанавливать GPU. Если вы устанавливаете графический процессор отдельно, велика вероятность, что он не будет соответствовать их версиям.

Но для версий 1.15 и более ранних пакеты ЦП и ГП разделены.

Другие вопросы по теме