Tensorflow: Не удалось создать дескриптор cudnn: CUDNN_STATUS_INTERNAL_ERROR

Созданный на 21 дек. 2018  ·  181Комментарии  ·  Источник: tensorflow/tensorflow

Пожалуйста, убедитесь, что это ошибка. тег: bug_template

Системная информация

  • Написал ли я собственный код (в отличие от использования стандартного примера сценария, представленного в TensorFlow): Да и Нет (описано ниже)
  • Платформа и распространение ОС (например, Linux Ubuntu 16.04): Manjaro
  • Мобильное устройство (например, iPhone 8, Pixel 2, Samsung Galaxy), если проблема возникает на мобильном устройстве:
  • TensorFlow установлен из (исходного или двоичного): tf-nightly-gpu (19 декабря, r1.13)
  • Версия TensorFlow (используйте команду ниже): 1.13.0-dev20181219
  • Версия Python: 3.7.1
  • Версия Bazel (при компиляции из исходников):
  • Версия GCC / Compiler (при компиляции из исходников):
  • Версия CUDA / cuDNN: CUDA 10 с cuDNN 7.4.1
  • Модель графического процессора и память: RTX 2070 8 ГБ

Опишите текущее поведение
Я использую модель CNN на MNIST. Когда я работаю с графическим процессором, я сталкиваюсь с
2018-12-20 20:09:13.644176: E tensorflow/stream_executor/cuda/cuda_dnn.cc:334] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

Я покопался и понял, что это проблема с памятью (чего не должно быть, так как у меня 32 ГБ ОЗУ и 64 ГБ подкачки. Я запускал htop при запуске модели, и у меня 20+ ГБ свободного места, что больше, чем достаточно для сопоставления 8 ГБ vRAM.

Использование gpu_options.allow_growth = True заставляет модель работать правильно, а установка os.environ['CUDA_VISIBLE_DEVICES'] = '-1' также работает. Это означает, что я столкнулся с проблемой памяти, но не понимаю, как это сделать.

Кроме того, использование gpu_options.allow_growth = True не устраняет ту же проблему при попытке запустить tensorflow / models / official / mnist / model, который должен иметь аналогичное поведение с моим кодом.

Код для воспроизведения проблемы

import os
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import math
import time
# Killing optional CPU driver warnings
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
tf.logging.set_verbosity(tf.logging.ERROR)


class Model:

    def __init__(self, image, label):
        """
        A Model class contains a computational graph that classifies images
        to predictions. Each of its methods builds part of the graph
        on Model initialization. Do not modify the constructor, as doing so
        would break the autograder. You may, however, add class variables
        to use in your graph-building. e.g. learning rate, 

        image: the input image to the computational graph as a tensor
        label: the correct label of an image as a tensor
        prediction: the output prediction of the computational graph,
                    produced by self.forward_pass()
        optimize: the model's optimizing tensor produced by self.optimizer()
        loss: the model's loss produced by computing self.loss_function()
        accuracy: the model's prediction accuracy
        """
        self.image = image
        self.label = label

        # TO-DO: Add any class variables you want to use.

        self.prediction = self.forward_pass()
        self.loss = self.loss_function()
        self.optimize = self.optimizer()
        self.accuracy = self.accuracy_function()

    def forward_pass(self):
        """
        Predicts a label given an image using convolution layers

        :return: the prediction as a tensor
        """
        filter_1 = tf.Variable(tf.truncated_normal([3, 3, 1, 8], stddev=0.1))
        conv_1 = tf.nn.conv2d(self.image, filter_1, [1, 1, 1, 1], "SAME")

        reshaped = tf.reshape(conv_1, shape=[50, -1])

        L1 = reshaped.shape[1].value
        L2 = 500
        W1 = tf.Variable(tf.random_normal([L1, L2], mean=0, stddev=0.01))
        b1 = tf.Variable(tf.random_normal([L2], mean=0, stddev=0.01))
        relu_1 = tf.nn.relu(tf.matmul(reshaped, W1) + b1)

        W2 = tf.Variable(tf.random_normal([L2, 10], mean=0, stddev=0.01))
        b2 = tf.Variable(tf.random_normal([10], mean=0, stddev=0.01))
        logits = tf.nn.relu(tf.matmul(relu_1, W2) + b2)
        return logits

    def loss_function(self):
        """
        Calculates the model cross-entropy loss

        :return: the loss of the model as a tensor
        """
        loss = tf.losses.softmax_cross_entropy(onehot_labels=self.label, logits=self.prediction)
        return loss

    def optimizer(self):
        """
        Optimizes the model loss using an Adam Optimizer

        :return: the optimizer as a tensor
        """
        learning_rate = 0.1
        sgd = tf.train.GradientDescentOptimizer(learning_rate)
        train = sgd.minimize(self.loss)
        return train

    def accuracy_function(self):
        """
        Calculates the model's prediction accuracy by comparing
        predictions to correct labels – no need to modify this

        :return: the accuracy of the model as a tensor
        """
        correct_prediction = tf.equal(tf.argmax(self.prediction, 1),
                                      tf.argmax(self.label, 1))
        return tf.reduce_mean(tf.cast(correct_prediction, tf.float32))


def main():
    t_start = time.time()

    mnist = input_data.read_data_sets("data/mnist/", one_hot=True)
    batch_sz = 50
    batch = 2000

    inputs = tf.placeholder(shape=[batch_sz, 28, 28, 1], dtype=tf.float32)
    labels = tf.placeholder(shape=[batch_sz, 10], dtype=tf.float32)

    model = Model(inputs, labels)

    session_config = tf.ConfigProto(gpu_options=tf.GPUOptions(allow_growth=True))
    sess = tf.Session(config=session_config)

    # sess = tf.Session()

    sess.run(tf.global_variables_initializer())
    for i in range(batch):
        next_image, next_label = mnist.train.next_batch(batch_sz)
        next_image = next_image.reshape((batch_sz, 28, 28, 1))
        sess.run(model.optimize, feed_dict={inputs: next_image, labels: next_label})

    acc, test_images, test_labels = 0, mnist.test.images, mnist.test.labels
    test_batch = math.ceil(len(test_images) / batch_sz)
    for i in range(test_batch):
        batch_images = test_images[i * batch_sz: (i + 1) * batch_sz]
        batch_images = batch_images.reshape((batch_sz, 28, 28, 1))
        batch_labes = test_labels[i * batch_sz: (i + 1) * batch_sz]
        acc += sess.run(model.accuracy, feed_dict={inputs: batch_images, labels: batch_labes})
    acc /= test_batch
    print(acc)

    print(time.time() - t_start, 'seconds')

    return


if __name__ == '__main__':
    main()
TF 2.0 gpu bug

Самый полезный комментарий

Я пытался скомпилировать из исходного кода, но столкнулся с той же проблемой. Я, наконец, смог исправить свою проблему, установив config.gpu_options.allow_growth = True .

Все 181 Комментарий

Я столкнулся с той же проблемой с тем же графическим процессором: «CUDNN_STATUS_INTERNAL_ERROR».

Графический процессор RTX 2070
CUDA 10
cuDNN 7.4.2
Ubuntu 18.04
tf-nightly-gpu (версия 1.13, 13 янв)
Python 3.6.7

2019-01-15 05:01:03.503415: I tensorflow/stream_executor/platform/default/dso_loader.cc:154] successfully opened CUDA li
brary libcublas.so.10.0 locally
2019-01-15 05:01:03.752563: I tensorflow/stream_executor/platform/default/dso_loader.cc:154] successfully opened CUDA li
brary libcudnn.so.7 locally
2019-01-15 05:01:04.905618: E tensorflow/stream_executor/cuda/cuda_dnn.cc:493] Could not create cudnn handle: CUDNN_STAT
US_INTERNAL_ERROR
2019-01-15 05:01:04.908147: E tensorflow/stream_executor/cuda/cuda_dnn.cc:493] Could not create cudnn handle: CUDNN_STAT
US_INTERNAL_ERROR
2019-01-15 05:01:04.908191: W tensorflow/core/framework/op_kernel.cc:1412] OP_REQUIRES failed at conv_ops_fused.cc:801 :
 Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to se
e if a warning log message was printed above.

У меня такая же проблема с

RTX2080 графический процессор
CUDA 10
cudnn 7.4.2

Я пробовал следующие tf-версии tf-nightly-gpu и самокомпилированную версию от мастера (060b6e32ad).
Я обнаружил, что можно установить следующие переменные среды, чтобы получить дополнительную информацию об отладке.

CUDNN_LOGINFO_DBG = 1;
CUDNN_LOGDEST_DBG = стандартный вывод

Затем я получаю следующую ошибку:

I0117 14: 11: 24.441819 140433563125568 basic_session_run_hooks.py:594] Сохранение контрольных точек для 0 в /tmp/mnist/model.ckpt.
2019-01-17 14: 11: 25.916269: Я tenorflow / stream_executor / platform / default / dso_loader.cc: 154] успешно открыл библиотеку CUDA libcublas.so.10.0 локально

Я! CuDNN (v7402) вызывается функция cudnnCreate ():
я! Время: 2019-01-17T14: 11: 26.079184 (0д + 0ч + 0м + 0с с начала)
я! Процесс = 29255; Thread = 29356; GPU = NULL; Handle = NULL; StreamId = NULL.

2019-01-17 14: 11: 26.079151: I tensorflow / stream_executor / platform / default / dso_loader.cc: 154] успешно открыл локально библиотеку CUDA libcudnn.so.7

Я! CuDNN (v7402) вызывается функция cudnnCreate ():
я! Время: 2019-01-17T14: 11: 26.571897 (0д + 0ч + 0м + 0с с начала)
я! Процесс = 29255; Thread = 29356; GPU = NULL; Handle = NULL; StreamId = NULL.

2019-01-17 14: 11: 26.571858: E tensorflow / stream_executor / cuda / cuda_dnn.cc: 493] Не удалось создать дескриптор cudnn: CUDNN_STATUS_INTERNAL_ERROR
2019-01-17 14: 11: 26.579375: E tensorflow / stream_executor / cuda / cuda_dnn.cc: 493] Не удалось создать дескриптор cudnn: CUDNN_STATUS_INTERNAL_ERROR

Я! CuDNN (v7402) вызывается функция cudnnCreate ():
я! Время: 2019-01-17T14: 11: 26.579803 (0д + 0ч + 0м + 0с с начала)
я! Процесс = 29255; Thread = 29356; GPU = NULL; Handle = NULL; StreamId = NULL.

2019-01-17 14: 11: 26.585818: E tensorflow / stream_executor / cuda / cuda_dnn.cc: 493] Не удалось создать дескриптор cudnn: CUDNN_STATUS_INTERNAL_ERROR
2019-01-17 14: 11: 26.585850: W ./tensorflow/stream_executor/stream.h:2109] попытка выполнить операцию DNN с помощью StreamExecutor без поддержки DNN
Отслеживание (последний вызов последний):
Файл "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", строка 1335, в _do_call
вернуть fn (* args)
Файл "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", строка 1320, в _run_fn
параметры, feed_dict, fetch_list, target_list, run_metadata)
Файл "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", строка 1408, в _call_tf_sessionrun
run_metadata)
tensorflow.python.framework.errors_impl.UnknownError: не удалось получить алгоритм свертки. Вероятно, это связано с тем, что cuDNN не удалось инициализировать, поэтому попробуйте проверить, было ли напечатано предупреждение журнала выше.
[[{{node Discriminator_1 / Conv / Conv2D}}]]
[[поезд / discinator_train / train_op / control_dependency / _569]]

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

Отслеживание (последний вызов последний):
Файл "/home/dj/projects/gan/tf_models/research/gan/mnist/train.py", строка 151, в
tf.app.run ()
Файл "/usr/local/lib/python3.6/dist-packages/tensorflow/python/platform/app.py", строка 125, выполняется
_sys.exit (основной (argv))
Файл "/home/dj/projects/gan/tf_models/research/gan/mnist/train.py", строка 147, в основном
get_hooks_fn = tfgan.get_joint_train_hooks ())
Файл "/usr/local/lib/python3.6/dist-packages/tensorflow/contrib/gan/python/train.py", строка 1200, в gan_train
config = config)
Файл "/usr/local/lib/python3.6/dist-packages/tensorflow/contrib/training/python/training/training.py", строка 546, в поезде
loss = session.run (train_op, run_metadata = run_metadata)
Файл "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", строка 693, выполняется
run_metadata = run_metadata)
Файл "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", строка 1188, выполняется
run_metadata = run_metadata)
Файл "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", строка 1287, выполняется
поднять шесть. поднять ( original_exc_info)Файл "/usr/local/lib/python3.6/dist-packages/six.py", строка 693, повторно поднимаетсяподнять стоимостьФайл "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", строка 1272, в процессевернуть self._sess.run ( аргументы, ** kwargs)
Файл "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", строка 1336, выполняется
feed_dict, параметры)
Файл "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", строка 1362, в _call_hook_before_run
request = hook.before_run (run_context)
Файл "/usr/local/lib/python3.6/dist-packages/tensorflow/contrib/gan/python/train.py", строка 1061, в before_run
run_context.session.run (self._train_ops)
Файл "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", строка 930, выполняется
run_metadata_ptr)
Файл "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", строка 1153, в _run
feed_dict_tensor, параметры, run_metadata)
Файл "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", строка 1329, в _do_run
run_metadata)
Файл "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", строка 1349, в _do_call
тип повышения (e) (node_def, op, message)
tensorflow.python.framework.errors_impl.UnknownError: не удалось получить алгоритм свертки. Вероятно, это связано с тем, что cuDNN не удалось инициализировать, поэтому попробуйте проверить, было ли напечатано предупреждение журнала выше.
[[узел Discriminator_1 / Conv / Conv2D (определено дома / dj / projects / gan / tf_models / research / gan / mnist / networks.py: 152)]]
[[поезд / discinator_train / train_op / control_dependency / _569]]

Ошибки могли быть вызваны операцией ввода.
Операции с источником ввода, подключенные к узлу Discriminator_1 / Conv / Conv2D:
input / batch / n (определено дома / dj / projects / gan / tf_models / research / gan / mnist / data_provider.py: 67)

Исходная трассировка стека для Discriminator_1 / Conv / Conv2D:
Файл "home / dj / projects / gan / tf_models / research / gan / mnist / train.py", строка 151, в
tf.app.run ()
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / python / platform / app.py», строка 125, выполняется
_sys.exit (основной (argv))
Файл "home / dj / projects / gan / tf_models / research / gan / mnist / train.py", строка 87, в основном
[FLAGS.batch_size, FLAGS.noise_dims]))
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / gan / python / train.py», строка 118, в gan_model
discinator_real_outputs = discinator_fn (реальные_данные, генератор_входы)
Файл "home / dj / projects / gan / tf_models / research / gan / mnist / networks.py", строка 176, в безусловном_дискриминаторе
net = _discriminator_helper (img, False, None, weight_decay)
Файл "home / dj / projects / gan / tf_models / research / gan / mnist / networks.py", строка 152, в _discriminator_helper
net = Layers.conv2d (img, 64, [4, 4], stride = 2)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / framework / python / ops / arg_scope.py», строка 182, в func_with_args
return func ( args, * current_args)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / Layers / python / Layers / Layers.py», строка 1155, в convolution2d
conv_dims = 2)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / framework / python / ops / arg_scope.py», строка 182, в func_with_args
return func ( args, * current_args)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / sizes / python / Layers / Layers.py», строка 1058, в свертке
output = layer.apply (входы)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / python / keras / engine / base_layer.py», строка 1228, в приложении
return self .__ call __ (входы, аргументы, * kwargs)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / python / Layers / base.py», строка 531, в __call__
output = super (Layer, self) .__ call __ (inputs, args, * kwargs)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / python / keras / engine / base_layer.py», строка 564, в __call__
выходы = self.call (входы, аргументы, * kwargs)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / python / keras / Layers / convolutional.py», строка 196, в вызове
output = self._convolution_op (входы, self.kernel)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py», строка 966, в __call__
вернуть self.conv_op (inp, filter)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py», строка 591, в __call__
вернуть self.call (inp, filter)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py», строка 208, в __call__
name = self.name)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py», строка 1578, в conv2d
имя = имя)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / gen_nn_ops.py», строка 1040, в conv2d
data_format = data_format, dilations = dilations, name = name)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / python / framework / op_def_library.py», строка 788, в _apply_op_helper
op_def = op_def)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / python / util / deprecation.py», строка 501, в new_func
return func ( args, * kwargs)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / python / framework / ops.py», строка 3300, в create_op
op_def = op_def)
Файл «usr / local / lib / python3.6 / dist-packages / tensorflow / python / framework / ops.py», строка 1801, в __init__
self._traceback = tf_stack.extract_stack ()

Есть идеи у кого-нибудь? Я как раз перед переустановкой всей моей среды :-(

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

Я пытался скомпилировать из исходного кода, но столкнулся с той же проблемой. Я, наконец, смог исправить свою проблему, установив config.gpu_options.allow_growth = True .

У меня была такая же проблема (на RTX 2060, Ubuntu 18.04, Python 3.6.7, CUDA 10.0.130, cuDNN 7.4.2, Tensorflow 1.13.0-rc0 из источника). Благодаря предложению @ va-andrew, он работает с установленным параметром allow_growth .

FWIW, в ходе поиска решения этой проблемы кажется, что эта проблема является общей проблемой для серии RTX (хотя это может быть общая проблема с CUDA 10.0, поскольку новые карты не поддерживают более старые версии). Было бы здорово, если бы значения по умолчанию могли быть обновлены в выпуске 1.13, чтобы не нужно было устанавливать специальные параметры для этих карт.

Подчеркивая, что я тоже испытал это при следующей конфигурации:

Контейнеры графического процессора Tensorflow Docker со стабильными выпусками всего также не работают (они выявляют segfault, а не сообщают CUDNN_STATUS_INTERNAL_ERROR).

Любопытно, что в Windows 10 с Tensorflow v1.12 все работает нормально!

И другие сообщали, что установка allow_growth позволяет всем работать правильно.

Здесь та же проблема.

  • RTX 2070
  • Ubuntu 18.04
  • CudNN 7.4.2 (но я безуспешно пытался скомпилировать с другими более старыми версиями)
  • Tensorflow 1.13.0-dev20190125 (также пробовал Tensorflow 1.12, скомпилированный с Cuda 10)

И, как сообщали другие, установка allow_growth = TRUE позволяет запускать вещи.

Закрытие этой проблемы, так как она решена. Благодаря!

@ymodak Не могли бы вы сослаться на PR, который исправил эту ошибку?

У меня аналогичная проблема с tf-nightly-gpu-2.0-preview на RTX 2080

Та же проблема с RTX2080, я потратил два дня на перекомпиляцию и поиск ошибок, пока не нашел это исправление.
(вещь allow_growth = true исправила это)

Вы сделали мой день

Как вы на самом деле устанавливаете allow_growth = true? У меня есть tf-nightly-gpu-2.0-preview, и я пробовал:

импортировать тензорный поток как tf
config = tf.ConfigProto ()
config.gpu_options.allow_growth = Истина
сессия = tf.Session (config = config, ...)

но получите эту ошибку:

AttributeError Traceback (последний вызов последним)
в()
1 импортировать тензорный поток как tf
----> 2 config = tf.ConfigProto ()

AttributeError: модуль tenorflow не имеет атрибута ConfigProto

Как установить allow_growth в tensorflow 2.0?

хорошо, заставил его работать в tf-nightly-gpu-2.0-preview и ipython notebook, добавив это в мой код:

из tensorflow.compat.v1 импорт ConfigProto
из tensorflow.compat.v1 импорт InteractiveSession

config = ConfigProto ()
config.gpu_options.allow_growth = Истина
сеанс = InteractiveSession (config = config)

та же проблема, с gpu_options.allow_growth = True проблема исправлена.

@newhouseb как / где вы установили это для всех тестов? Это было легко изменить?

Одеяло позволяет росту - это решение?

По умолчанию он выключен по причине, см.
https://www.tensorflow.org/guide/using_gpu#allowing_gpu_memory_growth

В моей программе управление памятью важно

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

Я работаю на C ++ под Windows

Добавление параметра разрешения роста приводит к ошибке OOM.

Без этой строки кода модель отлично работает на одной машине с той же картой.

С ошибкой OOM

options.config.mutable_gpu_options()->set_allow_growth(true);
options.config.mutable_gpu_options()->set_per_process_gpu_memory_fraction(fraction);

Без ошибки OOM

//options.config.mutable_gpu_options()->set_allow_growth(true);
options.config.mutable_gpu_options()->set_per_process_gpu_memory_fraction(fraction);

Итак, чтобы решить эту проблему с помощью set allow growth, вы получите ошибку segfault.

@ymodak Эта ошибка не исправлена. Возможно, использование любого типа свертки должно работать в конфигурации по умолчанию. Либо allow_growth должен быть true по умолчанию, он должен быть исправлен, чтобы это работало, либо должна быть ошибка лучше, чем CUDNN_STATUS_INTERNAL_ERROR .

@ymodak Похоже, этот вопрос был закрыт преждевременно. Хотя есть способ решения этой проблемы, он включает в себя изменение кода приложения. В результате код примера не работает _ вне коробки_ на картах RTX, и большинство рецептов в сети также потребуют модификации.

@samhodge не можете ли вы предотвратить OOM, используя config.gpu_options.per_process_gpu_memory_fraction = 0.4 как это предлагается на странице документации tenorflow, которую вы разместили сами?

Меня смущает этот логический хак, чтобы включить tensorflow-gpu на моем RTX 2080: будет ли это allow_growth = True проблемой, если я использую свой графический процессор только для одного скрипта тензорного потока / ноутбука jupyter за раз? (в дополнение к стандартному использованию графического процессора для экрана и т. д.)

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

Хорошо, я думаю, что нашел источник своих проблем, прежде чем создавать свой сеанс, я измеряю свободную ОЗУ графического процессора, поэтому, если я использую карту 8 ГБ, а 6 ГБ свободны, я использую долю 0,75, и иногда это заканчивается OOM, но недавно у меня экспериментировал с 0,95 * 0,75, и у меня еще нет OOM. Поэтому, если вы увеличиваете пространство для выделения Tensorflow до предела, он иногда конфликтует. Очевидно, что если входы и выходы для отдельного оператора не подходят, он будет OOM, но я измеряю это и будет использовать графический процессор или процессор в зависимости от того, что подходит.

@samhodge отлично, поэтому, в конце концов, логический хак allow_growth действительно предоставляет решение, если никакая основная операция графического процессора не запускается параллельно, и если то, что обрабатывается _ во время_ тензорным потоком (размер пакета будет критичным), не переполнить память, предоставленную графическим процессором ...?

Все использует графический процессор, даже ваш браузер

Возникла та же проблема на GTX 1050 с использованием tenorflow-gpu 1.13.1 из pip с драйвером CUDA 10.0 / cuDNN 7.4.2.24/Nvidia 410 / Ubuntu 16.04.

По-прежнему возникает та же проблема, но "config.gpu_options.allow_growth = True" не решает проблему. Бывает как на TF-gpu 1.14.1, так и на TF-gpu 2.0. RTX1070, CUDA 10.0, Ubuntu 18.04, драйвер Nvidia 430.09.

Описание проблем, которые вы видите, заставляет меня поверить, что (конкретная версия) cuDNN пытается выделить память графического процессора при создании дескриптора. Если TensorFlow уже занял всю память (либо потому, что config.gpu_options.allow_growth = false, либо per_process_gpu_memory_fraction близко к 1.0), памяти для cuDNN не осталось.

Вы можете подтвердить это, запустив TensorFlow через nvprof и сгенерировав трассировку API для проверки неудачного вызова cuMemAlloc.

В выпуске №6698 обсуждается та же проблема. Некоторые люди заметили, что они случайно использовали выпуск cuDNN, который не соответствует их версии CUDA. Не могли бы вы убедиться, что вы используете cuDNN для CUDA 10 при работе с CUDA 10?

Оказывается, у меня неправильно установлен cuDNN, потому что я большой дурак. Влез, переустановил TF2-nightly, добавил строчки, чтобы разрешить рост, и все хорошо.

Как удалить cudatoolkit и cudnn из Conda?

Поскольку cudnn, включенный в Anaconda (или встроенный), имеет следующую ошибку, я хочу удалить cudatoolkit и cudnn, установленные conda, и установить независимые CUDA и cudnn с веб-сайта Nvidia.

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

Однако, хотя я использую следующие команды, но не могу их удалить, я не могу их удалить.
conda remove --name cuda --all
conda remove --name cudnn --all

Я вижу, что два документа, включая cudatoolkit-10.0.130-0 и cudnn-7.3.1-cuda10.0.0_0 в пути как
следует.

/home/anaconda3/pkgs/cudatoolkit-10.0.130-0
/home/anaconda3/pkgs/cudnn-7.3.1-cuda10.0.0_0

Как я могу удалить (или удалить) cuda и cudnn, которые включены (или встроены) в Anaconda.

Заранее спасибо,

Майк

@ mikechen66 Какой вывод конды? Это может быть потому, что другие пакеты зависят от cuda и cudnn. Зачем вообще нужно их удалять? Если вы хотите получить настраиваемую среду, используйте miniconda, а не anaconda. Miniconda поставляется только с conda, и вам необходимо установить все необходимые пакеты вручную.

Привет, tydlwav:

Спасибо за ваш отзыв. После проверки совместимости версий и даты выпуска основных библиотек я установил соответствующие среды разработки, запустил простой тестовый код MNIST и получил следующие выходные данные.

Я думаю, что Anaconda3 не может даже поддерживать основные библиотеки cudnn и TensorFlow. Так что это большая проблема Anaconda3. Поэтому я хочу удалить легкие библиотеки cudnn из Anaconda и использовать независимые и мощные библиотеки Nvidia cuda и cudnn для запуска тестового кода. Пожалуйста, помогите дать несколько предложений.

  1. Среда установки

Nvidia GeForce RTX 2060
Графический драйвер: NVIDIA-Linux-x86_64-415.27 (15 января 2019 г.)
1-я версия с поддержкой RTX 2060
Anaconda3: Anaconda3-2019.03-Linux-x86_64.sh (04.04.2019)
- cudatoolkit-10.0.130-0
- cudnn-7.3.1-cuda10.0.0_0
- TensorFlow 13.1
- Блокнот Juputer и ipykernel
- по ошибке Ananconda3

  1. Код теста MNIST:

импортный керас
from keras.datasets import mnist
из keras.models импорт Последовательный
from keras.layers import Dense, Dropout
из keras.layers импортировать Flatten, MaxPooling2D, Conv2D
из keras.callbacks импортировать TensorBoard

(X_train, y_train), (X_test, y_test) = mnist.load_data ()

X_train = X_train.reshape (60000,28,28,1) .astype ('float32')
X_test = X_test.reshape (10000,28,28,1) .astype ('float32')

X_train / = 255
X_test / = 255

n_classes = 10
y_train = keras.utils.to_categorical (y_train, n_classes)
y_test = keras.utils.to_categorical (y_test, n_classes)

model = Последовательный ()
model.add (Conv2D (32, размер_ядра = (3,3), активация = 'relu', input_shape = (28,28,1)))
model.add (Conv2D (64, размер_ядра = (3,3), активация = 'relu'))
model.add (MaxPooling2D (размер_пул = (2,2)))
model.add (Выпадение (0,25))
model.add (Сглаживание ())
model.add (Dense (128, активация = 'relu'))
model.add (Выпадение (0,5))
model.add (Плотный (n_classes, активация = 'softmax'))

model.compile (loss = 'category_crossentropy', optimizer = 'adam', metrics = ['precision'])

tenor_board = TensorBoard ('./ журналы / LeNet-MNIST-1')

model.fit (X_train, y_train, batch_size = 128, epochs = 15, verbose = 1,
validation_data = (X_test, y_test), callbacks = [tenor_board])

  1. Выходы:

Использование бэкэнда TensorFlow.

ВНИМАНИЕ: тензорный поток : из /home/mike/anaconda3/envs/tf-gpu/lib/python3.7/site-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (из tensorflow.python.framework.ops ) устарел и будет удален в будущей версии.
Инструкция по обновлению:
Colocations обрабатываются автоматически россыпью.
ПРЕДУПРЕЖДЕНИЕ: tenorflow : из /home/mike/anaconda3/envs/tf-gpu/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:3445: выпадение вызова (из tensorflow.python.ops.nn_ops) with keep_prob устарел и будет удален в будущей версии.
Инструкция по обновлению:
Используйте rate вместо keep_prob . Ставка должна быть установлена ​​на rate = 1 - keep_prob .
ПРЕДУПРЕЖДЕНИЕ: тензорный поток : из /home/mike/anaconda3/envs/tf-gpu/lib/python3.7/site-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (из tensorflow.python.ops.math_ops ) устарел и будет удален в будущей версии.
Инструкция по обновлению:
Вместо этого используйте tf.cast.
Обучение на 60000 образцах, проверка на 10000 образцов
Эпоха 1/15

UnknownError Traceback (последний вызов последним)
в
34
35 model.fit (X_train, y_train, batch_size = 128, epochs = 15, verbose = 1,
---> 36 validation_data = (X_test, y_test), callbacks = [tensor_board])

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / engine / training.py in fit (self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, ** kwargs)
1037 initial_epoch = начальная_ эпоха,
1038 steps_per_epoch = steps_per_epoch,
-> 1039 validation_steps = validation_steps)
1040
1041 def оценить (self, x = None, y = None,

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / engine / training_arrays.py в fit_loop (model, f, ins, out_labels, batch_size, epochs, verbose, callbacks, val_f, val_ins, перемешать, callback_metrics, initial_epoch, steps_per_epoch, validation_steps)
197 ins_batch [i] = ins_batch [i] .toarray ()
198
-> 199 выходов = f (ins_batch)
200 аутов = to_list (аутов)
201 для l, o в zip (out_labels, out):

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / backend / tensorflow_backend.py в __call __ (себя, входы)
2713 return self._legacy_call (входы)
2714
-> 2715 return self._call (входы)
2716 еще:
2717, если py_any (is_tensor (x) для x во входных данных):

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / backend / tensorflow_backend.py в _call (себя, входы)
2673 получено = self._callable_fn ( массив_валидов, run_metadata = self.run_metadata)2674 еще:-> 2675 получено = self._callable_fn ( массив_валидов)
2676 получен ответ [: len (self.outputs)]
2677

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / tensorflow / python / client / session.py в __call __ (self, args, * kwargs)
1437 ret = tf_session.TF_SessionRunCallable (
1438 self._session._session, self._handle, args, status,
-> 1439 run_metadata_ptr)
1440, если run_metadata:
1441 proto_data = tf_session.TF_GetBuffer (run_metadata_ptr)

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / tensorflow / python / framework / errors_impl.py в __exit __ (self, type_arg, value_arg, traceback_arg)
526 Нет, Нет,
527 compat.as_text (c_api.TF_Message (self.status.status)),
-> 528 c_api.TF_GetCode (self.status.status))
529 # Удалить базовый объект статуса из памяти, иначе он останется живым
530 # поскольку есть ссылка на статус из этого из трассировки из-за

UnknownError: не удалось получить алгоритм свертки. Вероятно, это связано с тем, что cuDNN не удалось инициализировать, поэтому попробуйте проверить, было ли напечатано предупреждение журнала выше.
[[{{node conv2d_1 / convolution}}]]
[[{{node metrics / acc / Mean}}]]

Привет, tydlwav:

Я использую следующую команду для удаления cuda и cudnn. Однако обе библиотеки по-прежнему находятся в Anaconda3, хотя сейчас они не работают. Я предполагаю, что Anaconda3 намеревается защитить основные библиотеки от удаления. Это может быть основная возможность Continuum, даже если в нем есть ошибки. Я попытаюсь использовать либо независимую Nvdia cuda (без nvcc) и cudnn, либо найти новую cuda или cudnn с conda для установки.

Команда удаления:

conda удалить cudatoolkit

Сбор метаданных пакета: готово
Среда решения: сделано

План пакета

расположение среды: / home / mike / anaconda3 / envs / tf-gpu

удалены спецификации:
- cudatoolkit

Следующие пакеты будут УДАЛЕНЫ:

cudatoolkit-10.0.130-0
cudnn-7.3.1-cuda10.0_0
купти-10.0.130-0
керас-2.2.4-0
tenorflow-1.13.1-gpu_py37hc158e3b_0
tenorflow-base-1.13.1-gpu_py37h8d69cac_0
tenorflow-gpu-1.13.1-h0d30ee6_0

Продолжить ([y] / n)? y

Подготовка транзакции: сделано
Подтверждение транзакции: выполнено
Выполнение транзакции: выполнено

Ноты:

После того, как я удалил их оба, Jupyter Notebook показал "Нет модуля с именем" tensorflow ". Это означает, что удаление выполнено успешно. Однако и cudatoolkit, и cudnn все еще находятся в Anaconda3. Я думаю, что Continuum по умолчанию не удаляет их, хотя оба с ними не работает.

/home/anaconda3/pkgs/cudatoolkit-10.0.130-0
/home/anaconda3/pkgs/cudnn-7.3.1-cuda10.0.0_0

Вы их уже удалили. Файлы в pkgs предназначены для установки. Это загруженный кеш для установки. Кроме того, здесь не место обсуждать вопросы, связанные с окружающей средой. Это не имеет отношения к этому вопросу. Вы можете попробовать переполнение стека.

Меня немного смущает состояние этого вопроса. Я использую RTX 2080, cuda 10.1, cudnn v7.5.1.10 и tensorflow 1.14.

Использование разрешения на рост работает, но, может быть, у меня другое несоответствие версии?

Будет ли это исправлено в tensorflow 1.14?

Спасибо

Благодарю. Я вижу проблему совместимости между сериями RTX 20XX Turing, TensorFlow и Anaconda. Очевидно, что серия RTX 20XX поддерживает cudnn 7.5.0, TensorFlow поддерживает только cudnn 7.4, но Anaconda включает упрощенную версию 7.3.1, это полное несоответствие между тремя поставщиками. Кроме того, серия RTX 20XX имеет большую проблему совместимости с Ubuntu 16.04 LTS. Иногда происходил сбой Ubuntu 16.04. Чтобы переустановить ОС, мне пришлось принести две загрузочные флешки. Поэтому я обновил два ПК до Ubuntu 18.04 LTS и установил Miniconda. Тогда я попробую более старшую версию Tensorflow.

Ноты:

У Nvidia есть собственный Ubuntu 18.04 LTS для платформы Jetson TX1 / TX2 и Jetson Nano Mobile GPU. Nvidia, похоже, определяет свои новые продукты, такие как серия RTX 20XX, совместимостью с Ubuntu 18.04 LTS, а не с более низкой версией Ubuntu 16.04. Однако я не знаю, есть ли у Continuum план обновления для серии Nvidia RTX 20XX Turing.

На данный момент серии RTX хорошо поддерживаются. Я использовал tf с RTX 2070 через среду conda в дистрибутиве, отличном от ubuntu. Это должен быть наихудший сценарий, и он все еще работает нормально. Cuda и cudnn обратно совместимы, и это не должно быть проблемой, если вы используете более новые версии. Вам нужно просто создать новую среду Python 3.6 с conda create -n tf python==3.6.8 и запустить conda install tensorflow-gpu .

Это здорово. Я скомпилировал из исходного кода, и у меня были клиенты, работающие с Tensorflow 1.12.0 CUDA 10.0 и CUDNN 7.4.2.24 на большинстве оборудования, но у меня были проблемы с несколькими клиентами с картами RTX с CNN с cudnn на графическом процессоре. Возможно, я случайно упаковал неправильный CUDNN для CUDA 9.0, файлы имеют идентичные имена.

Может ли кто-нибудь подтвердить, что эти версии работают на RTX2080 и других картах на базе Turing?

Привет, tydlwav:

Я установил Miniconda и связанную среду python и tensorflow в соответствии с вашим предложением. Ошибка все еще есть: не удалось получить алгоритм свертки. Вероятно, это потому, что cuDNN не удалось инициализировать .......
Пожалуйста, помогите найти решение.

Пожалуйста, посмотрите шаги, которые я выполнял.

  1. Установите python 3.6.8 в соответствии с вашими рекомендациями.
    conda create -n tf python == 3.6.8

  2. активировать tf
    conda активировать tf

  3. установите tensorflow-gpu в среде tf в соответствии с вашими рекомендациями.
    conda установить tensorflow-gpu

Установленный пакет включает cudatoolkit и cudnn следующим образом.
.................................................. ..................................................
cudatoolkit pkgs / main / linux-64 :: cudatoolkit-10.0.130-0
cudnn pkgs / main / linux-64 :: cudnn-7.3.1-cuda10.0_0
.................................................. ..................................................

  1. установите jupyter notebook, ipykernel и связанную среду на веб-страницу.

1). установить ноутбук jupyter
conda установить ноутбук jupyter

2). установить ipykernel на основе ноутбука jupyter
conda установить ipykernel jupyter

3). создать TensorFlow-GPU на веб-странице ноутбука jupyter
python -m ipykernel install --user --name tf-gpu --display-name "TensorFlow-GPU"

  1. Откройте блокнот jupyter
    1). на веб-страницу записной книжки jupyter
    ноутбук jupyter

2). Щелкните TensorFlow-GPU
Если щелкнуть по меню «новый» и выбрать «TensorFlow-GPU» на веб-странице, ячейка отобразится на веб-странице ноутбука jupyter. Веб-страница указана ниже.
http: // локальный : 8888 / ноутбуки / Untitled3.ipynb? имя_ядра = tf-gpu

  1. Вставить Выполнить простой тестовый код MNIST

импортный керас
from keras.datasets import mnist
из keras.models импорт Последовательный
from keras.layers import Dense, Dropout
из keras.layers импортировать Flatten, MaxPooling2D, Conv2D
из keras.callbacks импортировать TensorBoard

(X_train, y_train), (X_test, y_test) = mnist.load_data ()

X_train = X_train.reshape (60000,28,28,1) .astype ('float32')
X_test = X_test.reshape (10000,28,28,1) .astype ('float32')

X_train / = 255
X_test / = 255

n_classes = 10
y_train = keras.utils.to_categorical (y_train, n_classes)
y_test = keras.utils.to_categorical (y_test, n_classes)

model = Последовательный ()
model.add (Conv2D (32, размер_ядра = (3,3), активация = 'relu', input_shape = (28,28,1)))
model.add (Conv2D (64, размер_ядра = (3,3), активация = 'relu'))
model.add (MaxPooling2D (размер_пул = (2,2)))
model.add (Выпадение (0,25))
model.add (Сглаживание ())
model.add (Dense (128, активация = 'relu'))
model.add (Выпадение (0,5))
model.add (Плотный (n_classes, активация = 'softmax'))

model.compile (loss = 'category_crossentropy', optimizer = 'adam', metrics = ['precision'])

tenor_board = TensorBoard ('./ журналы / LeNet-MNIST-1')

model.fit (X_train, y_train, batch_size = 128, epochs = 15, verbose = 1,
validation_data = (X_test, y_test), callbacks = [tenor_board])

  1. Ошибки такие же, как и в последнем сообщении:

UnknownError: не удалось получить алгоритм свертки. Вероятно, это связано с тем, что cuDNN не удалось инициализировать, поэтому попробуйте проверить, было ли напечатано предупреждение журнала выше.
[[{{node conv2d_1 / convolution}}]]
[[{{node metrics / acc / Mean}}]]

Благодаря,

Майк

Привет tydlwav:

Кстати, я также установил keras с помощью следующей команды.
conda установить keras-gpu

Поскольку установка выполняется правильно, у меня возникает ошибка. Поэтому я предполагаю, что это проблема совместимости версий Miniconda и серии RTX20XX Turing. Ошибка такая же, как у Anaconda. Я узнал, что версии cudnn и cuda в Miniconda и Anaconda одинаковы.

Это довольно интересно. Я получил cuda 10 и cudnn7.3, работающие с conda около полутора месяцев назад. С тех пор я не использовал тензорный поток. Если это не сработает, вы можете собрать из исходников. У меня это всегда работает. Если вы только начинаете, я бы рекомендовал использовать pytorch. Вам будет намного проще установить и заставить все работать.

Привет, tydlwav:

Я попробую другой метод, например, pytorch. Теперь, когда Google выпускает tensorflow-gpu 1.14, могу ли я использовать Miniconda для установки независимого tenorflow-gpu 1.14 на веб-сайте Google Tensorflow следующим образом.

Google tensorflow: https://www.tensorflow.org/install/source

Ноты:

Conda имеет только сборки tensorflow-gpu от 1.0.1 до 1.13.1 следующим образом. Сборки настолько старые, что сборки не могли догнать официальный Google TensorFlow и официальную серию Truing Nvidia GeForce RTX 20XX (2060 ~ 2080).

Команда:
conda search tenorflow-gpu

Загрузка каналов: готово

Название Версия Build Channel
tensorflow-gpu 1.0.1 py27_4 пакетов / бесплатно
tensorflow-gpu 1.0.1 py35_4 пакетов / бесплатно
tensorflow-gpu 1.0.1 py36_4 пакетов / бесплатно
tensorflow-gpu 1.1.0 np111py27_0 пакетов / бесплатно
tensorflow-gpu 1.1.0 np111py35_0 пакетов / бесплатно
tensorflow-gpu 1.1.0 np111py36_0 пакетов / бесплатно
tensorflow-gpu 1.1.0 np112py27_0 пакетов / бесплатно
tensorflow-gpu 1.1.0 np112py35_0 пакетов / бесплатно
tensorflow-gpu 1.1.0 np112py36_0 пакетов / бесплатно
tensorflow-gpu 1.2.1 py27cuda7.5cudnn5.1_0 пакетов / бесплатно
tensorflow-gpu 1.2.1 py27cuda7.5cudnn6.0_0 пакетов / бесплатно
tensorflow-gpu 1.2.1 py27cuda8.0cudnn5.1_0 пакетов / бесплатно
tensorflow-gpu 1.2.1 py27cuda8.0cudnn6.0_0 пакетов / бесплатно
tensorflow-gpu 1.2.1 py35cuda7.5cudnn5.1_0 пакетов / бесплатно
tensorflow-gpu 1.2.1 py35cuda7.5cudnn6.0_0 пакетов / бесплатно
tensorflow-gpu 1.2.1 py35cuda8.0cudnn5.1_0 пакетов / бесплатно
tensorflow-gpu 1.2.1 py35cuda8.0cudnn6.0_0 пакетов / бесплатно
tensorflow-gpu 1.2.1 py36cuda7.5cudnn5.1_0 пакетов / бесплатно
tensorflow-gpu 1.2.1 py36cuda7.5cudnn6.0_0 пакетов / бесплатно
tensorflow-gpu 1.2.1 py36cuda8.0cudnn5.1_0 пакетов / бесплатно
tensorflow-gpu 1.2.1 py36cuda8.0cudnn6.0_0 пакетов / бесплатно
tenorflow-gpu 1.3.0 0 упаковок / бесплатно
tenorflow-gpu 1.4.1 0 пакетов / основной
tenorflow-gpu 1.5.0 0 пакетов / основной
tenorflow-gpu 1.6.0 0 пакетов / основной
tenorflow-gpu 1.7.0 0 пакетов / основной
tenorflow-gpu 1.8.0 h7b35bdc_0 пакетов / основных
tenorflow-gpu 1.9.0 hf154084_0 пакетов / основной
tenorflow-gpu 1.10.0 hf154084_0 пакетов / основной
tenorflow-gpu 1.11.0 h0d30ee6_0 пакетов / основной
tenorflow-gpu 1.12.0 h0d30ee6_0 пакетов / основной
tenorflow-gpu 1.13.1 h0d30ee6_0 пакетов / основной

Они не старые, так как я использовал версию tf 1.12 от conda с RTX 2070. Новое оборудование обычно обратно совместимо, и RTX ничем не отличается. Скорее всего, здесь есть какая-то странная проблема с окружающей средой. У меня нет доступа к RTX-машине до июля, поэтому я не могу помочь с тестированием прямо сейчас. Сборка из исходников должна решить вашу проблему. Мне никогда не удавалось запустить свертки из tf, построенного из исходников (при условии, что во время сборки у вас есть правильные конфигурации).

И снова здесь не место обсуждать проблему распределения тензорного потока. Вы можете сделать сообщение о переполнении стека или Reddit и связать его здесь. Больше людей смогут увидеть это и помочь вам в этом.

Ваша проблема не является ошибкой, и это определенно не то, что обсуждается в этой проблеме.

@chsigg вы диагностировали, что это проблема с попыткой CUDNN выделить ресурсы памяти графического процессора, которые уже выделил тензорный поток, мне кажется правильным. Простая установка per_process_gpu_memory_fraction=0.9 вместо 0.95 была достаточной для решения моих проблем.

Я тоже столкнулся с этой проблемой. Исправлено обновлением cuDNN до версии 7.6.

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

Tensorflow-gpu: 1.13.1
Cuda: 10.0
CuDNN: 7.3.1

Кроме того, Conda установила tensorflow и CuDNN.
conda list cudnn

cudnn                     7.3.1                cuda10.0_0    anaconda

Что я сделал:

  1. Неустановленный conda tensorflow.
    conda remove tensorflow
  2. Удалите conda cuDNN
    conda remove cudnn
  3. Установите tenorflow с помощью pip
    pip install tensorflow
  4. Загрузите соответствующий deb-файл среды выполнения cuDNN 7.6 с https://developer.nvidia.com/cudnn
  5. Установите его с помощью sudo dpkg -i libcudnn_xxxxx_amd64.deb

@nluehr есть комментарии? Можем ли мы сделать так, чтобы MinSystemMemory () узнала о версии cuda / cudnn?

Это допустимая ошибка памяти, если вы используете tf.keras, выполните следующие действия в верхней части файла
config = tf.ConfigProto ()
config.gpu_options.allow_growth = Истина
tf.keras.backend.set_session (tf.Session (config = config))

Я также столкнулся с этой проблемой и смог решить ее с помощью решения @ va-andrew, в частности, я использовал реализацию @colinsteidtmann , так как я использую в своем коде некоторые из функций tensorflow.keras. Я потратил много времени, пытаясь решить эту проблему, поэтому спасибо вам обоим за ваш вклад.

РЕДАКТИРОВАТЬ: я просто смотрел документацию по тензорному потоку (https://www.tensorflow.org/guide/using_gpu), и вы также можете указать ему, чтобы он разрешил рост памяти, установив для переменной среды TF_FORCE_GPU_ALLOW_GROWTH значение true. Также говорится, что эта конфигурация зависит от платформы, поэтому YMMV (у меня работает с Ubuntu 18.04).

Для справки бегу:
Ubuntu 18.04.2 LTS, Gigabyte GeForce RTX 2080 Turbo, драйвер NVIDIA 430.26, CUDA 10.0.130, cuDNN 7.4.2.24, tensorflow-gpu 1.13.1, python 3.6. Я запускаю тензорный поток из виртуальной среды, используя spyder 3.3.4.

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

У меня есть 3-й компьютер с точно таким же оборудованием, за исключением того, что у него 2080 Ti вместо 2080, и я настроил его, следуя тому же набору инструкций, и снова использовал те же файлы для установки. Но на этот раз проблем не было.

Итак, меня заставили поверить, что это не связано с каким-то конфликтом между CUDA, cuDNN и версией драйвера; это не некорректно выполненная установка и т.д. Скорее это связано с моделью видеокарты; Я видел упоминание об этой проблеме только с RTX 2060, 2070 и 2080.

К счастью, использование обходного пути не представляет большого неудобства.

Я тоже столкнулся с этой проблемой. Исправлено обновлением cuDNN до версии 7.6.

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

Тензорный поток: 1.13.1
Cuda: 10.0
CuDNN: 7.3.1

Кроме того, Conda установила tensorflow и CuDNN.
conda list cudnn

cudnn                     7.3.1                cuda10.0_0    anaconda

Что я сделал:

1. Uninstalled conda tensorflow.
   `conda remove tensorflow`

2. Uninstall conda cuDNN
   `conda remove cudnn`

3. Install tensorflow with pip
   `pip install tensorflow`

4. Download corresponding cuDNN 7.6 runtime deb file from https://developer.nvidia.com/cudnn

5. Install it with `sudo dpkg -i libcudnn7_-1+cuda9.0_amd64.deb`

@ alexforever86 Вы уверены, что после обновления вы работаете на своем графическом процессоре, а не на процессоре? Кажется, вы использовали графический процессор до того, как выполнили обновление (из-за сообщения об ошибке со ссылкой на cuDNN), но мне интересно, что произойдет после. Вы используете «pip install tensorflow», но это должно быть «pip install tensorflow-gpu», не так ли? Кроме того, вы сказали, что используете CUDA 10, но указанный вами deb-файл cuDNN предназначен для cuda9.0, так что это не должно работать.

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

@ synapse8 Вы абсолютно правы насчет tenorflow-gpu и версии cuDNN. Меня тоже сейчас очень смущает мой комментарий, и я больше не помню деталей. В любом случае, ниже приведены текущие версии в моей системе.

pip show tensorflow-gpu
Имя: tensorflow-gpu
Версия: 1.13.1

nvidia-smi
NVIDIA-SMI 430.26 Версия драйвера: 430.26 Версия CUDA: 10.2

sudo apt search cudnn | grep installed
libcudnn7 / сейчас 7.6.0.64-1 + cuda10.0 amd64

@ alexforever86 с конфигурацией, которую вы упомянули сейчас, вы все еще видите эту проблему? (Я полагаю, это работает для вас). Я недавно установил систему с cuda10, драйвером 410, 7.6 cudnn и TF-gpu 1.14 (pip install) и не заметил проблемы.

@ robzor92 Я использовал tenorflow-gpu 1.13, и из любопытства я только что установил 1.14, чтобы проверить, решило ли это проблему (для меня). Я все еще получаю сообщение об ошибке, и мне все еще нужно сделать обходной путь «разрешить рост» (опять же, не так уж и важно).

Какую видеокарту вы используете?

@ synapse8 Пробовал с GTX 1070.

@ synapse8 Я также попробовал пример кода, предоставленный создателем этого потока только что, он работал без проблем. Однако я бы не стал утверждать, что это проблема только линейки RTX, поскольку я видел ту же проблему на GTX 1050Ti с TF 1.13.1. Используя ту же комбинацию driver / cuda / cudnn, которую я опубликовал ранее.

@ robzor92 Я сомневаюсь, что проблема 1050Ti в маленьком размере видеопамяти. Карты RTX встретятся с этим на базовых моделях CNN MNIST. Я сомневаюсь, что настройка NVIDIA распределения VRAM на RTX-картах как-то все испортила.

У меня такая же ошибка на tensorflow 1.14.0 и RTX2080. Но в моем случае эта ошибка возникает только тогда, когда я использую сверточный слой.

2019-07-14 21:48:13.041683: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2019-07-14 21:48:13.064262: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 3600000000 Hz
2019-07-14 21:48:13.064955: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55abe99bcd30 executing computations on platform Host. Devices:
2019-07-14 21:48:13.064967: I tensorflow/compiler/xla/service/service.cc:175]   StreamExecutor device (0): <undefined>, <undefined>
2019-07-14 21:48:13.066219: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcuda.so.1
2019-07-14 21:48:13.153748: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-07-14 21:48:13.154195: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55abebb44f00 executing computations on platform CUDA. Devices:
2019-07-14 21:48:13.154207: I tensorflow/compiler/xla/service/service.cc:175]   StreamExecutor device (0): GeForce RTX 2080, Compute Capability 7.5
2019-07-14 21:48:13.154317: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-07-14 21:48:13.154707: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1640] Found device 0 with properties: 
name: GeForce RTX 2080 major: 7 minor: 5 memoryClockRate(GHz): 1.71
pciBusID: 0000:01:00.0
2019-07-14 21:48:13.154845: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.0
2019-07-14 21:48:13.155504: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcublas.so.10.0
2019-07-14 21:48:13.156112: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcufft.so.10.0
2019-07-14 21:48:13.156265: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcurand.so.10.0
2019-07-14 21:48:13.157040: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcusolver.so.10.0
2019-07-14 21:48:13.157646: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcusparse.so.10.0
2019-07-14 21:48:13.159661: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudnn.so.7
2019-07-14 21:48:13.159730: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-07-14 21:48:13.160165: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-07-14 21:48:13.160542: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1763] Adding visible gpu devices: 0
2019-07-14 21:48:13.160559: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.0
2019-07-14 21:48:13.161120: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1181] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-07-14 21:48:13.161129: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1187]      0 
2019-07-14 21:48:13.161133: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1200] 0:   N 
2019-07-14 21:48:13.161331: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-07-14 21:48:13.161730: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-07-14 21:48:13.162120: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6794 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2080, pci bus id: 0000:01:00.0, compute capability: 7.5)
2019-07-14 21:48:13.497639: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudnn.so.7
2019-07-14 21:48:14.077729: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2019-07-14 21:48:14.080055: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
Traceback (most recent call last):
  File "test.py", line 16, in <module>
    print(model.predict(test_inputs))
  File "/home/yudai/.local/share/virtualenvs/pipenv_practice-DKmRVcs4/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py", line 1078, in predict
    callbacks=callbacks)
  File "/home/yudai/.local/share/virtualenvs/pipenv_practice-DKmRVcs4/lib/python3.7/site-packages/tensorflow/python/keras/engine/training_arrays.py", line 363, in model_iteration
    batch_outs = f(ins_batch)
  File "/home/yudai/.local/share/virtualenvs/pipenv_practice-DKmRVcs4/lib/python3.7/site-packages/tensorflow/python/keras/backend.py", line 3292, in __call__
    run_metadata=self.run_metadata)
  File "/home/yudai/.local/share/virtualenvs/pipenv_practice-DKmRVcs4/lib/python3.7/site-packages/tensorflow/python/client/session.py", line 1458, in __call__
    run_metadata_ptr)
tensorflow.python.framework.errors_impl.UnknownError: 2 root error(s) found.
  (0) 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 conv2d/Conv2D}}]]
  (1) 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 conv2d/Conv2D}}]]
     [[flatten/Reshape/_7]]
0 successful operations.
0 derived errors ignored.

Я пробовал config.gpu_options.allow_growth = True , но это не решает эту ошибку.

Я хочу, чтобы кто-нибудь мне помог.

Спасибо.

Та же проблема с RTX 2070

Я сделал интересное наблюдение по этому поводу, которое может помочь отследить эту ошибку или найти жизнеспособное решение:
Я также получаю ошибку Failed to get convolution algorithm со ссылкой на Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR .
Система: ноутбук с Nvidia Quadro P2000, Ubuntu 18.04, tf 1.13.1, cuda10, cudnn 7.4.2
Как уже упоминалось, я могу гладко запустить программу, используя allow_growth , так что спасибо за это, для меня достаточно.

Интересно: я получаю эту ошибку только при использовании tf.layers.conv... но переключение на tf.keras.layers.... позволяет программе работать без allow_growth , поэтому что-то в коде keras, кажется, работает лучше, чем в tf код. Может быть, кто-нибудь сможет использовать эту информацию, чтобы найти решение от keras.
На данный момент я придерживаюсь tf.layers, поскольку они обеспечивают легкое распределение веса с помощью переменных областей видимости, которые, к сожалению, не поддерживаются keras.

@ DavidS3141 Это интересно. В моем случае единственный слой свертки не работает как в tf.layers, так и в tf.keras.layers ...

Когда я использую pytorch, torch.cuda.is_available имеет значение True и может без проблем использовать сверточный слой, поэтому я считаю, что причиной является тензорный поток, но я не знаю, что не так.

Я согласен с @ Hayashi-Yudai: То же самое и с MXNet. Идентичная конфигурация отлично работает при сбое Tensorflow.

Окружающая обстановка:
RTX2080
Ubuntu 18.10
Драйвер 430.26
CUDA 10.0 (также 10.1, который еще не поддерживается TF)
cuDNN 7.6.1
mxnet-cu100 1.4.1
tenorflow-gpu 1.14.0

Привет, ребята, я использую веса из предварительно обученной модели с магистралью ResNet50 в наборе данных COCO для обучения на моем наборе данных CSV. Я получаю эту ошибку: Неизвестно: не удалось получить алгоритм свертки.
- размер партии 7 - этапы 9 - этапы 4
--snapshot-path снимки --tensorboard-dir tensorboard
csv dataset / train.csv dataset / classes.csv Я попытался решить проблему с помощью следующего скрипта в командной строке в виртуальной среде:
питон

импорт тензорного потока

из tensorflow.compat.v1 импорт ConfigProto
из tensorflow.compat.v1 импорт InteractiveSession
config = ConfigProto ()
config.gpu_options.allow_growth = Истина
сеанс = InteractiveSession (config = config)

так же как
импортировать тензорный поток как tf
config = tf.ConfigProto ()
config.gpu_options.allow_growth = Истина
session = tf.Session (config = config), но это не устранило мою ошибку .:

Я использую: -
Ubuntu 16.0
Cuda: 10.0
Тензорфлоу 1.14.0

Ошибка:
tensorflow.python.framework.errors_impl.UnknownError: обнаружены 2 корневые ошибки. │ | Запущенных процессов не найдено |
(0) Неизвестно: не удалось получить алгоритм свертки. Вероятно, это связано с тем, что cuDNN не удалось инициализировать, поэтому попробуйте проверить, появляется ли предупреждение │ + ------------------------------- ---------------------------------------------- +
сообщение журнала было напечатано выше. │
[[{{узел свертки / свертки}}]] │
[[loss / add / _2377]] │
(1) Неизвестно: не удалось получить алгоритм свертки. Вероятно, это связано с тем, что cuDNN не удалось инициализировать, поэтому попробуйте проверить, появляется ли предупреждение │
сообщение журнала было напечатано выше. │
[[{{node conv1 / convolution}}]] │
0 успешных операций. │
0 производных ошибок игнорируются. │
завершение вызова без активного исключения │
Прервано (ядро выгружено)
Любая помощь будет оценена.

Здесь та же проблема. Обходной путь Allow_growth работает. В противном случае я получаю эту ошибку в самом простом наборе данных MNIST tensorflow.

RTX2060 mobile здесь.

Проблема возникает с скомпилированным тензорным потоком из ветки r2.0, а также с TF 1.4, установленным через conda с помощью conda (tensorflow-gpu).

@ Хаяси-Юдай

Я пробовал config.gpu_options.allow_growth = True, но это не решает эту ошибку.

Какие именно команды вы добавили в свой код? Вместо этого попробуйте следующее, если оно другое ...

config = tf.ConfigProto ()
config.gpu_options.allow_growth = Истина
tf.keras.backend.set_session (tf.Session (config = config))

@ synapse8 Спасибо за ваш комментарий. Я попробовал, но результат был тот же.

Кстати, я попробовал nvidia-docker и все прошло хорошо, за исключением того, что версия python - 3.5.
https://docs.nvidia.com/deeplearning/frameworks/tensorflow-release-notes/running.html#running

Дополнительная информация, если вы не против использования python 3.6.8 и tensorflow-gpu 1.12.0, вы можете использовать anaconda.

conda create -n <virtual env name> python=3.6.8
conda install tensorflow-gpu==1.12.0
conda install cudnn==7.3.1    # By default, cudnn7.6 is installed but it causes the error

Я тестировал сборку tf-2.0.0-beta1 из источников с CUDA-10.1 и CUDNN-7.6.2.4, и ошибка не проявлялась.

Вы можете найти образы докеров для создания пакета tf-gpu и пакета tf-base здесь:
https://github.com/edowson/docker-tensorflow

На канале анаконды нет cudnn==7.6.2 на момент написания этого комментария.

Windows 7 долго билась головой об стену за Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR пытаясь запустить новую машину.

Переустановки и многое другое в этом и других потоках не исправили.

При тестировании того, что отсутствие cudnn64_7.dll приведет к другой ошибке, чем CUDNN_STATUS_INTERNAL_ERROR я переименовал dll. Убедившись, что это ошибка типа CUDNN NOT INSTALLED , я отменил изменение имени файла.

Волшебным образом все заработало.

Не знаю, почему и как, но это так. Надеюсь, это поможет кому-то другому. В противном случае попытка займет всего несколько секунд.

Я обнаружил, что эта проблема была вызвана тем, что я ошибочно сделал два вызова tf.Session

sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

# several lines of code later...

sess = tf.Session(config=config)

Вероятно, это не основная причина для большинства людей, но, возможно, на это стоит обратить внимание.

Просто чтобы поделиться "allow_growth = True" решает проблему для моей системы ниже
RTX 2080ti, ubuntu18.04, cuda9.0, cudnn7, tf1.9

config = tf.ConfigProto ()
config.gpu_options.allow_growth = Истина
сессия = tf.Session (config = config)

Это связано с долей памяти, доступной для загрузки ресурсов GPU для создания дескриптора cudnn, также известного как per_process_gpu_memory_fraction .
Уменьшение этой доли памяти самостоятельно решит ошибку.

> sess_config = tf.ConfigProto(gpu_options =
> tf.GPUOptions(per_process_gpu_memory_fraction=0.7),
> allow_soft_placement = True)
> 
> with tf.Session(config=sess_config) as sess:
>      sess.run([whatever])

Используйте как можно меньшую дробь, сколько поместится в вашей памяти. (В коде я использую 0,7, вы можете начать с 0,3 или даже меньше, а затем увеличивать, пока не получите ту же ошибку, это ваш предел.)
Передайте его tf.Session() или tf.train.MonitoredTrainingSession() или sv.managed_session() супервизора в качестве конфигурации.

Это должно позволить вашему графическому процессору создать дескриптор cudnn для вашего кода TensorFlow.

Как объясняется здесь , новый подход в TF 2.0 для установки config.gpu_options.allow_growth = True :

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  # Currently, memory growth needs to be the same across GPUs
  try:
    for gpu in gpus:
      tf.config.experimental.set_memory_growth(gpu, True)
  except RuntimeError as e:
    print(e)

С этим фрагментом кода и TF 2.0 RC1 ошибка больше не появляется.
Однако из-за большого количества людей, у которых есть графический процессор Nvidia 20XX, я думаю, что было бы неплохо решить эту проблему изначально до выпуска финальной версии TF 2.0.

У меня была такая же проблема с 1080Ti и TitanX на TF1.4, и предложения от @ va-andrew и @oscarlinux спасли положение! Это в первую очередь напоминает мне, почему я перешел на pytorch и больше не вернусь. К сожалению, все еще есть люди, использующие TF ... так что мне все еще приходится испытывать эту боль всякий раз, когда я использую их кодовую базу ... может быть, пора немного поиграть с ONNX.

Для всех, кто обнаружит это после обновления до tensorflow 2.0, API и код немного отличаются.

Ubuntu 18
Tensorflow 2.0
Tensorflow-gpu 2.0
GeForce RTX 2070

Обновленный код для этой системы.

import tensorflow as tf
config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.compat.v1.Session(config=config)

Это решение сработало для меня. (TF-GPU 2.0, Windows 10, GeForce RTX 2070)

physical_devices = tf.config.experimental.list_physical_devices('GPU')
assert len(physical_devices) > 0, "Not enough GPU hardware devices available"
tf.config.experimental.set_memory_growth(physical_devices[0], True)

Добавьте дополнительную точку данных .:
rtx 2080ti, ubuntu18.04, cuda10.0, cudnn7
В моем случае не работает ни с tf1.14, ни с 1.15rc3

@ w4nderlust , для версий 1.14 и 1.15 вы захотите продолжить установку параметра конфигурации сеанса config.gpu_options.allow_growth = True . Это то, о чем вы сообщаете, не работает, или просто механизм tf.config.experimental ?

@ w4nderlust , для версий 1.14 и 1.15 вы захотите продолжить установку параметра конфигурации сеанса config.gpu_options.allow_growth = True . Это то, о чем вы сообщаете, не работает, или просто механизм tf.config.experimental ?

Извините, надо было быть более точным, я сообщаю, что без config.gpu_options.allow_growth = True он по-прежнему не работает в моей конфигурации как с 1.14, так и с 1.15rc3.

Я думаю, что нашел лучший способ обхода, чем config.gpu_options.allow_growth = True .

Для моей настройки (_RTX 2070_, docker image _tensorflow: 1.15.0-gpu-py3_) установка конфигурации, как показано ниже, позволяет избежать _CUDNN_STATUS_INTERNAL_ERROR_, при этом выделяя всю память графического процессора .
Это очень полезно для больших моделей, которые не помещаются в память в режиме allow_growth а подходят только при выделении всей памяти.

Чтобы выделить всю память на RTX:
config.gpu_options.per_process_gpu_memory_fraction = 1.0

Чтобы выделить всю память на RTX:
config.gpu_options.per_process_gpu_memory_fraction = 1.0

@PoloShock
Я пробовал это с TF 2.0, и похоже, что это не работает.
Ubuntu18.04, RTX 2080, CUDA10, cudnn 7.6.

Для TF 2.0 изменился API для ограничения использования памяти GPU.

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

tf.config.experimental.set_virtual_device_configuration(gpus[0], [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=1024)]

@nluehr , ты понимаешь, почему эта проблема проявляется только в RTX? Может быть, потому, что у нас есть другие приложения, использующие его в качестве графического процессора дисплея одновременно с TensorFlow?

Мне сложно отладить это напрямую, потому что у меня нет доступа к графическому процессору RTX.

@sanjoy Я использую дисплей на встроенном

Я пробовал использовать это для tensorflow 2.0:

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

Он исправляет ошибку cudnn на моем rtx2080, но обучение проходит так же быстро, как мой 1050Ti на моем ноутбуке!
Во время обучения CNN:

Tue Nov 12 19:22:35 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.26       Driver Version: 440.26       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 2080    Off  | 00000000:2D:00.0 Off |                  N/A |
|  0%   37C    P2    75W / 265W |   2904MiB /  7979MiB |     27%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1026      G   /usr/lib/Xorg                                200MiB |
|    0      6420      G   cinnamon                                      43MiB |
|    0     21073      C   /home/clementpoiret/anaconda3/bin/python    2647MiB |
+-----------------------------------------------------------------------------+

Добавление

gpus = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_virtual_device_configuration(gpus[0], [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=7000)]

Не решил проблему, без allow_growth я получаю ошибку cudnn, и в любом случае мой RTX использует только что-то вроде 3Gb или памяти.

Есть идеи ?

Я старался

    gpus = tf.config.experimental.list_physical_devices('GPU')
    tf.config.experimental.set_memory_growth(gpus[0], True)
    tf.config.experimental.set_virtual_device_configuration(
        gpus[0],
        [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=7900)])

но cudnn все еще выдает ошибку

Я также получаю эту ошибку, работающую в образе Docker tenorflow 1.15.0-py3-gpu (Ubuntu 18.04) с двумя графическими процессорами Titan V (@sanjoy), а не с RTX. Однако эта ошибка, похоже, возникает у меня только на моем GPU0, который имеет Xorg и gnome-shell, использующий память GPU0, в то время как GPU1 имеет только python с использованием памяти GPU и не вызывает эту ошибку. Ошибка также, к сожалению, временная - иногда мне удается удалить контейнер докера, воссоздать его с теми же настройками и тем же кодом, а затем ошибка исчезнет. Или нет.

Я смог исправить это, используя бэкэнд-интерфейс Keras:

import tensorflow as tf

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
allow_growth_session = tf.Session(config=config)
tf.keras.backend.set_session(allow_growth_session)

Ниже приведен мой nvidia-smi на обоих графических процессорах.

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.26       Driver Version: 440.26       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  TITAN V             Off  | 00000000:01:00.0  On |                  N/A |
| 46%   63C    P2    51W / 250W |   7936MiB / 12065MiB |     31%      Default |
+-------------------------------+----------------------+----------------------+
|   1  TITAN V             Off  | 00000000:02:00.0 Off |                  N/A |
| 52%   70C    P2   131W / 250W |  12014MiB / 12066MiB |     60%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1564      G   /usr/lib/xorg/Xorg                            56MiB |
|    0      1607      G   /usr/bin/gnome-shell                          58MiB |
|    0      2428      G   /usr/lib/xorg/Xorg                           442MiB |
|    0      2574      G   /usr/bin/gnome-shell                         289MiB |
|    0      3292      G   ...p/pycharm-professional/167/jbr/bin/java    12MiB |
|    0      6794      G   anki                                          60MiB |
|    0     10336      G   /usr/lib/firefox/firefox                       6MiB |
|    0     16986      C   python                                      6981MiB |
|    1      4057      C   python                                     12001MiB |
+-----------------------------------------------------------------------------+

У меня та же проблема, что и у @clementpoiret с TF 2.0, установленным через conda. При использовании флага allow_growth проблема исчезает, но это также делает обучение очень медленным, медленнее, чем то, что было у меня на TF 1.x ... Сначала жадно, а?

@clementpoiret и @EKami , ускоряет ли тренировка, если вы замените config.gpu_options.allow_growth = True на config.gpu_options.per_process_gpu_memory_fraction = 0.8 ? Вы можете поэкспериментировать, чтобы увидеть, какая фракция наиболее эффективно использует ваш графический процессор.

@ synapse8 Я не вижу чего-то эквивалентного в документации по тензорному потоку 2.0, каким-либо способом сделать это с помощью tf.config.experimental?

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

import subprocess
import tensorflow as tf


def get_gpus_memory():
    """Get the max gpu memory.

    Returns
    -------
    usage: list
        Returns a list of total memory for each gpus.
    """
    result = subprocess.check_output([
        "nvidia-smi", "--query-gpu=memory.total",
        "--format=csv,nounits,noheader"
    ]).decode("utf-8")

    gpus_memory = [int(x) for x in result.strip().split("\n")]
    return gpus_memory


def setup_gpus(allow_growth=True, memory_fraction=.9):
    """Setup GPUs.

    Parameters:
    allow_growth (Boolean)
    memory_fraction (Float): Set maximum memory usage, with 1 using
        maximum memory
    """
    gpus = tf.config.experimental.list_physical_devices("GPU")
    if gpus:
        try:
            # Currently, memory growth needs to be the same across GPUs
            for i, gpu in enumerate(gpus):
                memory = get_gpus_memory()[i]

                tf.config.experimental.set_memory_growth(gpu, allow_growth)

                # Setting memory limit to max*fraction
                tf.config.experimental.set_virtual_device_configuration(
                    gpu, [
                        tf.config.experimental.VirtualDeviceConfiguration(
                            memory_limit=memory * memory_fraction)
                    ])

                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)

Таким образом, мы можем просто позвонить setup_gpus(True, .9)

@clementpoiret : обратите внимание, что вызов tf.config.experimental.set_memory_growth не нужен, поскольку tf.config.experimental.set_virtual_device_configuration переопределяет этот флаг, поскольку он разделяет память GPU и предварительно выделяет выделенную память.

Эта проблема не ограничивается RTX. Или TF 2.0.

Добавление:
_from tensorflow.compat.v1 импорт ConfigProto
из tensorflow.compat.v1 импорт InteractiveSession
config = ConfigProto ()
config.gpu_options.allow_growth = Истина
сеанс = InteractiveSession (config = config) _

Решает проблему «Не удалось создать дескриптор cudnn: CUDNN_STATUS_INTERNAL_ERROR» со средой следующим образом:

nvidia-smi | NVIDIA-SMI 430.50 Driver Version: 430.50 CUDA Version: 10.1 | | 0 GeForce GT 1030 | 49% 67C P0 N/A / 30W | 1957MiB / 2000MiB | 94%

python -c 'import tensorflow as tf; print(tf.__version__)' 1.14.0
Может ли это быть проблема с максимальным распределением непрерывных блоков в драйверах NVIDIA? Где можно выделить такой же общий объем памяти, но меньшими блоками?

Привет,

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

В качестве отправной точки я хотел бы понять, почему MinSystemMemory не сохраняет достаточно памяти для cuDNN. Если кто-то с настройкой, воспроизводящей эту проблему, может добавить некоторое ведение журнала (в качестве локального исправления), чтобы узнать объем памяти, возвращаемый MinSystemMemory это было бы здорово. И помогает ли ситуации увеличение магического числа 0.05 в MinSystemMemory ?

@sanjoy У меня есть версия, в которой проявляется эта проблема. Как мне получить доступ к MinSystemMemory или «установить магическое число 0,05»? Я вернулся к использованию cuda 9.1 по большей части, но я не против попробовать кое-что.

@odinsbane, вам нужно будет собрать TensorFlow из исходного кода, чтобы сделать то, что я предлагаю ниже.

Первый шаг - добавить LOG(INFO) или std::cerr строки в MinSystemMemory чтобы распечатать available_memory и возвращаемое значение из MinSystemMemory . Соответствует ли available_memory тому, что печатает nvidia-smi ? Сколько памяти мы оставляем системе?

Во-вторых, помогает ли вообще увеличение магического числа 0.05 до, скажем, 0.07 ?

Этот работает! Спасибо вам, ребята!

from keras.backend.tensorflow_backend import set_session
$ import tensorflow as tf
$ config = tf.ConfigProto()
$ config.gpu_options.allow_growth = True
$ config.log_device_placement = True
$ sess = tf.Session(config=config)
$ set_session(sess)

мы сталкиваемся с аналогичной проблемой на RTX 2070 (Ubuntu 18.04, TF2). Мы пробовали разные комбинации версий CUDA 10.0 и libcudnn7.xxx, но ошибка продолжает появляться снова.
На другой машине у нас есть GTX 1080ti, и эта работает без проблем.
Драйвер nvidia - 430,50 в обоих случаях.

Это не вызвано tf.keras.utils.plot_model , я удаляю его, и эта ошибка все равно появляется, но реже.
Обновление: я считаю, что это происходит только тогда, когда я использую tf.keras.utils.plot_model . Я буду продолжать попытки.

============

У меня аналогичная проблема с RTX 2080 Ti на Ubuntu 18.04.3 LTS, tf 1.15, cuda 10.0.

Что странно в моем случае, так это то, что это случается очень редко, и как только это происходит, это длится от менуэтов до часов, а затем просто исчезает .

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

Что я тоже пробовал и не упомянуто выше:

  1. Удалить каталог ~/.nv
  2. Просто перезагрузитесь

К вашему сведению, журналы ошибок

2019-12-21 14:47:30.785233: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10.0
2019-12-21 14:47:30.959825: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2019-12-21 14:47:31.722238: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2019-12-21 14:47:31.749524: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
Traceback (most recent call last):
  File "train_cifar.py", line 204, in <module>
    main()
  File "train_cifar.py", line 133, in main
    validation_data=(x_test, output_test), callbacks=callbacks, verbose=0)
  File "/home/xxx/anaconda3/envs/tf-1-gpu/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py", line 727, in fit
    use_multiprocessing=use_multiprocessing)
  File "/home/xxx/anaconda3/envs/tf-1-gpu/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_generator.py", line 603, in fit
    steps_name='steps_per_epoch')
  File "/home/xxx/anaconda3/envs/tf-1-gpu/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_generator.py", line 265, in model_iteration
    batch_outs = batch_function(*batch_data)
  File "/home/xxx/anaconda3/envs/tf-1-gpu/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py", line 1017, in train_on_batch
    outputs = self.train_function(ins)  # pylint: disable=not-callable
  File "/home/xxx/anaconda3/envs/tf-1-gpu/lib/python3.7/site-packages/tensorflow_core/python/keras/backend.py", line 3476, in __call__
    run_metadata=self.run_metadata)
  File "/home/xxx/anaconda3/envs/tf-1-gpu/lib/python3.7/site-packages/tensorflow_core/python/client/session.py", line 1472, in __call__
    run_metadata_ptr)
tensorflow.python.framework.errors_impl.UnknownError: 2 root error(s) found.
  (0) 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 stem_layer/conv2d/Conv2D}}]]
     [[metrics/classifier_acc/Identity/_1749]]
  (1) 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 stem_layer/conv2d/Conv2D}}]]
0 successful operations.
0 derived errors ignored.

Мы сталкиваемся с актуальными проблемами

Технические характеристики системы

  • Ubuntu 18.04.3 LTS
  • RTX 2070
  • Python 3.7.1
  • tf-gpu 2.0.0
  • V10.0.130 CUDA
  • libcudnn7 7.6.2

Ошибка возникает, когда я пытаюсь использовать LSTM, GRU, RNN и т. Д.

Фактическая ошибка

2019-12-23 16:09:00.912238: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7 2019-12-23 16:09:01.408990: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR 2019-12-23 16:09:01.409043: W tensorflow/core/framework/op_kernel.cc:1622] OP_REQUIRES failed at cudnn_rnn_ops.cc:1491 : Unknown: Fail to find the dnn implementation.

File "/home/alex/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow_core/python/keras/layers/recurrent_v2.py", line 961, in call **cudnn_lstm_kwargs) File "/home/alex/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow_core/python/keras/layers/recurrent_v2.py", line 1174, in cudnn_lstm rnn_mode='lstm') File "/home/alex/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow_core/python/ops/gen_cudnn_rnn_ops.py", line 109, in cudnn_rnn ctx=_ctx) File "/home/alex/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow_core/python/ops/gen_cudnn_rnn_ops.py", line 198, in cudnn_rnn_eager_fallback attrs=_attrs, ctx=_ctx, name=name) File "/home/alex/anaconda3/envs/tf/lib/python3.7/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: Fail to find the dnn implementation. [Op:CudnnRNN]

Очевидная проблема

Как будто вся моя память съедается довольно быстро. Проблемы, кажется, возникают только в режиме gpu, тот же код отлично работает с процессором

Испытания

  • разрешить рост памяти
  • создать виртуальное устройство с ограниченной памятью

Обе попытки приводят к одной и той же ошибке.

Есть идеи?

Я не могу добиться прогресса в этом вопросе, потому что не могу воспроизвести его. Если вы можете надежно воспроизвести это на своей машине, вы можете помочь; вот как: https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -560963770, https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -561366750

Я не могу добиться прогресса в этом вопросе, потому что не могу воспроизвести его. Если вы можете надежно воспроизвести это на своей машине, вы можете помочь; вот как: # 24496 (комментарий) , # 24496 (комментарий)

Привет, @sanjoy , я очень хочу помочь, но, к сожалению, я не могу создать tf из исходного кода, потому что я использую свойства своего университета для проведения экспериментов, а мой персональный ноутбук не оснащен графическим процессором. Есть ли другие способы получить нужный нам журнал?

Я нашел следующий код при переполнении стека , может ли это помочь?

from tensorflow.contrib.memory_stats.python.ops.memory_stats_ops import BytesInUse
with tf.device('/device:GPU:0'):  # Replace with device you are interested in
  bytes_in_use = BytesInUse()
with tf.Session() as sess:
  print(sess.run(bytes_in_use))

Есть ли другие способы получить нужный нам журнал?

Я проверю оператор VLOG чтобы получить эту информацию. Как только это будет сделано, сможете ли вы установить и воспроизвести это с помощью tf-nightly (с некоторыми дополнительными флагами, я дам вам знать, какие именно)?

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

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

Не могли бы вы установить tf-nightly (чтобы он принимал фиксацию, которая добавляет журналирование) и запускать с переменной окружения TF_CPP_VMODULE установленной на gpu_device=5 ? Это должно распечатать две строки вроде

2019-12-26 12:07:37.196206: I tensorflow/core/common_runtime/gpu/gpu_device.cc:837] available_memory = 12319588352                                             
2019-12-26 12:07:37.196221: I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] min_system_memory = 615979417                                              

Не могли бы вы сообщить эти цифры здесь?

Извините, мой текущий код несовместим с tf 2.0 (я использую 1.15), я пытаюсь его обновить. Пожалуйста, дай мне немного времени.

Эта проблема, похоже, связана с моим RTX2080, у меня настольный GTX1080, все в порядке, затем я использую conda clone the conda enviroment на свой ноутбук RTX2080, я использую tenorflow2.0.0-gpu. как только код приложения использует Conv2d, LSTM, GRU, тогда возникает эта проблема.
прежде чем я использую следующие коды для решения этой проблемы:
gpus = tf.config.experimental.list_physical_devices ('GPU')
если gpus:
пытаться:

В настоящее время рост памяти должен быть одинаковым для всех графических процессоров.

    for gpu in gpus:
        tf.config.experimental.set_memory_growth(gpu, True)
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:

Увеличение объема памяти необходимо установить до инициализации графических процессоров.

    print(e)

но с тех пор, как несколько дней назад вышеуказанный метод больше не работает

У меня такая же проблема с gtx 960m

Привет, @sanjoy , я только что получил такой результат:

2019-12-30 17:38:23.824323: I tensorflow/core/common_runtime/gpu/gpu_device.cc:837] available_memory = 10840309760
2019-12-30 17:38:23.824328: I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] min_system_memory = 542015488

Привет, @sanjoy , я только что получил такой результат:

2019-12-30 17:38:23.824323: I tensorflow/core/common_runtime/gpu/gpu_device.cc:837] available_memory = 10840309760
2019-12-30 17:38:23.824328: I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] min_system_memory = 542015488

Благодаря!

К сожалению, это не помогло, как я думал. Если я зажму MinSystemMemory в локальной сборке до 542015488 (т.е. min_system_memory = std::min(min_system_memory, 542015488ll) ), resnet (например), похоже, будет работать нормально, и я не получаю никаких ошибок от cuDNN .

@sanjoy Я могу (в основном постоянно) воспроизвести проблему на своей стороне.

Соответствующие сообщения из последнего ночного журнала:

С явно разрешенным увеличением памяти

2019-12-30 22:51:06.846774: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
WARNING:tensorflow:Falling back to tensorflow client, its recommended to install the cloud tpu client directly with pip install cloud-tpu-client .
2019-12-30 22:51:08.851660: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2019-12-30 22:51:08.877811: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1558] Found device 0 with properties: 
pciBusID: 0000:08:00.0 name: GeForce GTX 1070 computeCapability: 6.1
coreClock: 1.7715GHz coreCount: 15 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 238.66GiB/s
2019-12-30 22:51:08.887672: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2019-12-30 22:51:08.895277: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2019-12-30 22:51:08.906016: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2019-12-30 22:51:08.913767: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2019-12-30 22:51:08.921329: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2019-12-30 22:51:08.930208: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2019-12-30 22:51:08.941818: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2019-12-30 22:51:08.945713: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Adding visible gpu devices: 0
TF GPU device: PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')



CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
Tensorflow Version: 2.1.0-dev20191230
Tensorflow_addons Version: 0.7.0-dev



Preparing data
Loading dataset
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:03<00:00, 21.61it/s] 
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 68/68 [00:00<00:00, 447.32it/s] 
Performing NLP
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:00<00:00, 13332.71it/s] 
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 68/68 [00:00<?, ?it/s] 
Transforming dataset
Generating primitives and constructing vocabulary
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:00<00:00, 139.11it/s] 
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 68/68 [00:00<00:00, 4249.86it/s] 
Encoding primitives
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16654/16654 [00:00<00:00, 33640.74it/s]
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 805/805 [00:00<00:00, 33538.43it/s] 
2019-12-30 22:51:22.970554: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2019-12-30 22:51:22.977228: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1558] Found device 0 with properties: 
pciBusID: 0000:08:00.0 name: GeForce GTX 1070 computeCapability: 6.1
coreClock: 1.7715GHz coreCount: 15 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 238.66GiB/s
2019-12-30 22:51:22.983571: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2019-12-30 22:51:22.986832: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2019-12-30 22:51:22.990667: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2019-12-30 22:51:22.993801: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2019-12-30 22:51:22.996967: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2019-12-30 22:51:23.002629: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2019-12-30 22:51:23.006072: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2019-12-30 22:51:23.010482: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Adding visible gpu devices: 0
2019-12-30 22:51:23.557556: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1087] TensorFlow compiled with CUDA 10.1 and cuDNN 7.6.5
2019-12-30 22:51:23.560870: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1099] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-12-30 22:51:23.564144: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1105]      0 
2019-12-30 22:51:23.569159: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1118] 0:   N
2019-12-30 22:51:23.571310: I tensorflow/core/common_runtime/gpu/gpu_device.cc:837] available_memory = 7038160076
2019-12-30 22:51:23.573861: I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] min_system_memory = 351908003
2019-12-30 22:51:23.576728: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1370] GPUDevice PlatformGpuId 0 TfGpuId 0 on bus 1 numa: 0 pci: 0000:08:00.0 DeviceLocality: bus_id: 1
links {
}

2019-12-30 22:51:23.583814: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1244] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6376 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1070, pci bus id: 0000:08:00.0, compute capability: 6.1)
2019-12-30 22:51:23.590034: I tensorflow/core/common_runtime/gpu/gpu_device.cc:249] Created stream[0] = 000002093BAB9860
2019-12-30 22:51:23.594885: I tensorflow/core/common_runtime/gpu/gpu_device.cc:268] Created host_to_device_stream[0] = 000002093BAB9360
2019-12-30 22:51:23.597951: I tensorflow/core/common_runtime/gpu/gpu_device.cc:273] Created device_to_host_stream[0] = 000002093BABA960
2019-12-30 22:51:23.600920: I tensorflow/core/common_runtime/gpu/gpu_device.cc:289] Created device_to_device_stream[0] = 000002093BAB8EE0

Без каких-либо изменений в конфигурации устройства GPU

2019-12-30 22:54:47.762913: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
WARNING:tensorflow:Falling back to tensorflow client, its recommended to install the cloud tpu client directly with pip install cloud-tpu-client .
2019-12-30 22:54:50.073199: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2019-12-30 22:54:50.100339: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1558] Found device 0 with properties:
pciBusID: 0000:08:00.0 name: GeForce GTX 1070 computeCapability: 6.1
coreClock: 1.7715GHz coreCount: 15 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 238.66GiB/s
2019-12-30 22:54:50.105836: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2019-12-30 22:54:50.115940: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2019-12-30 22:54:50.127341: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2019-12-30 22:54:50.131871: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2019-12-30 22:54:50.139786: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2019-12-30 22:54:50.144940: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2019-12-30 22:54:50.159197: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2019-12-30 22:54:50.162685: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Adding visible gpu devices: 0
TF GPU device: PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')



CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
Tensorflow Version: 2.1.0-dev20191230
Tensorflow_addons Version: 0.7.0-dev



Preparing data
Loading dataset
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:03<00:00, 21.71it/s] 
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 68/68 [00:00<00:00, 433.07it/s] 
Performing NLP
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:00<00:00, 13332.18it/s] 
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 68/68 [00:00<?, ?it/s] 
Transforming dataset
Generating primitives and constructing vocabulary
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:00<00:00, 140.34it/s] 
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 68/68 [00:00<00:00, 4249.55it/s] 
Encoding primitives
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16654/16654 [00:00<00:00, 33039.93it/s] 
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 805/805 [00:00<00:00, 33537.43it/s] 
2019-12-30 22:55:04.084880: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2019-12-30 22:55:04.088867: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1558] Found device 0 with properties:
pciBusID: 0000:08:00.0 name: GeForce GTX 1070 computeCapability: 6.1
coreClock: 1.7715GHz coreCount: 15 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 238.66GiB/s
2019-12-30 22:55:04.094516: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2019-12-30 22:55:04.097049: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2019-12-30 22:55:04.099754: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2019-12-30 22:55:04.102329: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2019-12-30 22:55:04.105131: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2019-12-30 22:55:04.108029: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2019-12-30 22:55:04.110629: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2019-12-30 22:55:04.114339: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Adding visible gpu devices: 0
2019-12-30 22:55:04.655119: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1087] TensorFlow compiled with CUDA 10.1 and cuDNN 7.6.5
2019-12-30 22:55:04.658124: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1099] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-12-30 22:55:04.660826: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1105]      0
2019-12-30 22:55:04.662403: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1118] 0:   N
2019-12-30 22:55:04.664213: I tensorflow/core/common_runtime/gpu/gpu_device.cc:837] available_memory = 7038160076
2019-12-30 22:55:04.666185: I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] min_system_memory = 351908003
2019-12-30 22:55:04.668490: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1370] GPUDevice PlatformGpuId 0 TfGpuId 0 on bus 1 numa: 0 pci: 0000:08:00.0 DeviceLocality: bus_id: 1
links {
}

2019-12-30 22:55:04.672820: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1244] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6376 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1070, pci bus id: 0000:08:00.0, compute capability: 6.1)
2019-12-30 22:55:04.677690: I tensorflow/core/common_runtime/gpu/gpu_device.cc:249] Created stream[0] = 0000021EC0CF5840
2019-12-30 22:55:04.679747: I tensorflow/core/common_runtime/gpu/gpu_device.cc:268] Created host_to_device_stream[0] = 0000021EC0CF58C0
2019-12-30 22:55:04.682343: I tensorflow/core/common_runtime/gpu/gpu_device.cc:273] Created device_to_host_stream[0] = 0000021EC0CF5940
2019-12-30 22:55:04.685266: I tensorflow/core/common_runtime/gpu/gpu_device.cc:289] Created device_to_device_stream[0] = 0000021EC0CF59C0

РЕДАКТИРОВАТЬ: информация о модели, если это поможет.

__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to
==================================================================================================
Feature_1 (InputLayer)          [(None, 150)]        0
__________________________________________________________________________________________________
Feature_2 (InputLayer)          [(None, 150)]        0
__________________________________________________________________________________________________
embedding (Embedding)           (None, 150, 64)      5632        Feature_1[0][0]
__________________________________________________________________________________________________
embedding_1 (Embedding)         (None, 150, 64)      2944        Feature_2[0][0]
__________________________________________________________________________________________________
bidirectional (Bidirectional)   (None, 150, 128)     66048       embedding[0][0]
__________________________________________________________________________________________________
bidirectional_1 (Bidirectional) (None, 150, 128)     66048       embedding_1[0][0]
__________________________________________________________________________________________________
concatenate (Concatenate)       (None, 150, 256)     0           bidirectional[0][0]
                                                                 bidirectional_1[0][0]
__________________________________________________________________________________________________
bidirectional_2 (Bidirectional) (None, 64)           73984       concatenate[0][0]
__________________________________________________________________________________________________
dense (Dense)                   (None, 32)           2080        bidirectional_2[0][0]
__________________________________________________________________________________________________
dense_1 (Dense)                 (None, 1)            33          dense[0][0]
==================================================================================================
Total params: 216,769
Trainable params: 216,769
Non-trainable params: 0

Минимальный пример использования TF 1.15, и я получаю эту ошибку. На RTX 2070 и NVIDIA 440.44 и CUDA версии 10.2.

import tensorflow as tf
import tensorflow.keras.applications as applications
import tensorflow.keras.utils as utils
import numpy as np

num_samples = 1000
height = 224
width = 224
num_classes = 1000

model = applications.ResNet50(weights=None, input_shape=(height, width, 3), classes=num_classes)

parallel_model = utils.multi_gpu_model(model, gpus=2, cpu_relocation=True)
parallel_model.compile(loss='categorical_crossentropy', optimizer='rmsprop')

x = np.random.random((num_samples, height, width, 3))
y = np.random.random((num_samples, num_classes))

parallel_model.fit(x, y, epochs=20, batch_size=256)

print('all done')
Train on 1000 samples
Epoch 1/20
2020-02-06 15:06:40.524918: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-02-06 15:06:41.291528: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-02-06 15:06:41.329183: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 822083584 exceeds 10% of system memory.
2020-02-06 15:06:42.082319: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 851705856 exceeds 10% of system memory.
2020-02-06 15:06:42.293092: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 822083584 exceeds 10% of system memory.
2020-02-06 15:06:43.173764: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 822083584 exceeds 10% of system memory.
2020-02-06 15:06:43.820074: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-02-06 15:06:44.390897: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 822083584 exceeds 10% of system memory.
2020-02-06 15:06:45.839525: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-02-06 15:06:45.856793: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-02-06 15:06:45.883423: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
Traceback (most recent call last):
  File "./test_tf.py", line 19, in <module>
    parallel_model.fit(x, y, epochs=20, batch_size=256)
  File "/nix/store/520352w3m8lyj2zgv647qfqrws5q798n-python3.7-tensorflow-gpu-1.15.0/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py", line 727, in fit
    use_multiprocessing=use_multiprocessing)
  File "/nix/store/520352w3m8lyj2zgv647qfqrws5q798n-python3.7-tensorflow-gpu-1.15.0/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_arrays.py", line 675, in fit
    steps_name='steps_per_epoch')
  File "/nix/store/520352w3m8lyj2zgv647qfqrws5q798n-python3.7-tensorflow-gpu-1.15.0/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_arrays.py", line 394, in model_iteration
    batch_outs = f(ins_batch)
  File "/nix/store/520352w3m8lyj2zgv647qfqrws5q798n-python3.7-tensorflow-gpu-1.15.0/lib/python3.7/site-packages/tensorflow_core/python/keras/backend.py", line 3476, in __call__
    run_metadata=self.run_metadata)
  File "/nix/store/520352w3m8lyj2zgv647qfqrws5q798n-python3.7-tensorflow-gpu-1.15.0/lib/python3.7/site-packages/tensorflow_core/python/client/session.py", line 1472, in __call__
    run_metadata_ptr)
tensorflow.python.framework.errors_impl.UnknownError: 2 root error(s) found.
  (0) 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 replica_1/resnet50/conv1_conv/Conv2D}}]]
  (1) 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 replica_1/resnet50/conv1_conv/Conv2D}}]]
    [[training/RMSprop/gradients/gradients/Switch_482/_3893]]
0 successful operations.
1 derived errors ignored.

Я хочу указать в отдельном выпуске https://github.com/tensorflow/tensorflow/issues/36501, что при использовании этих параметров код запускается, наблюдение за фактическим использованием памяти графическими процессорами показывает, что это даже не так. делает инкрементное использование памяти. Таким образом, указанный выше вариант исправляет ошибку, но на самом деле не выполняет то, что утверждает. Раньше я использовал ту же модель в более старых версиях TF, таких как 1.2 ... и т.д., и они действительно выделяли инкрементное распределение памяти.

У меня такие же проблемы, как и у всех здесь! После установки tf 2.1 я не мог запустить простой пример MNIST без увеличения объема памяти для графического процессора. Пользуюсь 2080 ти .

Основная проблема, с которой я сталкиваюсь, заключается в том, что я не могу запустить тензор-вероятность потока вместе с tf 2.1, не получив проклятую внутреннюю ошибку CUDNN, даже если в код добавлен рост памяти. Я пробовал установить tf 2.0, CUDA 10.0 и CUDA 10.1, разные версии CUDNN. Мне удалось исправить простой пример MNIST, чтобы он работал без роста после полной переустановки моего ubuntu, но не пример вероятности тензорного потока. Наконец, я попытался использовать официальный ночной докер tensorflow и по-прежнему получил ту же ошибку при использовании вероятности tenorflow (tf 2.2 внутри контейнера). На CPU все работает нормально. Я также пробовал запустить тот же докер на машине с 1080 ti, и это сработало ... Я чувствую, что с серией RTX определенно что-то не так.

ошибка с tf docker и примером тензорного потока и дополнительной отладочной информацией cudnn:

TF VERSION: 2.2.0-dev20200208
2020-02-11 08:51:05.891560: I tensorflow/core/platform/cpu_feature_guard.cc:143] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2020-02-11 08:51:05.912465: I tensorflow/core/platform/profile_utils/cpu_utils.cc:102] CPU Frequency: 3696000000 Hz
2020-02-11 08:51:05.913040: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x57b1fd0 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-02-11 08:51:05.913052: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2020-02-11 08:51:05.914414: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2020-02-11 08:51:05.975016: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.975364: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x5679220 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:
2020-02-11 08:51:05.975376: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): GeForce RTX 2080 Ti, Compute Capability 7.5
2020-02-11 08:51:05.975477: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.975744: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1558] Found device 0 with properties: 
pciBusID: 0000:01:00.0 name: GeForce RTX 2080 Ti computeCapability: 7.5
coreClock: 1.545GHz coreCount: 68 deviceMemorySize: 10.75GiB deviceMemoryBandwidth: 573.69GiB/s
2020-02-11 08:51:05.975865: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-02-11 08:51:05.976745: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-02-11 08:51:05.977582: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-02-11 08:51:05.977722: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-02-11 08:51:05.978636: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-02-11 08:51:05.979165: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-02-11 08:51:05.981150: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-02-11 08:51:05.981216: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.981528: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.981792: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Adding visible gpu devices: 0
2020-02-11 08:51:05.981812: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-02-11 08:51:05.982323: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1099] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-02-11 08:51:05.982331: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1105]      0 
2020-02-11 08:51:05.982335: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1118] 0:   N 
2020-02-11 08:51:05.982395: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.982687: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.982959: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1244] Created TensorFlow device (/device:GPU:0 with 9604 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2080 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5)
2020-02-11 08:51:05.983594: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.983864: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1558] Found device 0 with properties: 
pciBusID: 0000:01:00.0 name: GeForce RTX 2080 Ti computeCapability: 7.5
coreClock: 1.545GHz coreCount: 68 deviceMemorySize: 10.75GiB deviceMemoryBandwidth: 573.69GiB/s
2020-02-11 08:51:05.983881: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-02-11 08:51:05.983889: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-02-11 08:51:05.983896: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-02-11 08:51:05.983904: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-02-11 08:51:05.983912: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-02-11 08:51:05.983920: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-02-11 08:51:05.983928: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-02-11 08:51:05.983961: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.984238: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.984497: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Adding visible gpu devices: 0
2020-02-11 08:51:05.984508: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1099] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-02-11 08:51:05.984512: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1105]      0 
2020-02-11 08:51:05.984516: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1118] 0:   N 
2020-02-11 08:51:05.984563: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.984842: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.985099: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1244] Created TensorFlow device (/device:GPU:0 with 9604 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2080 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5)
SUCCESS: Found GPU: /device:GPU:0
2020-02-11 08:51:05.989382: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.989649: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1558] Found device 0 with properties: 
pciBusID: 0000:01:00.0 name: GeForce RTX 2080 Ti computeCapability: 7.5
coreClock: 1.545GHz coreCount: 68 deviceMemorySize: 10.75GiB deviceMemoryBandwidth: 573.69GiB/s
2020-02-11 08:51:05.989663: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-02-11 08:51:05.989671: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-02-11 08:51:05.989678: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-02-11 08:51:05.989684: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-02-11 08:51:05.989691: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-02-11 08:51:05.989700: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-02-11 08:51:05.989709: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-02-11 08:51:05.989744: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.990021: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.990347: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Adding visible gpu devices: 0
2020-02-11 08:51:05.990544: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.990807: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1558] Found device 0 with properties: 
pciBusID: 0000:01:00.0 name: GeForce RTX 2080 Ti computeCapability: 7.5
coreClock: 1.545GHz coreCount: 68 deviceMemorySize: 10.75GiB deviceMemoryBandwidth: 573.69GiB/s
2020-02-11 08:51:05.990820: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-02-11 08:51:05.990828: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-02-11 08:51:05.990834: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-02-11 08:51:05.990841: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-02-11 08:51:05.990848: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-02-11 08:51:05.990854: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-02-11 08:51:05.990861: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-02-11 08:51:05.990892: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.991171: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.991426: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Adding visible gpu devices: 0
2020-02-11 08:51:05.991437: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1099] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-02-11 08:51:05.991441: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1105]      0 
2020-02-11 08:51:05.991444: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1118] 0:   N 
2020-02-11 08:51:05.991486: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.991763: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.992022: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1244] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 9604 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2080 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5)
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/ops/linalg/linear_operator_lower_triangular.py:158: calling LinearOperator.__init__ (from tensorflow.python.ops.linalg.linear_operator) with graph_parents is deprecated and will be removed in a future version.
Instructions for updating:
Do not pass `graph_parents`.  They will  no longer be used.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/ops/linalg/linear_operator_lower_triangular.py:158: calling LinearOperator.__init__ (from tensorflow.python.ops.linalg.linear_operator) with graph_parents is deprecated and will be removed in a future version.
Instructions for updating:
Do not pass `graph_parents`.  They will  no longer be used.
2020-02-11 08:51:06.822991: W tensorflow/python/util/util.cc:319] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them.
Epoch 1/15
2020-02-11 08:51:07.907445: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-02-11 08:51:09.832694: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7

I! CuDNN (v7604) function cudnnCreate() called:
i! Time: 2020-02-11T08:51:09.832722 (0d+0h+0m+4s since start)
i! Process=205; Thread=269; GPU=NULL; Handle=NULL; StreamId=NULL.

2020-02-11 08:51:10.409902: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

I! CuDNN (v7604) function cudnnCreate() called:
i! Time: 2020-02-11T08:51:10.410012 (0d+0h+0m+5s since start)
i! Process=205; Thread=269; GPU=NULL; Handle=NULL; StreamId=NULL.

2020-02-11 08:51:10.417952: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
      1/Unknown - 4s 4s/stepTraceback (most recent call last):
  File "VAE_MNIST_tfp.py", line 150, in <module>
    validation_data=eval_dataset)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training.py", line 718, in fit
    use_multiprocessing=use_multiprocessing)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_v2.py", line 341, in fit
    total_epochs=epochs)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_v2.py", line 128, in run_one_epoch
    batch_outs = execution_function(iterator)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_v2_utils.py", line 98, in execution_function
    distributed_function(input_fn))
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/def_function.py", line 576, in __call__
    result = self._call(*args, **kwds)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/def_function.py", line 640, in _call
    return self._stateless_fn(*args, **kwds)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/function.py", line 2414, in __call__
    return graph_function._filtered_call(args, kwargs)  # pylint: disable=protected-access
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/function.py", line 1660, in _filtered_call
    self.captured_inputs)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/function.py", line 1741, in _call_flat
    ctx, args, cancellation_manager=cancellation_manager))
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/function.py", line 598, in call
    ctx=ctx)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/execute.py", line 60, in quick_execute
    inputs, attrs, num_outputs)
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 model/conv2d/Conv2D (defined at VAE_MNIST_tfp.py:150) ]] [Op:__inference_distributed_function_4291]

Errors may have originated from an input operation.
Input Source operations connected to node model/conv2d/Conv2D:
 model/lambda/sub (defined at VAE_MNIST_tfp.py:98)

Function call stack:
distributed_function

@sanjoy У меня такая же проблема с RTX 2080, и при необходимости я могу собрать из исходников.

@odinsbane, вам нужно будет собрать TensorFlow из исходного кода, чтобы сделать то, что я предлагаю ниже.

Первый шаг - добавить LOG(INFO) или std::cerr строки в MinSystemMemory чтобы распечатать available_memory и возвращаемое значение из MinSystemMemory . Соответствует ли available_memory тому, что печатает nvidia-smi ? Сколько памяти мы оставляем системе?

Во-вторых, помогает ли вообще увеличение магического числа 0.05 до, скажем, 0.07 ?

может подтвердить, что сборка из исходного кода с изменением магического числа 0.05 magic number на 0.1 похоже, решает проблему (по крайней мере, для версии 1.15.2)!

В море шумных постов минимальное магическое число системной памяти кажется вполне логичным. Спасибо, что поделился!

@chsigg Есть предложения? Может быть, мы можем попытаться инициализировать cuDNN, cuBLAS и другие библиотеки NVIDIA перед тем, как зарезервировать всю память GPU?

Мы также можем попробовать включить allow_growth по умолчанию, но это займет время.

Эта проблема, похоже, связана с моим RTX2080, у меня настольный GTX1080, все в порядке, затем я использую conda clone the conda enviroment на свой ноутбук RTX2080, я использую tenorflow2.0.0-gpu. как только код приложения использует Conv2d, LSTM, GRU, тогда возникает эта проблема.
прежде чем я использую следующие коды для решения этой проблемы:
gpus = tf.config.experimental.list_physical_devices ('GPU')
если gpus:
пытаться:

В настоящее время рост памяти должен быть одинаковым для всех графических процессоров.

    for gpu in gpus:
        tf.config.experimental.set_memory_growth(gpu, True)
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:

Увеличение объема памяти необходимо установить до инициализации графических процессоров.

    print(e)

но с тех пор, как несколько дней назад вышеуказанный метод больше не работает

Пытался запустить

Я тоже встречаюсь с этой проблемой
anacondacloud установить tensorflow-gpu2.0

rtx2070s
tenorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
Не удалось создать дескриптор cudnn: CUDNN_STATUS_INTERNAL_ERROR
Не удалось получить алгоритм свертки. Вероятно, это связано с тем, что cuDNN не удалось инициализировать, поэтому попробуйте проверить, было ли напечатано предупреждение журнала выше.

Я тоже встречаюсь с этой проблемой
anacondacloud установить tensorflow-gpu2.0

rtx2070s
tenorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
Не удалось создать дескриптор cudnn: CUDNN_STATUS_INTERNAL_ERROR
Не удалось получить алгоритм свертки. Вероятно, это связано с тем, что cuDNN не удалось инициализировать, поэтому попробуйте проверить, было ли напечатано предупреждение журнала выше.

Вы вставили:

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
try:
    for gpu in gpus:
        tf.config.experimental.set_memory_growth(gpu, True)
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:
    print(e)

вверху вашего входного кода?

После некоторого времени экспериментов с явно другой проблемой с tf.signal.stft
Я наконец наткнулся на эту ветку и попробовал решение, позволяющее увеличить объем памяти. Это тоже решило мою проблему.
Я установил tensorflow-gpu = 2.1 с cudatoolkit = 10.1 из anaconda, но попытался установить
tenorflow-gpu через pip с точно таким же результатом. Я могу воспроизвести это под linux-ubuntu 18.04 и debian 9.12 с картами

   GeForce GTX 1050 Ti with Max-Q Design   
   GeForce GTX 1050 Ti
   GeForce RTX 2080 Ti

Я также попробовал две другие карты в нашей лаборатории

  GeForce GTX 1080 Ti
  TITAN Xp COLLECTORS EDITION

где код работает нормально с учетом и без увеличения объема памяти

Моя минимальная проблема ниже. Что интересно, проблема не в conv2d. Я могу изменить порядок этих трех команд, и всегда третья команда терпит неудачу.

import sys
import tensorflow as tf

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus and len(sys.argv)> 1 and sys.argv[1].startswith("-a"):
    print("allowing growth")
    growth = True
else:
    print("nogrowth")
    growth = False

try:
    for gpu in gpus:
        tf.config.experimental.set_memory_growth(gpu, growth)
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:
    print(e)

tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32),
                                         filters=tf.zeros((2,2,20,20), dtype=tf.float32),
            strides=(1,1,1,1), padding="VALID")
print("done")

Я тоже столкнулся с этой проблемой
anacondacloud установить tensorflow-gpu2.0
rtx2070s
tenorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
Не удалось создать дескриптор cudnn: CUDNN_STATUS_INTERNAL_ERROR
Не удалось получить алгоритм свертки. Это может быть связано с тем, что cuDNN не удалось инициализировать, поэтому попробуйте проверить, есть ли сообщения журнала с предупреждениями, напечатанные выше.

Вы вставили:

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
try:
    for gpu in gpus:
        tf.config.experimental.set_memory_growth(gpu, True)
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:
    print(e)

Вверху введенного вами кода?

да, вот так решил эту проблему. Спасибо !!

У меня была та же проблема, и allow_growth = True было решением. НО, для TensorFlow 2 для этого вам нужно добавить следующие строки:

gpu_devices = tf.config.experimental.list_physical_devices('GPU') for device in gpu_devices: tf.config.experimental.set_memory_growth(device, True)

Спасибо пользователю @opcecco в этом выпуске: https://github.com/tensorflow/tensorflow/issues/25446

Что интересно, проблема не в conv2d. Я могу изменить порядок этих трех команд, и всегда третья команда терпит неудачу.

@roebel Не могли бы вы приложить журналы для нескольких различных шести перестановок?

И что будет, если вы измените программу на (скажем):

tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32),
                                         filters=tf.zeros((2,2,20,20), dtype=tf.float32),
            strides=(1,1,1,1), padding="VALID")

Произошел ли сбой на conv2d или на третьем stft ?

@sanjoy, конечно, здесь три варианта сценария, описанного выше, изменяющие порядок команд, и четвертый вариант, который начинается с 4 stft и заканчивается conv2d

Четыре разных журнала используют сценарий из
https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -593098386
заменяя последние четыре строки.

Вкратце результаты в зависимости от порядка:

stft-> blas-> conv2d не работает при выполнении conv2d
conv2d-> stft-> blas не работает при выполнении stft (так что не третий, но похоже, что blas уже загружен для conv2d
matmul-> conv2d-> stft не работает при выполнении STFT
stft -> - stft -> - stft-> stft-> matmul-> conv2d завершается ошибкой при выполнении conv2d. Пожалуйста, смотрите логи ниже.

Не прочь при необходимости попросить другие варианты.

conv2d последний:

tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32),
                                         filters=tf.zeros((2,2,20,20), dtype=tf.float32),
            strides=(1,1,1,1), padding="VALID")
print("done")

log.conv2d.last.txt

матмуль последний

tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32),
                                         filters=tf.zeros((2,2,20,20), dtype=tf.float32),
            strides=(1,1,1,1), padding="VALID")
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
print("done")

log.matmul.last.txt

последний

tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32),
                                         filters=tf.zeros((2,2,20,20), dtype=tf.float32),
            strides=(1,1,1,1), padding="VALID")
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
print("done")

log.stft.last.txt

4 ст.ф.первый, конв.2д последний:

tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32),
                                         filters=tf.zeros((2,2,20,20), dtype=tf.float32),
            strides=(1,1,1,1), padding="VALID")
print("done")

log.multi_stft.first.txt

Большое спасибо

У меня такая же проблема со следующей конфигурацией:
TensorFlow установлен из (исходный или двоичный): r1.13.1, r.1.13.2, r1.14
Версия Python: 3.6.1
Версия Bazel (при компиляции из исходников):
Версия GCC / Compiler (при компиляции из исходников):
Версия CUDA / cuDNN: CUDA 10 с cuDNN 7.4.1
Модель графического процессора и память: RTX 2070 8 ГБ.

Я решил эту проблему с помощью:
TensorFlow установлен из (исходного или двоичного): r1.12.0
Версия Python: 3.6.9
Версия GCC / компилятора: 4.8
Версия CUDA / cuDNN: CUDA 9.0 с cuDNN 7.1.4
Модель графического процессора и память: RTX 2070 8 ГБ.
Надеюсь помочь вам

Я тоже столкнулся с такой проблемой, которая была решена добавлением переменной окружения TF_FORCE_GPU_ALLOW_GROWTH = true.

Конфигурация следующая:
Windows 10
Tensorflow собран из исходников r2.0
Базель: 0,26,1
Компилятор C ++: MSVC 2017
CUDA: 10
cuDNN: 7.6.5

intel4930 процессор, nvidia titan XP паскаль
Ubuntu 18.04.4, последняя версия miniconda,
`! список conda | grep "cud" дает

    cudatoolkit               10.1.243             h6bb024c_0  
    cudnn                     7.6.5                cuda10.1_0  

`! список conda | grep "тензор" дает

tensorboard               2.1.0                     py3_0  
tensorflow                2.1.0           gpu_py37h7a4bb67_0  
tensorflow-base           2.1.0           gpu_py37h6c5654b_0  
tensorflow-estimator      2.1.0              pyhd54b08b_0  
tensorflow-gpu            2.1.0                h0d30ee6_0  

первая ячейка в блокноте jupyter:

import tensorflow as tf
gpu_devices = tf.config.experimental.list_physical_devices('GPU')
for device in gpu_devices: tf.config.experimental.set_memory_growth(device, True)

Модель представляет собой вариационный автоэнкодер с общими параметрами: 112 269
x_train.shape, y_train.shape, x_test.shape, y_test.shape дает
((106496, 32, 32, 1), (106496,), (12288, 32, 32, 1), (12288,))

код включает:

batch_size=64
var_auto_encoder.fit(x_train, x_train, verbose=1, 
                 batch_size=batch_size, epochs=100,
                 validation_data=(x_test, x_test))

и это не удается. консоль показывает

2020-03-18 15:46:03.019451: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-03-18 15:46:03.179472: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-03-18 15:46:03.566267: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-03-18 15:46:03.569842: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-03-18 15:46:03.569907: 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 conv2d/Conv2D}}]]
2020-03-18 15:46:03.573206: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

Вместо первой ячейки, как указано выше, я использую

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

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

тогда я получаю эту ошибку


2020-03-18 15:55:43.050094: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-03-18 15:55:43.050123: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-03-18 15:55:43.050150: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-03-18 15:55:43.050177: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-03-18 15:55:43.050209: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-03-18 15:55:43.050246: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-03-18 15:55:43.050273: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-03-18 15:55:43.050337: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-03-18 15:55:43.050720: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-03-18 15:55:43.051063: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0
2020-03-18 15:55:43.051097: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1096] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-03-18 15:55:43.051108: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102]      0 
2020-03-18 15:55:43.051116: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] 0:   N 
2020-03-18 15:55:43.051201: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-03-18 15:55:43.051573: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-03-18 15:55:43.051915: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1241] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 16 MB memory) -> physical GPU (device: 0, name: TITAN X (Pascal), pci bus id: 0000:01:00.0, compute capability: 6.1)
2020-03-18 15:56:07.877181: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-03-18 15:56:07.882424: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-03-18 15:56:07.886148: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-03-18 15:56:07.889830: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR


Why am I having the problem if I allow memory growth? Do I need to reboot to reinitialize the gpu?

Интересно, что во время моей борьбы я получил сообщение от красного знака «нет входа» в моей строке меню, в котором говорилось: «ошибка, неверное количество, у вас есть неудовлетворенная зависимость».
Я запустил обновление программного обеспечения, и оно хочет удалить libcudnn7-dev и libcudnn7-doc
а также обновить 57 других библиотек, связанных с Linux

РЕДАКТИРОВАТЬ: после перезагрузки модель, похоже, успешно обучается, используя это:

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

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

или это:

import tensorflow as tf
gpu_devices = tf.config.experimental.list_physical_devices('GPU')
for device in gpu_devices: tf.config.experimental.set_memory_growth(device, True)

использование памяти на графическом процессоре составляет <700 МБ при размере пакета 16 и
~ 1 гигабайт с размером пакета 256 (что в 3 раза быстрее)

Я пытался скомпилировать из исходного кода, но столкнулся с той же проблемой. Я, наконец, смог исправить свою проблему, установив config.gpu_options.allow_growth = True .

Но если я столкнулся с этой проблемой в командной строке, как добавить эти коды?

Я тоже встречаюсь с этой проблемой
anacondacloud установить tensorflow-gpu2.0
rtx2070s
tenorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
Не удалось создать дескриптор cudnn: CUDNN_STATUS_INTERNAL_ERROR
Не удалось получить алгоритм свертки. Вероятно, это связано с тем, что cuDNN не удалось инициализировать, поэтому попробуйте проверить, было ли напечатано предупреждение журнала выше.

Вы вставили:

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
try:
    for gpu in gpus:
        tf.config.experimental.set_memory_growth(gpu, True)
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:
    print(e)

вверху вашего входного кода?

У меня была та же проблема, что и выше. Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

Решение от @robosmith полностью

Мои характеристики:
RTX 2070
Ubuntu 18.04 LTE
Тензорфлоу 2.1.0
Керас 2.3.0
cudnn 7.6.5
cuda10.1.0
conda 4.8.3
Python 3.7.7

Построен с помощью conda install tensorflow-gpu keras

Спасибо огромное! Это первый раз, когда у меня вообще работает TF-2! И TF-1 вообще перестал работать, поэтому я решил обновиться и «посмотреть, что будет»!

Спасибо!

config.gpu_options.allow_growth = Истина

когда вы используете tensorflow 2.0, вы можете использовать
tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)
этот код находится после import tensorflow as tf но перед вашим кодом.

Я пытался скомпилировать из исходного кода, но столкнулся с той же проблемой. Я, наконец, смог исправить свою проблему, установив config.gpu_options.allow_growth = True .

Этот код используется совместно, чтобы сделать его более доступным как для пользователей tenorflow, так и keras.
источник отсюда

# Tensorflow
import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config, ...)


#And for Keras
from keras.callbacks import ModelCheckpoint
from keras.models import Model, load_model, save_model, Sequential
from keras.layers import Dense, Activation, Dropout, Input, Masking, TimeDistributed, LSTM, Conv1D
from keras.layers import GRU, Bidirectional, BatchNormalization, Reshape
from keras.optimizers import Adam
from keras.backend.tensorflow_backend import set_session
import tensorflow as tf
config = tf.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.Session(config=config)
set_session(sess)  # set this TensorFlow session as the default session for Keras

Просто хотел вмешаться и сказать, что проблема все еще существует;

Мои характеристики:
Ubuntu 20.04
NVIDIA RTX 2070
Nvidia_driver 440.64
Tensorflow-gpu 2.0.1 (устанавливается через conda, которая автоматически устанавливает Cudatoolkit и CuDNN в том же окружении)
cudatoolkit 10.1.243
cudnn 7.6.5

Проблема решается tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)

Однако это больше похоже на обходной путь, чем на реальное исправление, и в наши дни у многих людей есть карты 20XX. Вероятно, должно быть обновление, в котором будет решена эта проблема.

Обновление: поскольку у меня двойная загрузка, я также попытался проверить наличие окон. Проблема сохраняется.
Windows 10
Nvidia-драйвер 445,87
В остальном все похоже

Установка последней версии драйвера (445.87) для моего RTX 2080 решила эту проблему для меня.

@NBouman Это интересно, но для меня на Ubuntu 18.04 с GeForce GTX 1050 TI я только что обновился до последнего доступного драйвера 440.82. По-прежнему необходимо разрешить рост памяти, чтобы заставить его работать.

Установка последней версии драйвера (445.87) для моего RTX 2080 решила эту проблему для меня.

@NBouman Какую ОС вы используете? Я использую Ubuntu 20.40, и последний доступный драйвер, который я смог найти, - 440.82, и, как и @roebel , проблема сохраняется.

@roebel @eduardoscsouza Я использую Windows 10 с машиной, на которой ранее была эта проблема.

Просто хотел вмешаться и сказать, что проблема все еще существует;

Мои характеристики:
Ubuntu 20.04
NVIDIA RTX 2070
Nvidia_driver 440.64
Tensorflow-gpu 2.0.1 (устанавливается через conda, которая автоматически устанавливает Cudatoolkit и CuDNN в том же окружении)
cudatoolkit 10.1.243
cudnn 7.6.5

Проблема решается tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)

Однако это больше похоже на обходной путь, чем на реальное исправление, и в наши дни у многих людей есть карты 20XX. Вероятно, должно быть обновление, в котором будет решена эта проблема.

Обновление: поскольку у меня двойная загрузка, я также попытался проверить наличие окон. Проблема сохраняется.
Windows 10
Nvidia-драйвер 445,87
В остальном все похоже

Для tensorflow 2.0.0 работал с:
tf.config.experimental.set_memory_growth(tf.config.experimental.list_physical_devices('GPU')[0],True)

Спасибо!!! тысячи спасибо !!!!!!!!!!!!!!!

ОС: ubuntu 18.04 lts

Версия драйвера: 435.21

CUDA: cudatoolkit 10.1

CUDNN: cudnn-7.6.5-cuda10.1_0

Я использовал anaconda install tensorflow

conda create -n tf-gpu tensorflow-gpu

cudatoolkit и cudnn автоматически устанавливаются anaconda с помощью предыдущей команды.

У меня такой же вопрос, ошибка:

coreClock: 1.5315GHz coreCount: 3 deviceMemorySize: 1.96GiB deviceMemoryBandwidth: 44.76GiB/s
2020-05-12 17:58:44.119679: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-05-12 17:58:44.119694: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-05-12 17:58:44.119707: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-05-12 17:58:44.119719: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-05-12 17:58:44.119732: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-05-12 17:58:44.119744: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-05-12 17:58:44.119756: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-05-12 17:58:44.119819: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-12 17:58:44.120069: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-12 17:58:44.120277: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0
2020-05-12 17:58:44.120308: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-05-12 17:58:44.174976: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1096] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-05-12 17:58:44.175003: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102]      0 
2020-05-12 17:58:44.175012: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] 0:   N 
2020-05-12 17:58:44.175136: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-12 17:58:44.175392: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-12 17:58:44.175624: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-12 17:58:44.175844: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1241] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 1439 MB memory) -> physical GPU (device: 0, name: GeForce MX150, pci bus id: 0000:01:00.0, compute capability: 6.1)
2020-05-12 17:58:44.177113: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55abc3d20b80 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:
2020-05-12 17:58:44.177129: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): GeForce MX150, Compute Capability 6.1
2020-05-12 17:58:44.177749: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 376320000 exceeds 10% of system memory.
2020-05-12 17:58:44.787493: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 376320000 exceeds 10% of system memory.
WARNING:tensorflow:Layer my_model is casting an input tensor from dtype float64 to the layer's dtype of float32, which is new behavior in TensorFlow 2.  The layer has dtype float32 because it's dtype defaults to floatx.

If you intended to run this layer in float32, you can safely ignore this warning. If in doubt, this warning is likely only an issue if you are porting a TensorFlow 1.X model to TensorFlow 2.

To change all layers to have dtype float64 by default, call `tf.keras.backend.set_floatx('float64')`. To change just this layer, pass dtype='float64' to the layer constructor. If you are the author of this layer, you can disable autocasting by passing autocast=False to the base Layer constructor.

2020-05-12 17:58:45.311821: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-05-12 17:58:45.467966: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-05-12 17:58:45.904025: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-05-12 17:58:45.913861: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-05-12 17:58:45.913978: 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 my_model/conv2d/Conv2D}}]]

Итак, у нас есть проблема, которая не решена (помимо обходного пути, который противоречит официальным рекомендациям не использовать увеличение памяти для более эффективной обработки памяти). Команда разработчиков не получила особой обратной связи. Интересно, почему?

Эта ошибка, похоже, затрагивает довольно много версий тензорного потока (1.13, 2.0, 2.1). Если я правильно понял, все проблемы, как сообщается, происходят с cuda 10. Код работает нормально на многих картах, но не на других.
Может ли кто-нибудь из команды разработчиков сказать нам, намекает ли это на проблему в драйвере cuda больше, чем в слое tenorflow? В этом случае было бы полезно передать отчет об ошибке на страницы поддержки NVIDIA. Не так ли?

Может ли кто-нибудь из команды разработчиков tensorflow прокомментировать, как они видят эту ошибку? Кто-нибудь изучает это?

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

Я открыл отчет об ошибке в NVIDIA, и я дам вам знать, что из этого выйдет.

@samhodge
На самом деле существует множество версий libcudnn, каждая env anaconda имеет свою собственную версию.
Обычно anaconda устанавливается с правильно настроенным rpath, поэтому довольно сложно получить нужные библиотеки.

Я сделал strace и grepped библиотеки, которые открываются, когда он терпит неудачу
Они постоянно поступают из каталога env anaconda, в котором размещен пакет tensorflow (см. Ниже).
Помимо libcuda, это версия 440.82, которую я скомпилировал с помощью установщика NVIDIA.

Я могу установить LD_LIBRARY_PATH в один из других каталогов anaconda env lib с разными cudatoolkit и разными libcudnn, след остается прежним.
Также обратите внимание, что проблема не в lbcudnn. Это всегда третья библиотека libcuxyz, которая
используется, и это только на определенных графических процессорах (я использовал один и тот же сценарий установки на разных машинах с разными графическими процессорами, некоторые работают, некоторые нет), и они работают все, если включен рост памяти.

(tf2.1) m3088.roebel: (test_sd) 510> grep open trace.log  | grep libcu | grep -v -- -1
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libcuda.so.1", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcudart.so.10.1", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcublas.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../.././libcublasLt.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcufft.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcurand.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcusolver.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcusparse.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcudnn.so.7", O_RDONLY|O_CLOEXEC) = 11

У меня такая же проблема на Ubuntu 20.04 с GeForce RTX 2060 SUPER. Хорошо работает NN с плотными слоями. Но со слоями CNN я получаю 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.
Добавление tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) не влияет на ошибку.
Я следил за установкой согласно https://www.tensorflow.org/install/gpu, и nvidia-smi показывает:
Driver Version: 440.64.00 CUDA Version: 10.2
В моем conda env есть:

cudatoolkit               10.1.243             h6bb024c_0  
cudnn                     7.6.5                cuda10.1_0  
tensorflow-gpu            2.1.0                h0d30ee6_0

В conda env с tf 1.15 я получаю ту же ошибку. Было бы здорово, если бы это можно было исправить.

Обновить

После использования export TF_FORCE_GPU_ALLOW_GROWTH=true все работает. У меня создалось впечатление, что tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) будет делать то же самое, но это не так. Я думаю, это должно быть четко указано на веб-странице поддержки TensorFlow GPU.

@samhodge
На самом деле существует множество версий libcudnn, каждая env anaconda имеет свою собственную версию.
Обычно anaconda устанавливается с правильно настроенным rpath, поэтому довольно сложно получить нужные библиотеки.

Я сделал strace и grepped библиотеки, которые открываются, когда он терпит неудачу
Они постоянно поступают из каталога env anaconda, в котором размещен пакет tensorflow (см. Ниже).
Помимо libcuda, это версия 440.82, которую я скомпилировал с помощью установщика NVIDIA.

Я могу установить LD_LIBRARY_PATH в один из других каталогов anaconda env lib с разными cudatoolkit и разными libcudnn, след остается прежним.
Также обратите внимание, что проблема не в lbcudnn. Это всегда третья библиотека libcuxyz, которая
используется, и это только на определенных графических процессорах (я использовал один и тот же сценарий установки на разных машинах с разными графическими процессорами, некоторые работают, некоторые нет), и они работают все, если включен рост памяти.

(tf2.1) m3088.roebel: (test_sd) 510> grep open trace.log  | grep libcu | grep -v -- -1
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libcuda.so.1", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcudart.so.10.1", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcublas.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../.././libcublasLt.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcufft.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcurand.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcusolver.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcusparse.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcudnn.so.7", O_RDONLY|O_CLOEXEC) = 11

Таким образом, вы как бы иллюстрируете мою точку зрения, что libcudnn.so.7 не говорит, что 7.XXX.YYY поверх этого 7.XXX.YYY имеет дополнительную зависимость от CUDA 10.2 10.1 10.0 9.2 9.1 9.0 т. Д.

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

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

@ kognat-docs

Таким образом, вы как бы иллюстрируете мою мысль, что libcudnn.so.7 не говорит 7.XXX.YYY поверх 7.XXX.YYY имеет дополнительную зависимость от CUDA 10.2 10.1 10.0 9.2 9.1 9.0 и т. Д.

Вы задали вопрос: «Проверяли ли люди две разделяемые библиотеки CuDNN 7 на пути или пути к библиотеке LD». И мой ответ был: я это проверил, есть только один.
Я отправил вам след.

Я не видел ошибки с тех пор, как начал управлять путем

Что вы имеете в виду под управлением путем?
Я всегда веду свой путь! Я установил среду conda, согласованность которой я убедился! Все как было упаковано анакондой, я это проверил.

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

tenorflow / t Ensorflow: 2.1.0-gpu-py3

и запустите там мой скрипт. Он вылетает, если у меня нет

экспорт TF_FORCE_GPU_ALLOW_GROWTH = true

Могу ли я лучше управлять путями?

и управление объемом доступной памяти перед инициализацией графика известного размера и обеспечение того, чтобы целевой графический процессор использовал только достаточно памяти для графика и достаточно памяти, чтобы запросить, сколько памяти CUDA доступно.

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

Как я уже писал в своем отчете, графика нет (точнее, графика почти нет)! Я просто провожу эти четыре строки

import tensorflow as tf
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32), filters=tf.zeros((2,2,20,20), dtype=tf.float32), strides=(1,1,1,1), padding="VALID")

и он вылетает. Если я изменю порядок трех строк, он всегда выйдет из строя после этих трех операций (я объяснил это в своем отчете об ошибке).

Просто для удовольствия посчитал байты: требуется <83 КБ памяти данных. Графический процессор пустой, я не использую его для графики, и на нем нет других запущенных процессов. В различных системах доступно 4 ГБ или 11 ГБ! Кроме того, я умею запускать nvidia-smi! Итак, карта пуста, но я не могу запустить эти 4 строки, требующие 84 КБ!

К вашему сведению, ошибка из-за исчерпания памяти выглядит совсем иначе, у меня такие тоже есть. Что касается моих реальных графиков, я очень хорошо могу их обнаружить и соответствующим образом отреагировать.

В любом случае спасибо за ваши усилия.

@roebel Вы видели комментарий @sanjoy об отладке из cpp https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -561366750?

Я не успел перекомпилировать тензорный поток и попробовать его. Их версии движутся так быстро, что мне потребуется немного времени, чтобы все настроить и скомпилировать. Кроме того, версия 1.15 отказалась от поддержки версии gcc, которую я использую, а версия 1.13 не получает никаких обновлений, так что мне все равно было бессмысленно отлаживать ее.

@roebel Я не вспомнил, что вызвало у вас проблему.

см. это https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -480549043

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

@samhodge

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

@odinsbane

спасибо, нет я этого не заметил. Посмотрю, удастся ли скомпилировать последнюю версию tf2.2.0.

На самом деле я пробовал докер с tenorflow 2.2, он использует ту же версию cuda 10.1 и имеет ту же проблему.

Думал, что это проблема только с Windows, поэтому я установил среду ubuntu с нуля, только чтобы узнать, что проблема в моей видеокарте (RTX 2080). К сожалению, я думаю, что из-за этой проблемы я собираюсь выбрать другую платформу машинного обучения, поскольку, похоже, это проблема с 2018 года.

@ kognat-docs

и управление объемом доступной памяти перед инициализацией графика известного размера и обеспечение того, чтобы целевой графический процессор использовал только достаточно памяти для графика и достаточно памяти, чтобы запросить, сколько памяти CUDA доступно.

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

Как я уже писал в своем отчете, графика нет (точнее, графика почти нет)! Я просто провожу эти четыре строки

import tensorflow as tf
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32), filters=tf.zeros((2,2,20,20), dtype=tf.float32), strides=(1,1,1,1), padding="VALID")

и он вылетает. Если я изменю порядок трех строк, он всегда выйдет из строя после этих трех операций (я объяснил это в своем отчете об ошибке).

Просто для удовольствия посчитал байты: требуется <83 КБ памяти данных. Графический процессор пустой, я не использую его для графики, и на нем нет других запущенных процессов. В различных системах доступно 4 ГБ или 11 ГБ! Кроме того, я умею запускать nvidia-smi! Итак, карта пуста, но я не могу запустить эти 4 строки, требующие 84 КБ!

Вы заметили, сколько памяти было использовано, используя часы на nvidia-smi, когда ваш процесс выполнялся с интервалом 50 мс?

Посмотрите, как это исправление сработало для других людей

https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -497202806

Или вы можете прочитать дружественное руководство:
https://www.tensorflow.org/guide/gpu#limiting_gpu_memory_growth

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

Another way to enable this option is to set the environmental variable TF_FORCE_GPU_ALLOW_GROWTH to true. This configuration is platform specific.

@sanjoy @odinsbane

Хорошие новости!
Следующий
https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -561366750

Я пересобирал версию 2.1, используя рецепт тензорного потока анаконды отсюда
https://github.com/AnacondaRecipes/tensorflow_recipes

Я добавил два отпечатка в MinSystemMemory, показывающие available_memory и min_system_memory.
В моей системе с GeForce GTX 1050 Ti отключением стандартного журнала TF
У меня есть это

TF_CPP_MIN_LOG_LEVEL=2 python run_cuda.py 
=========================================================
MinSystemMemory: available_memory::4163764224
MinSystemMemory: min_system_memory::314572800
=========================================================
1 Physical GPUs, 1 Logical GPUs
2020-05-21 09:44:32.143642: E tensorflow/stream_executor/cuda/cuda_fft.cc:223] failed to make cuFFT batched plan:5
2020-05-21 09:44:32.143671: E tensorflow/stream_executor/cuda/cuda_fft.cc:426] Initialize Params: rank: 1 elem_count: 512 input_embed: 512 input_stride: 1 input_distance: 512 output_embed: 257 output_stride: 1 output_distance: 257 batch_count: 20
2020-05-21 09:44:32.143677: F tensorflow/stream_executor/cuda/cuda_fft.cc:435] failed to initialize batched cufft plan with customized allocator: Failed to make cuFFT batched plan.
Aborted

nvidia-smi сообщает, что объем графического процессора составляет 4040 МБ, в этой системе на карте работает X с 13 МБ, поэтому цифры кажутся хорошими.

min_system_memory устанавливается так

    min_system_memory =                                                                                                                        
        std::max(int64{314572800}, static_cast<int64>(available_memory * 0.05));                                                               

Так что в любом случае выбирается максимальный объем памяти. Вместо этого я добавил механизм для принудительной установки min_system_memory через переменную среды TF_FORCE_MIN_SYSTEM_MEMORY_MB.
Затем бег

TF_FORCE_MIN_SYSTEM_MEMORY_MB=310 TF_CPP_MIN_LOG_LEVEL=2 python run_cuda.py 
=========================================================
MinSystemMemory: available_memory::4163764224
MinSystemMemory: min_system_memory::314572800
MinSystemMemory: forced min_system_memory::325058560
=========================================================
1 Physical GPUs, 1 Logical GPUs
done

проблема решена!

К сожалению, в настоящее время у меня нет системы с работающей картой RTX, и я не уверен, когда она снова заработает. Если кто-нибудь захочет протестировать это на такой карте, я могу предоставить пакет pip и содержимое среды conda для ubuntu linux, которое необходимо установить для его запуска.

Хорошенький @roebel !

Возможно, стоит предложить это как запрос на перенос и добавить в документы.

@samhodge @sanjoy @odinsbane

Возможно, стоит предложить это как запрос на перенос и добавить в документы.

Конечно, но проблема в том, что решение, вероятно, не подойдет для других карт.
Для моего GTX 1050 общая память составляет 4 ГБ, а системная память по умолчанию сохранена.
по тензорному потоку составляет макс (300 МБ, 4 ГБ * 0,05). Так что для GTX1050 это будет 300 МБ, что явно слишком мало. Как упоминалось выше, мне нужно увеличить до 310 МБ.

Теперь для RTX2080 общий объем памяти составляет 11 ГБ, при максимальном (300 МБ, 11 ГБ * 0,05)
выберет системную память размером 550 МБ, что, согласно результатам исследования 1050
обычно должно быть достаточно.

К концу недели у меня снова будет доступ к графическим процессорам RTX2080, и я посмотрю
что я там получаю.

@samhodge @sanjoy @odinsbane

Наконец-то я смог запустить пропатченную библиотеку на картах RTX 2080.
Как и ожидалось, патченная версия не проходит. Здесь снова сценарий

import tensorflow as tf
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32), filters=tf.zeros((2,2,20,20), dtype=tf.float32), strides=(1,1,1,1), padding="VALID")

А вот матрица available memory полученная из gpu_device.cc,
значение по умолчанию Min_system_memory выбранное в gpu_device.cc и
min value of the min_system_memory Мне нужно выбрать, чтобы сценарий не прерывался:

Карта | AvailMem | Def MinSysMem | Требуется MinSysMem
: ------- |: ----------- |: ---------- |: --------------- --------
1050 TI | 4163764224 | 314572800 | 325058560
1080 TI | 11567431680 | 578371584 | 335544320
2080 TI | 11381964800 | 569098240 | 618659840

Итак, пока 1050 и 1080 запускают скрипт с примерно одинаковым объемом памяти
RTX2080 требует почти вдвое больше памяти. Это не звучит хорошо
мне.

Есть предложения, что попытаться получить сопоставимое значение?

@roebel

Я боролся с этим в своем приложении на C ++ в течение нескольких итераций.

В итоге свелось к следующему.

Запускайте модели на графическом процессоре только при наличии достаточного объема памяти для запуска модели.

Таким образом, объем памяти, который потребуется модели, можно измерить.

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

Затем вам также необходимо точно знать, сколько памяти доступно на карте, прежде чем выделять память, которая зависит от условий гонки, потому что вы не знаете, что еще использует память CUDA в то же время в операционной системе.

Но если оставить в стороне состояние гонки, вам также необходимо измерить объем свободной памяти.

Это делается с помощью cudaMemInfo , который сам по себе использует память.

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

В любом случае вывод из моего случайного лепета состоит в том, что для опроса объема доступной для выделения памяти требуется cudaMemInfo который сам по себе также использует часть этой доступной памяти.

Может быть, каким-то образом объем памяти, используемый cudaMemInfo , отличается на карте на основе Тьюринга по сравнению с картой на основе Pascal, я могу попросить кого-нибудь из NVIDIA взглянуть, если хотите.

Да, я вообще не могу найти ссылку на cudaMemInfo но это похоже на то, что занимает не более 300 МБ и 5% памяти карты.

посмотрев на:

https://github.com/tensorflow/tensorflow/blob/r2.2/tensorflow/core/common_runtime/gpu/gpu_process_state.cc

Не похоже, что он использует это как таковое.

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

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

CC @chsigg

Наверное, это стоит делать только в том случае, если разрешить рост памяти отключено. В противном случае вам всегда понадобится около 580 МБ для 2080, даже если вам не нужны все операторы.

Я провел еще несколько тестов, касающихся минимальных требований к системной памяти для выполнения комбинаций трех операций из моего тестового примера. Сравниваю только карты 1080 и 2080. Вы не найдете только conv2d, потому что он в любом случае инициализирует blas. Выходит

GPU | МатМул | STFT | Conv2D + MatMUL | МатМул + СТФТ | MATMUL + STFT + Conv2D |
: --- |: --- |: --- |: --- |: --- |: ---
1080 | 140MB | 130 МБ | 290MB | 170MB | 320 МБ
2080 | 190MB | 190MB | 520 МБ | 250 МБ | 580 МБ

Можно видеть, что на 2080 cuda требует накладных расходов для каждой операции, и что эти накладные расходы увеличиваются при использовании большего количества библиотек. В большинстве случаев накладные расходы составляют <100MB но при использовании Conv2D они становятся >220MB .

Если @samhodge свяжется с NVIDIA, мне лично было бы интересно узнать, предполагается ли это.

Привет всем!
Я решил аналогичную проблему с ограничением роста памяти, и вы можете попробовать.

Вы можете найти код в разделе Ограничение роста памяти

(Это мой первый комментарий в GitHub)

У меня раньше была аналогичная проблема. ограничение памяти GPU вручную помогло. https://github.com/tensorflow/tensorflow/issues/25160#issuecomment -643703167

У меня такая же проблема на Ubuntu 20.04 с GeForce RTX 2060 SUPER. Хорошо работает NN с плотными слоями. Но со слоями CNN я получаю 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.
Добавление tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) не влияет на ошибку.
Я следил за установкой согласно https://www.tensorflow.org/install/gpu, и nvidia-smi показывает:
Driver Version: 440.64.00 CUDA Version: 10.2
В моем conda env есть:

cudatoolkit               10.1.243             h6bb024c_0  
cudnn                     7.6.5                cuda10.1_0  
tensorflow-gpu            2.1.0                h0d30ee6_0

В conda env с tf 1.15 я получаю ту же ошибку. Было бы здорово, если бы это можно было исправить.

Обновить

После использования export TF_FORCE_GPU_ALLOW_GROWTH=true все работает. У меня создалось впечатление, что tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) будет делать то же самое, но это не так. Я думаю, это должно быть четко указано на веб-странице поддержки TensorFlow GPU.

Чувак, твое решение спасает мне жизнь.

Nvidia только что выпустила драйверы дисплея для Linux 440.100 и 450.51 (бета).
Я попробовал 440.100, и это не помогло. Кто-нибудь пробовал бету 450.51?

@eduardoscsouza

Nvidia только что выпустила драйверы дисплея для Linux 440.100 и 450.51 (бета).
Я попробовал 440.100, и это не помогло. Кто-нибудь пробовал бету 450.51?

Пробовал 450.36.06. проверьте https://github.com/tensorflow/tensorflow/issues/25160#issuecomment -643703167.

код, который работал у меня:

импортировать тензорный поток как tf
config = tf.compat.v1.ConfigProto ()
config.gpu_options.allow_growth = Истина
сеанс = tf.compat.v1.InteractiveSession (config = config)

_Пожалуйста, убедитесь, что это ошибка. В соответствии с нашей политикой GitHub мы решаем только ошибки кода / документации, проблемы с производительностью, запросы функций и проблемы сборки / установки на GitHub. тег: bug_template_

Системная информация

  • Написал ли я собственный код (в отличие от использования стандартного примера сценария, представленного в TensorFlow): Да и Нет (описано ниже)
  • Платформа и распространение ОС (например, Linux Ubuntu 16.04): Manjaro
  • Мобильное устройство (например, iPhone 8, Pixel 2, Samsung Galaxy), если проблема возникает на мобильном устройстве:
  • TensorFlow установлен из (исходного или двоичного): tf-nightly-gpu (19 декабря, r1.13)
  • Версия TensorFlow (используйте команду ниже): 1.13.0-dev20181219
  • Версия Python: 3.7.1
  • Версия Bazel (при компиляции из исходников):
  • Версия GCC / Compiler (при компиляции из исходников):
  • Версия CUDA / cuDNN: CUDA 10 с cuDNN 7.4.1
  • Модель графического процессора и память: RTX 2070 8 ГБ

Опишите текущее поведение
Я использую модель CNN на MNIST. Когда я работаю с графическим процессором, я сталкиваюсь с
2018-12-20 20:09:13.644176: E tensorflow/stream_executor/cuda/cuda_dnn.cc:334] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

Я покопался и понял, что это проблема с памятью (чего не должно быть, так как у меня 32 ГБ ОЗУ и 64 ГБ подкачки. Я запускал htop при запуске модели, и у меня 20+ ГБ свободного места, что больше, чем достаточно для сопоставления 8 ГБ vRAM.

Использование gpu_options.allow_growth = True заставляет модель работать правильно, а установка os.environ['CUDA_VISIBLE_DEVICES'] = '-1' также работает. Это означает, что я столкнулся с проблемой памяти, но не понимаю, как это сделать.

Кроме того, использование gpu_options.allow_growth = True не устраняет ту же проблему при попытке запустить tensorflow / models / official / mnist / model, который должен иметь аналогичное поведение с моим кодом.

Код для воспроизведения проблемы

import os
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import math
import time
# Killing optional CPU driver warnings
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
tf.logging.set_verbosity(tf.logging.ERROR)


class Model:

    def __init__(self, image, label):
        """
        A Model class contains a computational graph that classifies images
        to predictions. Each of its methods builds part of the graph
        on Model initialization. Do not modify the constructor, as doing so
        would break the autograder. You may, however, add class variables
        to use in your graph-building. e.g. learning rate, 

        image: the input image to the computational graph as a tensor
        label: the correct label of an image as a tensor
        prediction: the output prediction of the computational graph,
                    produced by self.forward_pass()
        optimize: the model's optimizing tensor produced by self.optimizer()
        loss: the model's loss produced by computing self.loss_function()
        accuracy: the model's prediction accuracy
        """
        self.image = image
        self.label = label

        # TO-DO: Add any class variables you want to use.

        self.prediction = self.forward_pass()
        self.loss = self.loss_function()
        self.optimize = self.optimizer()
        self.accuracy = self.accuracy_function()

    def forward_pass(self):
        """
        Predicts a label given an image using convolution layers

        :return: the prediction as a tensor
        """
        filter_1 = tf.Variable(tf.truncated_normal([3, 3, 1, 8], stddev=0.1))
        conv_1 = tf.nn.conv2d(self.image, filter_1, [1, 1, 1, 1], "SAME")

        reshaped = tf.reshape(conv_1, shape=[50, -1])

        L1 = reshaped.shape[1].value
        L2 = 500
        W1 = tf.Variable(tf.random_normal([L1, L2], mean=0, stddev=0.01))
        b1 = tf.Variable(tf.random_normal([L2], mean=0, stddev=0.01))
        relu_1 = tf.nn.relu(tf.matmul(reshaped, W1) + b1)

        W2 = tf.Variable(tf.random_normal([L2, 10], mean=0, stddev=0.01))
        b2 = tf.Variable(tf.random_normal([10], mean=0, stddev=0.01))
        logits = tf.nn.relu(tf.matmul(relu_1, W2) + b2)
        return logits

    def loss_function(self):
        """
        Calculates the model cross-entropy loss

        :return: the loss of the model as a tensor
        """
        loss = tf.losses.softmax_cross_entropy(onehot_labels=self.label, logits=self.prediction)
        return loss

    def optimizer(self):
        """
        Optimizes the model loss using an Adam Optimizer

        :return: the optimizer as a tensor
        """
        learning_rate = 0.1
        sgd = tf.train.GradientDescentOptimizer(learning_rate)
        train = sgd.minimize(self.loss)
        return train

    def accuracy_function(self):
        """
        Calculates the model's prediction accuracy by comparing
        predictions to correct labels – no need to modify this

        :return: the accuracy of the model as a tensor
        """
        correct_prediction = tf.equal(tf.argmax(self.prediction, 1),
                                      tf.argmax(self.label, 1))
        return tf.reduce_mean(tf.cast(correct_prediction, tf.float32))


def main():
    t_start = time.time()

    mnist = input_data.read_data_sets("data/mnist/", one_hot=True)
    batch_sz = 50
    batch = 2000

    inputs = tf.placeholder(shape=[batch_sz, 28, 28, 1], dtype=tf.float32)
    labels = tf.placeholder(shape=[batch_sz, 10], dtype=tf.float32)

    model = Model(inputs, labels)

    session_config = tf.ConfigProto(gpu_options=tf.GPUOptions(allow_growth=True))
    sess = tf.Session(config=session_config)

    # sess = tf.Session()

    sess.run(tf.global_variables_initializer())
    for i in range(batch):
        next_image, next_label = mnist.train.next_batch(batch_sz)
        next_image = next_image.reshape((batch_sz, 28, 28, 1))
        sess.run(model.optimize, feed_dict={inputs: next_image, labels: next_label})

    acc, test_images, test_labels = 0, mnist.test.images, mnist.test.labels
    test_batch = math.ceil(len(test_images) / batch_sz)
    for i in range(test_batch):
        batch_images = test_images[i * batch_sz: (i + 1) * batch_sz]
        batch_images = batch_images.reshape((batch_sz, 28, 28, 1))
        batch_labes = test_labels[i * batch_sz: (i + 1) * batch_sz]
        acc += sess.run(model.accuracy, feed_dict={inputs: batch_images, labels: batch_labes})
    acc /= test_batch
    print(acc)

    print(time.time() - t_start, 'seconds')

    return


if __name__ == '__main__':
    main()

Это сработало для меня.RTX 2060убунту 18.04Python 3.6

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

config = ConfigProto()
config.gpu_options.allow_growth = True
sess = InteractiveSession(config=config)
with sess.as_default():
       process ...

Привет @ bm777

после моего расследования, проведенного несколько месяцев назад, я резюмирую, как я понимаю проблему

Модель графического процессора и память: RTX 2070 8 ГБ
... чего не должно быть, поскольку у меня 32 ГБ ОЗУ и 64 ГБ

Проблема не в системной памяти, проблема в памяти GPU!

os.environ ['CUDA_VISIBLE_DEVICES'] = '-1'

работает, потому что не использует графический процессор!

Несколько объяснений:

ТФ имеет два режима работы:

  1. allow memory growth = false : в этом случае TF предварительно выделяет память для системных библиотек, используя приблизительное предположение
    сколько памяти нужно. Как вы можете прочитать здесь https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -633953715 TF использует формулу max(300MB, GPU-MEM * fac) для этого предположения. Для TF2.1 fac = 0.05 для TF2.2 и если я
    помните, правильно это fac=0.07 . Итак, теперь у вас есть 8 ГБ, что дает 400 МБ для предварительно выделенной памяти графического процессора в TF2.1.
    и 560 МБ в TF2.2.

    Я экспериментально оценил необходимую предварительно выделенную память для нескольких графических процессоров и TF21 здесь: https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -637715002 и здесь https://github.com/tensorflow/tensorflow / issues / 24496 # issuecomment -637715002

    Оказывается, для операций Conv2D мне нужно было 520 МБ, у вас будет меньше, чем в TF21, но больше в TF22. К сожалению, вы не упоминаете свою версию TF, но я предполагаю, что вы используете TF2.1. Если вы используете TF2.2, но он все равно не работает, это может быть связано с тем, что вы используете другой графический процессор. Во всяком случае, это не так. Смотри ниже

2) allow memory growth = true : TF не использует предварительно выделенную память и загружает библиотеки по мере их поступления. В документации по TF это объявлено проблемным из-за потенциальной фрагментации памяти и поэтому по умолчанию off .

Мое мнение:

Учитывая большой диапазон требуемой памяти для библиотек, который зависит от операций, которые вы выполняете, а также на имеющемся у вас графическом процессоре, кажется очень сложным получить правильный режим allow memory growth = false (см. Https://github.com/tensorflow/ tenorflow / issues / 24496 # issuecomment-637950411). Текущее решение: увеличить размер предварительно выделенной памяти, что было сделано для TF2.2, проблематично, если ваш графический процессор довольно мал. Это блокирует использование памяти при условии, что вам понадобятся все доступные библиотеки (blas, Conv, FFT, и я не знаю, есть ли другие). В случае, если вы не используете все это, это приведет к потере заранее выделенной памяти, что, в свою очередь, уменьшит размер модели, которую вы можете загрузить для своего приложения. С другой стороны, я считаю, что проблему фрагментации памяти можно предотвратить, если вы создаете модели на раннем этапе, заставляя системные библиотеки загружаться до начала обучения. Кажется, что в любом случае это происходит в большинстве случаев, и поэтому кажется полезным, особенно для графических процессоров с небольшой памятью и особенно для обучения одной модели, не выделять заранее, а использовать allow memory growth = true .

Лично я использую графические процессоры с объемом памяти от 4 до 11 ГБ, и, следуя приведенному выше аргументу, я установил TF_FORCE_GPU_ALLOW_GROWTH = true для всех из них. На данный момент у меня не было никаких проблем с этим.

Привет @roebel

Я тоже думал о проблемах с ошибкой выделения памяти. Это ясно для меня сейчас.
Теперь неплохо выглядит память GPU

В прошлом я тестировал множество вариантов предварительного выделения памяти 😢:

gpus = tf.config.experimental.list_physical_devices('GPU')
try:
    tf.config.experimental.set_virtual_device_configuration(gpus[0], 
                 tf.config.experimental.VirtualDeviceConfiguration(memory_limit=5044)])
    """process...."""
except Exception as e:
    raise e

Лично я использую графический процессор с 6 ГБ памяти.
И спасибо, @roebel , за эту новую стрелку TF_FORCE_GPU_ALLOW_GROWTH=true заставляющую мой GPU выделить.

У меня была такая же проблема. Я могу с уверенностью сказать, что проблема возникает только на моем 2070 RTX, а НЕ на Titan RTX, использующем точно такой же код.

https://github.com/DeepLabCut/DeepLabCut/issues/837

Просто обновитесь до Tensorflow 2.3 с CUDA 11 и cudnn 8.0. Он волшебным образом решил все мои проблемы, и мне даже не нужно обходное решение с config.gpu_options.allow_growth = True сейчас.

к сожалению, мне нужно запустить код, который поддерживает только tensorflow 1.X

Просто обновитесь до Tensorflow 2.3 с CUDA 11 и cudnn 8.0. Он волшебным образом решил все мои проблемы, и мне даже не нужно обходное решение с config.gpu_options.allow_growth = True сейчас.

Обновление с 2.2 до 2.3 даже с явным TF_FORCE_GPU_ALLOW_GROWTH=false решило эту проблему и для меня (по крайней мере, сейчас я могу запускать демонстрационный код delf ; не тестировал ни с чем).

Я все еще использую CUDA 10.1, Cudnn 7.6.5.

Есть ли решение этой проблемы с tenorflow 2 и python3 ???

У меня есть:
RTX 2080

Я получаю это сообщение:


2020-08-20 12:38:27.172496: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-08-20 12:38:27.177708: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
Traceback (most recent call last):
  File "/home/anantha/Desktop/RaspiCar/car.py", line 85, in <module>
    tnet.train(x, y)
  File "/home/anantha/Desktop/RaspiCar/car.py", line 65, in train
    self.model.fit(x, y, epochs=epochs)
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 66, in _method_wrapper
    return method(self, *args, **kwargs)
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 848, in fit
    tmp_logs = train_function(iterator)
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 580, in __call__
    result = self._call(*args, **kwds)
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 644, in _call
    return self._stateless_fn(*args, **kwds)
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 2420, in __call__
    return graph_function._filtered_call(args, kwargs)  # pylint: disable=protected-access
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 1661, in _filtered_call
    return self._call_flat(
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 1745, in _call_flat
    return self._build_call_outputs(self._inference_function.call(
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 593, in call
    outputs = execute.execute(
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/eager/execute.py", line 59, in quick_execute
    tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
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 sequential/conv2d/Conv2D (defined at /Desktop/RaspiCar/car.py:65) ]] [Op:__inference_train_function_951]

Function call stack:
train_function

Если ваша проблема имеет то же происхождение, что и проблемы, рассматриваемые в настоящем выпуске (о которых я не могу узнать из вашего отчета), то есть несколько решений, которые вы можете легко найти, прочитав последние 10-20 сообщений в этом выпуске. нить.

Я исправил это с помощью этого:

config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.compat.v1.Session(config=config)
sess.as_default()

У меня была такая же проблема с 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)

Всем спасибо

Думаю, мы можем прекратить публиковать исправление allow_growth сейчас :)

RTX 2070 здесь. Получал эту ошибку, но теперь работает с TF_FORCE_GPU_ALLOW_GROWTH=true (как указывали другие комментаторы, исправляет это для них) изменяет сообщение об ошибке на ошибку нехватки памяти (хотя у меня много памяти):

2020-10-17 16:35:11.717658: I tensorflow/stream_executor/cuda/cuda_driver.cc:831] failed to allocate 3.87G (4159818752 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY: out of memory

Но мой графический процессор имеет 8 ГБ, и до того, как я начал процесс, использовалось только около 250 МБ. Я не понимаю, почему он не может выделить 3,87 ГБ? (уменьшение размера пакета не повлияло; файл веса hdf5 меньше 200 МБ)

TF_FORCE_GPU_ALLOW_GROWTH = true у меня сработало.
tf.config.experimental.set_memory_growth (gpu, True) тоже работал.

Вот моя конфигурация:
Графический процессор GTX 1650
cuda-10-1 10.1.243-1
libcudnn7 7.6.5.32-1 + cuda10.1
Ubuntu 18.04.5 LTS

Тот, кто не может установить переменную среды, может попробовать это, как предлагается в https://www.tensorflow.org/guide/gpu :
gpus = tf.config.experimental.list_physical_devices ('GPU')
если gpus:
пытаться:
# В настоящее время рост памяти должен быть одинаковым для всех графических процессоров
для gpu в gpus:
tf.config.experimental.set_memory_growth (GPU, True)
логический_gpus = tf.config.experimental.list_logical_devices ('GPU')
print (len (gpus), «Физические графические процессоры», len (logical_gpus), «Логические графические процессоры»)
кроме RuntimeError как e:
# Рост памяти должен быть установлен до инициализации графических процессоров
печать (е)

Ввод команды, упомянутой в терминале, у меня сработал.

https://github.com/tensorflow/tfjs/issues/671#issuecomment -494832790

Просто обновитесь до Tensorflow 2.3 с CUDA 11 и cudnn 8.0. Он волшебным образом решил все мои проблемы, и мне даже не нужно обходное решение с config.gpu_options.allow_growth = True сейчас.

Похоже, проблема замечена и решена в tenorflow 2.3.0.

  • CUDA 10.1
  • Графический процессор: Quadro RTX 6000
  • Тензорфлоу 2.2.0
  • cudnn 7.6.5

Та же проблема:
tensorflow/stream_executor/cuda/cuda_dnn.cc:328] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
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.

И обходной путь allow_growth = True не помогает.

После обновления tenorflow до 2.3.0 проблема исчезла, даже без добавления строки allow_growth = True .

хорошо, заставил его работать в tf-nightly-gpu-2.0-preview и ipython notebook, добавив это в мой код:

из tensorflow.compat.v1 импорт ConfigProto
из tensorflow.compat.v1 импорт InteractiveSession

config = ConfigProto ()
config.gpu_options.allow_growth = Истина
сеанс = InteractiveSession (config = config)

это работает в моем случае

Была ли эта страница полезной?
0 / 5 - 0 рейтинги