Tensorflow: Cudnn-Handle konnte nicht erstellt werden: CUDNN_STATUS_INTERNAL_ERROR

Erstellt am 21. Dez. 2018  ·  181Kommentare  ·  Quelle: tensorflow/tensorflow

Bitte stellen Sie sicher, dass dies ein Fehler ist. tag: bug_template

System Information

  • Habe ich benutzerdefinierten Code geschrieben (im Gegensatz zur Verwendung eines in TensorFlow bereitgestellten Beispielskripts): Ja und Nein (unten beschrieben)
  • Betriebssystemplattform und -verteilung (z. B. Linux Ubuntu 16.04): Manjaro
  • Mobiles Gerät (z. B. iPhone 8, Pixel 2, Samsung Galaxy), wenn das Problem auf einem mobilen Gerät auftritt:
  • TensorFlow installiert von (Quelle oder Binärdatei): tf-nightly-gpu (19. Dezember, r1.13)
  • TensorFlow-Version (Befehl unten verwenden): 1.13.0-dev20181219
  • Python-Version: 3.7.1
  • Bazel-Version (wenn aus der Quelle kompiliert):
  • GCC / Compiler-Version (beim Kompilieren aus dem Quellcode):
  • CUDA / cuDNN-Version: CUDA 10 mit cuDNN 7.4.1
  • GPU-Modell und Speicher: RTX 2070 8 GB

Beschreiben Sie das aktuelle Verhalten
Ich verwende das CNN-Modell auf MNIST. Wenn ich mit der GPU laufe, stoße ich auf
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

Ich habe ein bisschen gegraben und festgestellt, dass es sich um ein Speicherproblem handelt (was nicht der Fall sein sollte, da ich 32 GB RAM und 64 GB Swap habe. Ich habe htop ausgeführt, als ich das Modell ausgeführt habe, und ich habe 20 + GB frei, was mehr als ist genug für die 8 GB vRAM-Zuordnungen.

Wenn Sie gpu_options.allow_growth = True verwenden, funktioniert das Modell ordnungsgemäß, und das Festlegen von os.environ['CUDA_VISIBLE_DEVICES'] = '-1' funktioniert ebenfalls. Dies bedeutet, dass ich mit einem Speicherproblem konfrontiert bin, aber ich sehe nicht wie.

Die Verwendung von gpu_options.allow_growth = True behebt nicht das gleiche Problem, wenn versucht wird, Tensorflow / Models / Official / Mnist / Model auszuführen, das sich mit meinem Code ähnlich verhalten sollte.

Code zur Reproduktion des Problems

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

Hilfreichster Kommentar

Ich habe versucht, aus dem Quellcode zu kompilieren, bin aber auf dasselbe Problem gestoßen. Ich konnte endlich mein Problem beheben, indem ich config.gpu_options.allow_growth = True .

Alle 181 Kommentare

Ich bin auf dasselbe Problem mit derselben GPU gestoßen: "CUDNN_STATUS_INTERNAL_ERROR".

RTX 2070 GPU
CUDA 10
cuDNN 7.4.2
Ubuntu 18.04
tf-nightly-gpu (r1.13, 13. Januar)
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.

Ich habe das gleiche Problem

RTX2080 GPU
CUDA 10
cudnn 7.4.2

Ich habe die folgenden tf-Versionen tf-nightly-gpu und eine selbst kompilierte Version von master (060b6e32ad) ausprobiert.
Ich fand heraus, dass es möglich ist, die folgenden ENVIRONMENT-Variablen festzulegen, um weitere Debug-Informationen zu erhalten.

CUDNN_LOGINFO_DBG = 1;
CUDNN_LOGDEST_DBG = stdout

Dann bekomme ich folgenden Fehler:

I0117 14: 11: 24.441819 140433563125568 basic_session_run_hooks.py:594] Speichern von Prüfpunkten für 0 in /tmp/mnist/model.ckpt.
2019-01-17 14: 11: 25.916269: I tensorflow / stream_executor / platform / default / dso_loader.cc: 154] hat die CUDA-Bibliothek libcublas.so.10.0 erfolgreich lokal geöffnet

ICH! Die CuDNN (v7402) -Funktion cudnnCreate () heißt:
ich! Zeit: 2019-01-17T14: 11: 26.079184 (0d + 0h + 0m + 0s seit dem Start)
ich! Prozess = 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] hat die CUDA-Bibliothek libcudnn.so.7 erfolgreich lokal geöffnet

ICH! Die CuDNN (v7402) -Funktion cudnnCreate () heißt:
ich! Zeit: 2019-01-17T14: 11: 26.571897 (0d + 0h + 0m + 0s seit dem Start)
ich! Prozess = 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-Handle konnte nicht erstellt werden: CUDNN_STATUS_INTERNAL_ERROR
2019-01-17 14: 11: 26.579375: E tensorflow / stream_executor / cuda / cuda_dnn.cc: 493] Cudnn-Handle konnte nicht erstellt werden: CUDNN_STATUS_INTERNAL_ERROR

ICH! Die CuDNN (v7402) -Funktion cudnnCreate () heißt:
ich! Zeit: 2019-01-17T14: 11: 26.579803 (0d + 0h + 0m + 0s seit dem Start)
ich! Prozess = 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-Handle konnte nicht erstellt werden: CUDNN_STATUS_INTERNAL_ERROR
2019-01-17 14: 11: 26.585850: W ./tensorflow/stream_executor/stream.h:2109] Versuch, einen DNN-Vorgang mit StreamExecutor ohne DNN-Unterstützung auszuführen
Traceback (letzter Anruf zuletzt):
Datei "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", Zeile 1335, in _do_call
return fn (* args)
Datei "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", Zeile 1320, in _run_fn
Optionen, feed_dict, fetch_list, target_list, run_metadata)
Datei "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", Zeile 1408, in _call_tf_sessionrun
run_metadata)
tensorflow.python.framework.errors_impl.UnknownError: Faltungsalgorithmus konnte nicht abgerufen werden. Dies liegt wahrscheinlich daran, dass cuDNN nicht initialisiert werden konnte. Überprüfen Sie daher, ob oben eine Warnprotokollmeldung gedruckt wurde.
[[{{node Discriminator_1 / Conv / Conv2D}}]]
[[train / diskriminator_train / train_op / control_dependency / _569]]

Während der Behandlung der obigen Ausnahme ist eine weitere Ausnahme aufgetreten:

Traceback (letzter Anruf zuletzt):
Datei "/home/dj/projects/gan/tf_models/research/gan/mnist/train.py", Zeile 151, in
tf.app.run ()
Datei "/usr/local/lib/python3.6/dist-packages/tensorflow/python/platform/app.py", Zeile 125, wird ausgeführt
_sys.exit (main (argv))
Datei "/home/dj/projects/gan/tf_models/research/gan/mnist/train.py", Zeile 147, in main
get_hooks_fn = tfgan.get_joint_train_hooks ())
Datei "/usr/local/lib/python3.6/dist-packages/tensorflow/contrib/gan/python/train.py", Zeile 1200, in gan_train
config = config)
Datei "/usr/local/lib/python3.6/dist-packages/tensorflow/contrib/training/python/training/training.py", Zeile 546, im Zug
loss = session.run (train_op, run_metadata = run_metadata)
Datei "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", Zeile 693, wird ausgeführt
run_metadata = run_metadata)
Datei "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", Zeile 1188, wird ausgeführt
run_metadata = run_metadata)
Datei "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", Zeile 1287, wird ausgeführt
erhöhen Sie six.reraise ( original_exc_info)Datei "/usr/local/lib/python3.6/dist-packages/six.py", Zeile 693, in reraiseWert steigernDatei "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", Zeile 1272, wird ausgeführtreturn self._sess.run ( args, ** kwargs)
Datei "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", Zeile 1336, wird ausgeführt
feed_dict, Optionen)
Datei "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", Zeile 1362, in _call_hook_before_run
request = hook.before_run (run_context)
Datei "/usr/local/lib/python3.6/dist-packages/tensorflow/contrib/gan/python/train.py", Zeile 1061, in before_run
run_context.session.run (self._train_ops)
Datei "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", Zeile 930, wird ausgeführt
run_metadata_ptr)
Datei "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", Zeile 1153, in _run
feed_dict_tensor, options, run_metadata)
Datei "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", Zeile 1329, in _do_run
run_metadata)
Datei "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", Zeile 1349, in _do_call
Erhöhen Sie den Typ (e) (node_def, op, message)
tensorflow.python.framework.errors_impl.UnknownError: Faltungsalgorithmus konnte nicht abgerufen werden. Dies liegt wahrscheinlich daran, dass cuDNN nicht initialisiert werden konnte. Überprüfen Sie daher, ob oben eine Warnprotokollmeldung gedruckt wurde.
[[Knoten Discriminator_1 / Conv / Conv2D (definiert zu Hause / dj / projects / gan / tf_models / research / gan / mnist / networks.py: 152)]]
[[train / diskriminator_train / train_op / control_dependency / _569]]

Fehler können von einer Eingabeoperation herrühren.
Eingangsquellenoperationen, die mit dem Knoten Discriminator_1 / Conv / Conv2D verbunden sind:
Eingaben / batch / n (zu Hause definiert / dj / projects / gan / tf_models / research / gan / mnist / data_provider.py: 67)

Original-Stack-Trace für 'Discriminator_1 / Conv / Conv2D':
Datei "home / dj / projects / gan / tf_models / research / gan / mnist / train.py", Zeile 151, in
tf.app.run ()
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / python / platform / app.py", Zeile 125, in Ausführung
_sys.exit (main (argv))
Datei "home / dj / projects / gan / tf_models / research / gan / mnist / train.py", Zeile 87, hauptsächlich
[FLAGS.batch_size, FLAGS.noise_dims]))
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / gan / python / train.py", Zeile 118, in gan_model
Diskriminator_real_outputs = Diskriminator_fn (real_data, generator_inputs)
Datei "home / dj / projects / gan / tf_models / research / gan / mnist / networks.py", Zeile 176, in unconditional_discriminator
net = _discriminator_helper (img, False, None, weight_decay)
Datei "home / dj / projects / gan / tf_models / research / gan / mnist / networks.py", Zeile 152, in _discriminator_helper
net = layer.conv2d (img, 64, [4, 4], stride = 2)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / Contrib / Framework / Python / ops / arg_scope.py", Zeile 182, in func_with_args
return func ( args, * current_args)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / Contrib / Layer / Python / Layer / Layer.py", Zeile 1155, in convolution2d
conv_dims = 2)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / Contrib / Framework / Python / ops / arg_scope.py", Zeile 182, in func_with_args
return func ( args, * current_args)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / Contrib / Layer / Python / Layer / Layer.py", Zeile 1058, in Faltung
Ausgaben = layer.apply (Eingaben)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / python / keras / engine / base_layer.py", Zeile 1228, in Apply
return self .__ call __ (Eingaben, Argumente, * kwargs)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / python / layer / base.py", Zeile 531, in __call__
output = super (Layer, self) .__ call __ (Eingaben, args, * kwargs)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / python / keras / engine / base_layer.py", Zeile 564, in __call__
output = self.call (Eingaben, Argumente, * kwargs)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / python / keras / layer / convolutional.py", Zeile 196, im Aufruf
output = self._convolution_op (input, self.kernel)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py", Zeile 966, in __call__
return self.conv_op (inp, filter)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py", Zeile 591, in __call__
return self.call (inp, filter)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py", Zeile 208, in __call__
name = self.name)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py", Zeile 1578, in conv2d
Name = Name)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / gen_nn_ops.py", Zeile 1040, in conv2d
Datenformat = Datenformat, Dilatationen = Dilatationen, Name = Name)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / python / framework / op_def_library.py", Zeile 788, in _apply_op_helper
op_def = op_def)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / python / util / deprecation.py", Zeile 501, in new_func
return func ( args, * kwargs)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / python / framework / ops.py", Zeile 3300, in create_op
op_def = op_def)
Datei "usr / local / lib / python3.6 / dist-packages / tensorflow / python / framework / ops.py", Zeile 1801, in __init__
self._traceback = tf_stack.extract_stack ()

Irgendwelche Ideen jemand? Ich bin kurz vor der Neuinstallation meiner gesamten Umgebung :-(

Versuchen Sie, r1.13 aus dem Quellcode zu kompilieren. Es würde lange dauern, aber es sollte Ihr Problem beheben. Zumindest hat es mein Problem behoben.

Ich habe versucht, aus dem Quellcode zu kompilieren, bin aber auf dasselbe Problem gestoßen. Ich konnte endlich mein Problem beheben, indem ich config.gpu_options.allow_growth = True .

Ich hatte das gleiche Problem (auf einem RTX 2060, Ubuntu 18.04, Python 3.6.7, CUDA 10.0.130, cuDNN 7.4.2, Tensorflow 1.13.0-rc0 aus dem Quellcode). Dank des Vorschlags von @ va-andrew funktioniert es mit dem Optionssatz allow_growth .

FWIW, bei der Suche nach Lösungen für dieses Problem scheint dieses Problem ein häufiges Problem bei der RTX-Serie zu sein (obwohl es bei CUDA 10.0 möglicherweise ein allgemeines Problem darstellt, da die neuen Karten die älteren Versionen nicht unterstützen). Es wäre großartig, wenn die Standardeinstellungen in Version 1.13 aktualisiert werden könnten, sodass für diese Karten keine speziellen Optionen festgelegt werden müssen.

Ich habe gesagt, dass ich dies auch unter der folgenden Konfiguration erlebt habe:

Tensorflow Docker-GPU-Container mit stabilen Releases von allem funktionieren ebenfalls nicht (sie führen direkt zu Segfault, anstatt CUDNN_STATUS_INTERNAL_ERROR zu melden).

Seltsamerweise funktionieren die Dinge unter Windows 10 mit Tensorflow v1.12 einwandfrei!

Und haben andere berichtet, dass durch das Setzen von allow_growth die Dinge ordnungsgemäß ausgeführt werden können.

Selbes Problem hier.

  • RTX 2070
  • Ubuntu 18.04
  • CudNN 7.4.2 (aber ich habe versucht, mit anderen älteren Versionen ohne Glück zu kompilieren)
  • Tensorflow 1.13.0-dev20190125 (auch versucht Tensorflow 1.12 mit Cuda 10 kompiliert)

Und wie andere berichtet haben, können mit der Einstellung allow_growth = TRUE Dinge ausgeführt werden.

Schließen dieses Problems, seit es behoben ist. Vielen Dank!

@ymodak Kannst du bitte auf die PR verweisen, die diesen Fehler behoben hat?

Ich habe ein ähnliches Problem mit tf-nightly-gpu-2.0-preview auf dem RTX 2080

Das gleiche Problem mit einem RTX2080, das zwei Tage lang neu kompiliert und nach Fehlern gesucht wurde, bis ich dieses Update gefunden habe.
(das allow_growth = true Ding hat es behoben)

Du hast meinen Tag gerettet

Wie setzt man allow_growth = true? Ich habe tf-nightly-gpu-2.0-Vorschau und versucht:

Tensorflow als tf importieren
config = tf.ConfigProto ()
config.gpu_options.allow_growth = True
session = tf.Session (config = config, ...)

aber erhalte diesen Fehler:

AttributeError Traceback (letzter Aufruf zuletzt)
im()
1 Tensorflow als tf importieren
----> 2 config = tf.ConfigProto ()

AttributeError: Das Modul 'tensorflow' hat kein Attribut 'ConfigProto'.

Wie kann ich allow_growth in Tensorflow 2.0 festlegen?

ok, hat es in tf-nightly-gpu-2.0-preview und ipython notebook funktionieren lassen und dies meinem Code hinzugefügt:

aus tensorflow.compat.v1 ConfigProto importieren
aus tensorflow.compat.v1 InteractiveSession importieren

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

Gleiches Problem, mit gpu_options.allow_growth = True, das Problem wurde behoben.

@newhouseb wie / wo hast du das für alle Benchmarks gesetzt? War es eine einfache Änderung?

Ist Decke Wachstum erlauben eine Lösung?

Es ist aus einem bestimmten Grund standardmäßig deaktiviert
https://www.tensorflow.org/guide/using_gpu#allowing_gpu_memory_growth

In meinem Programm ist die Speicherverwaltung wichtig

Ich möchte die Menge der von TF verwendeten GPU begrenzen, da in meiner Grafikanwendung der GPU-Speicher für andere Zwecke verwendet wird und es wichtig ist, ihn auf engstem Raum zu platzieren, um Speicherfehler zu vermeiden

Ich arbeite in C ++ unter Windows

Das Hinzufügen der Option Wachstum zulassen führt zu einem OOM-Fehler.

Ohne diese Codezeile läuft das Modell auf demselben Computer mit derselben Karte einwandfrei.

Mit OOM-Fehler

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

Ohne OOM-Fehler

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

Um dieses Problem mit set zu lösen, kann das Wachstum zu einem Segfault führen.

@ymodak Dieser Fehler wurde nicht behoben. Die Verwendung einer beliebigen Art von Convnet sollte in der Standardkonfiguration funktionieren. Entweder sollte allow_growth standardmäßig true sein, es sollte behoben sein, damit dies funktioniert, oder es sollte ein besserer Fehler als CUDNN_STATUS_INTERNAL_ERROR vorliegen.

@ymodak Es sieht so aus, als ob dieses Problem vorzeitig geschlossen wurde. Während es eine Problemumgehung für dieses Problem gibt, müssen Sie den Anwendungscode ändern. Infolgedessen funktioniert der Beispielcode auf RTX-Karten nicht sofort, und die meisten Online-Rezepte müssen ebenfalls geändert werden.

@samhodge Kannst du config.gpu_options.per_process_gpu_memory_fraction = 0.4 wie auf der Tensorflow- Dokumentationsseite vorgeschlagen, die du selbst gepostet hast?

Ich bin verwirrt von diesem booleschen Hack, um Tensorflow-GPU auf meinem RTX 2080 zu aktivieren: Wird dies allow_growth = True ein Problem sein, wenn ich meine GPU jeweils nur für ein Tensorflow-Skript / Jupiter-Notebook verwende? (zusätzlich zur Standard-GPU-Nutzung für den Bildschirm usw.)

Ich beabsichtige, einen statischen ML-Stack auf einem Computer einzurichten und möchte wissen, ob dies irgendwann zu einem Durcheinander führen wird (große Gittersuche, Modelle mit vielen Parametern usw.). Ich habe noch nicht herausgefunden, ob ich definitiv aus Quellen bauen muss, um diesen internen Fehler zu vermeiden oder einfach diesen Booleschen Wert zu ändern.

Ok, ich glaube, ich habe die Ursache meiner Probleme gefunden, bevor ich meine Sitzung erstelle. Ich messe den GPU-RAM frei. Wenn ich also auf einer 8-Gbit-Karte bin und 6 Gbit frei sind, verwende ich einen Bruchteil von 0,75 und gelegentlich endet das in einem OOM, aber kürzlich habe ich habe mit 0,95 * 0,75 experimentiert und ich habe noch keinen OOM. Wenn Sie also den Platz für die Zuweisung von Tensorflow auf das Limit verschieben, kommt es manchmal zu Konflikten. Natürlich, wenn Sie Ein- und Ausgänge zu einem einzelnen Op nicht passen, wird es OOM, aber ich messe daran und verwendet GPU oder CPU, je nachdem, welche passt.

@samhodge großartig, also bietet der boolesche Hack allow_growth am Ende eine Lösung, wenn keine größere GPU-Operation parallel gestartet wird und wenn das, was zu einem bestimmten Zeitpunkt durch Tensorflow verarbeitet wird (Stapelgröße wäre kritisch), dies nicht tut Überlauf des von der GPU bereitgestellten Speichers ...?

Alles nutzt die GPU auch Ihren Browser

Das gleiche Problem tritt auf einer GTX 1050 mit Tensorflow-GPU 1.13.1 von Pip mit CUDA 10.0 / cuDNN 7.4.2.24/Nvidia-Treiber 410 / Ubuntu 16.04 auf.

Immer noch das gleiche Problem hier, aber "config.gpu_options.allow_growth = True" behebt das Problem nicht. Passiert sowohl auf TF-gpu 1.14.1 als auch auf TF-gpu 2.0. RTX1070, CUDA 10.0, Ubuntu 18.04, Nvidia-Treiber 430.09.

Die Beschreibungen der Probleme, die Sie sehen, lassen mich glauben, dass (bestimmte Version von) cuDNN versucht, GPU-Speicher beim Erstellen des Handles zuzuweisen. Wenn TensorFlow bereits den gesamten Speicher belegt hat (entweder weil config.gpu_options.allow_growth = false oder per_process_gpu_memory_fraction nahe 1.0), ist kein Speicher mehr für cuDNN zuzuweisen.

Sie können dies bestätigen, indem Sie TensorFlow über nvprof ausführen und eine API-Ablaufverfolgung generieren, um den fehlgeschlagenen cuMemAlloc-Aufruf zu überprüfen.

Problem Nr. 6698 scheint das gleiche Problem zu diskutieren. Einige Leute bemerkten, dass sie versehentlich eine cuDNN-Version verwendet hatten, die nicht zu ihrer CUDA-Version passt. Könnten Sie bitte überprüfen, ob Sie cuDNN für CUDA 10 verwenden, wenn Sie mit CUDA 10 arbeiten?

Es stellte sich heraus, dass ich cuDNN nicht richtig installiert hatte, weil ich ein großer Dummkopf bin. Habe es bekommen, TF2-nightly neu installiert, die Zeilen hinzugefügt, um das Wachstum zu ermöglichen, und alles ist gut.

Wie lösche ich Cudatoolkit und Cudnn aus Conda?

Da in Anaconda enthaltenes (oder eingebettetes) cudnn den folgenden Fehler aufweist, möchte ich das von conda installierte cudatoolkit und cudnn entfernen und unabhängige CUDA und cudnn von der Nvidia-Website installieren.

Fehler: Faltungsalgorithmus konnte nicht abgerufen werden. Dies liegt wahrscheinlich daran, dass cuDNN nicht initialisiert werden konnte. Überprüfen Sie daher, ob oben eine Warnprotokollmeldung gedruckt wurde.

Obwohl ich die Befehle wie folgt verwende, sie aber nicht entfernen kann, kann ich sie nicht entfernen.
conda entfernen --name cuda --all
conda remove --name cudnn --all

Ich sehe, dass zwei Dokumente einschließlich cudatoolkit-10.0.130-0 und cudnn-7.3.1-cuda10.0.0_0 im Pfad als
folgt.

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

Wie kann ich Cuda und Cudnn löschen (oder entfernen), die in Anaconda enthalten (oder eingebettet) sind?

Danke im Voraus,

Mike

@ mikechen66 Was ist die Ausgabe von conda? Dies kann daran liegen, dass andere Pakete von cuda und cudnn abhängen. Warum sollten Sie sie überhaupt löschen wollen? Wenn Sie eine benutzerdefinierte Umgebung erhalten möchten, verwenden Sie Miniconda anstelle von Anaconda. Miniconda wird nur mit Conda geliefert, und Sie müssen alle benötigten Pakete manuell installieren.

Hallo tydlwav:

Vielen Dank für Ihr Feedback. Nachdem ich die Versionskompatibilität und das Veröffentlichungsdatum der Kernbibliotheken überprüft hatte, installierte ich die zugehörigen Entwicklungsumgebungen, führte den einfachen MNIST-Testcode aus und erhielt die folgenden Ausgaben.

Ich denke, dass Anaconda3 nicht einmal die Kernbibliotheken von cudnn und TensorFlow unterstützen kann. Es ist also ein großes Problem von Anaconda3. Daher möchte ich die leichtgewichtigen Cudnn-Bibliotheken aus Anaconda löschen und die unabhängigen und leistungsstarken Nvidia Cuda- und Cudnn-Bibliotheken verwenden, um den Testcode auszuführen. Bitte helfen Sie mit einigen Vorschlägen.

  1. Installationsumgebungen

Nvidia GeForce RTX 2060
Grafiktreiber: NVIDIA-Linux-x86_64-415.27 (15. Januar 2019)
1. Version, die RTX 2060 unterstützt
Anaconda3: Anaconda3-2019.03-Linux-x86_64.sh (2019.04-04)
- cudatoolkit-10.0.130-0
- cudnn-7.3.1-cuda10.0.0_0
- TensorFlow 13.1
- Juputer Notebook und ipykernel
- Standardmäßig von Ananconda3

  1. MNIST-Testcode:

Keras importieren
aus keras.datasets import mnist
aus keras.models importieren Sequential
aus keras.layers importieren Dense, Dropout
aus keras.layers importieren Sie Flatten, MaxPooling2D, Conv2D
aus keras.callbacks importiere 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 = Sequential ()
model.add (Conv2D (32, kernel_size = (3,3), Aktivierung = 'relu', input_shape = (28,28,1)))
model.add (Conv2D (64, kernel_size = (3,3), Aktivierung = 'relu'))
model.add (MaxPooling2D (pool_size = (2,2)))
model.add (Dropout (0,25))
model.add (Flatten ())
model.add (dicht (128, Aktivierung = 'relu'))
model.add (Dropout (0.5))
model.add (Dicht (n_classes, Aktivierung = 'softmax'))

model.compile (loss = 'kategoriale_kreuzentropie', optimierer = 'adam', metriken = ['genauigkeit'])

tensor_board = TensorBoard ('./ logs / LeNet-MNIST-1')

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

  1. Ausgänge:

Verwenden des TensorFlow-Backends

WARNUNG: tensorflow : Von /home/mike/anaconda3/envs/tf-gpu/lib/python3.7/site-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (von tensorflow.python.framework.ops) ) ist veraltet und wird in einer zukünftigen Version entfernt.
Anweisungen zum Aktualisieren:
Kolokationen werden automatisch vom Placer behandelt.
WARNUNG: Tensorflow : Von /home/mike/anaconda3/envs/tf-gpu/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:3445: Dropout aufrufen (von tensorflow.python.ops.nn_ops) mit keep_prob ist veraltet und wird in einer zukünftigen Version entfernt.
Anweisungen zum Aktualisieren:
Bitte verwenden Sie rate anstelle von keep_prob . Die Rate sollte auf rate = 1 - keep_prob .
WARNUNG: tensorflow : Von /home/mike/anaconda3/envs/tf-gpu/lib/python3.7/site-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (von tensorflow.python.ops.math_ops) ) ist veraltet und wird in einer zukünftigen Version entfernt.
Anweisungen zum Aktualisieren:
Verwenden Sie stattdessen tf.cast.
Trainieren Sie mit 60000 Proben, validieren Sie mit 10000 Proben
Epoche 1/15

UnknownError Traceback (letzter Anruf zuletzt)
im
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, Klassengewicht, Beispielgewicht, Anfangsbuchstabe, Schritte pro Schritt, Validierungsschritte, ** kwargs)
1037 initial_epoch = initial_epoch,
1038 Schritte_per_epoch = Schritte_per_epoch,
-> 1039 Validierungsschritte = Validierungsschritte)
1040
1041 def evaluieren (Selbst, x = Keine, y = Keine,

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / engine / training_arrays.py in fit_loop (Modell, f, ins, out_labels, batch_size, Epochen, ausführlich, Rückrufe, val_f, val_ins, shuffle, callback_metrics, initial_epoch, schritte_per_epoch, validierungsschritte)
197 ins_batch [i] = ins_batch [i] .toarray ()
198
-> 199 outs = f (ins_batch)
200 outs = to_list (outs)
201 für l, o in zip (out_labels, outs):

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / backend / tensorflow_backend.py in __call __ (self, input)
2713 return self._legacy_call (Eingaben)
2714
-> 2715 return self._call (Eingänge)
2716 sonst:
2717 if py_any (is_tensor (x) für x in Eingaben):

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / backend / tensorflow_backend.py in _call (self, input)
2673 fetched = self._callable_fn ( array_vals, run_metadata = self.run_metadata)2674 sonst:-> 2675 abgerufen = self._callable_fn ( array_vals)
2676 return abgerufen [: len (self.outputs)]
2677

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / tensorflow / python / client / session.py in __call __ (self, args, * kwargs)
1437 ret = tf_session.TF_SessionRunCallable (
1438 self._session._session, self._handle, args, status,
-> 1439 run_metadata_ptr)
1440 wenn 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 in __exit __ (self, type_arg, value_arg, traceback_arg)
526 Keine, Keine,
527 compatible.as_text (c_api.TF_Message (self.status.status)),
-> 528 c_api.TF_GetCode (self.status.status))
529 # Löschen Sie das zugrunde liegende Statusobjekt aus dem Speicher, da es sonst am Leben bleibt
530 #, da es einen Verweis auf den Status aus dem Traceback aufgrund von gibt

Unbekannter Fehler: Faltungsalgorithmus konnte nicht abgerufen werden. Dies liegt wahrscheinlich daran, dass cuDNN nicht initialisiert werden konnte. Überprüfen Sie daher, ob oben eine Warnprotokollmeldung gedruckt wurde.
[[{{node conv2d_1 / convolution}}]]
[[{{Knotenmetriken / acc / Mittelwert}}]]

Hallo tydlwav:

Ich benutze den folgenden Befehl, um sowohl cuda als auch cudnn zu deinstallieren. Beide Bibliotheken befinden sich jedoch immer noch in Anaconda3, obwohl sie derzeit nicht funktionieren. Ich denke, dass Anaconda3 beabsichtigt, die Kernbibliotheken zu schützen, die nicht entfernt werden sollen. Es könnte die Kernfunktion von Continuum sein, obwohl es Fehler enthält. Ich werde versuchen, entweder Independent Nvdia cuda (ohne nvcc) und cudnn zu verwenden oder den neuen cuda oder cudnn mit conda zu finden, der installiert werden soll.

Befehl deinstallieren:

conda deinstallieren cudatoolkit

Paketmetadaten sammeln: fertig
Umgebung lösen: fertig

Paketplan

Umgebungsort: / home / mike / anaconda3 / envs / tf-gpu

entfernte Spezifikationen:
- Cudatoolkit

Die folgenden Pakete werden ENTFERNT:

cudatoolkit-10.0.130-0
cudnn-7.3.1-cuda10.0_0
cupti-10.0.130-0
Keras-2.2.4-0
tensorflow-1.13.1-gpu_py37hc158e3b_0
tensorflow-base-1.13.1-gpu_py37h8d69cac_0
tensorflow-gpu-1.13.1-h0d30ee6_0

Weiter ([j] / n)? y

Transaktion vorbereiten: erledigt
Transaktion überprüfen: erledigt
Transaktion ausführen: erledigt

Anmerkungen:

Nachdem ich beide deinstalliert hatte, zeigte Jupyter Notebook "Kein Mudule mit dem Namen" Tensorflow ". Das bedeutet, dass die Uninstallation erfolgreich ist. Allerdings sind sowohl Cudatoolkit als auch Cudnn immer noch in Anaconda3 enthalten sie funktioniert nicht.

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

Sie haben sie bereits entfernt. Die Dateien in pkgs dienen zur Installation. Diese werden für die Installation im Cache heruntergeladen. Dies ist auch nicht der richtige Ort, um Probleme mit der Conda-Umgebung zu diskutieren. Es ist für dieses Problem nicht relevant. Möglicherweise möchten Sie einen Stapelüberlauf versuchen.

Ich bin ein wenig verwirrt über den Stand dieses Problems. Ich verwende einen RTX 2080, cuda 10.1, cudnn v7.5.1.10 und tensorflow 1.14.

Die Verwendung der Funktion "Wachstum zulassen" funktioniert, aber möglicherweise habe ich eine andere Versionsfehlanpassung?

Wird es in Tensorflow 1.14 eine Lösung dafür geben?

Vielen Dank

Vielen Dank. Ich sehe das Kompatibilitätsproblem zwischen den RTX 20XX Turing-Serien, TensorFlow und Anaconda. Es ist offensichtlich, dass die RTX 20XX-Serie Cudnn 7.5.0 unterstützt. TensorFlow unterstützt nur Cudnn 7.4. Anaconda enthält jedoch eine optimierte Version 7.3.1. Dies ist eine völlige Nichtübereinstimmung zwischen den drei Anbietern. Darüber hinaus weist die RTX 20XX-Serie ein großes Kompatibilitätsproblem mit Ubuntu 16.04 LTS auf. Manchmal stürzte das Ubuntu 16.04 ab. Ich musste zwei bootfähige USB-Sticks mitbringen, um das Betriebssystem neu zu installieren. Daher habe ich zwei PCs auf Ubuntu 18.04 LTS aktualisiert und Miniconda installiert. Dann werde ich eine höhere Version von Tensorflow ausprobieren.

Anmerkungen:

Nvidia verfügt über ein eigenes Ubuntu 18.04 LTS für die GPU-Plattformen Jetson TX1 / TX2 und Jetson Nano Mobile. Nvidia scheint seine neuen Produkte wie die RTX 20XX-Serie eher mit Ubuntu 18.04 LTS als mit der niedrigeren Version Ubuntu 16.04 zu kompatibel zu machen. Ich weiß jedoch nicht, ob Continuum seinen Upgrade-Plan für die Nvidia RTX 20XX Turing-Serie hat.

RTX-Serien werden ab sofort gut unterstützt. Ich habe tf mit RTX 2070 über eine Conda-Umgebung auf Nicht-Ubuntu-Distribution verwendet. Dies sollte der schlimmste Fall sein, und es funktioniert immer noch gut. Cuda und cudnn sind abwärtskompatibel und es sollte kein Problem sein, wenn Sie die neueren Versionen verwenden. Sie sollten einfach eine neue Python 3.6-Umgebung mit conda create -n tf python==3.6.8 erstellen und conda install tensorflow-gpu ausführen.

Das ist großartig. Ich habe aus dem Quellcode kompiliert und Clients mit Tensorflow 1.12.0 CUDA 10.0 und CUDNN 7.4.2.24 auf der meisten Hardware arbeiten lassen, aber ich hatte Probleme mit einer Handvoll Clients mit RTX-Karten mit einem CNN mit cudnn auf der GPU. Möglicherweise habe ich versehentlich die falsche CUDNN für CUDA 9.0 gepackt. Die Dateien haben den gleichen Namen.

Kann jemand bestätigen, dass diese Versionen auf RTX2080 und anderen Turing-basierten Karten funktionieren?

Hallo tydlwav:

Ich habe Miniconda und die zugehörige Python- und Tensorflow-Umgebung gemäß Ihrem Vorschlag installiert. Es hat immer noch den Fehler: Faltungsalgorithmus konnte nicht abgerufen werden. Dies liegt wahrscheinlich daran, dass cuDNN nicht initialisiert werden konnte .......
Bitte helfen Sie bei der Suche nach einer Lösung.

Bitte beachten Sie die Schritte, die ich ausgeführt habe.

  1. Installieren Sie Python 3.6.8 gemäß Ihrer Richtlinie.
    conda create -n tf python == 3.6.8

  2. aktiviere tf
    conda aktivieren tf

  3. Installieren Sie Tensorflow-GPU in der TF-Umgebung gemäß Ihrer Richtlinie.
    conda install tensorflow-gpu

Das installierte Paket enthält cudatoolkit und cudnn wie folgt.
.................................................. ..................................................
cudatoolkit pkgs / main / linux-64 :: cudatoolkit-10.0.130-0
cudnn pkgs / main / linux-64 :: cudnn-7.3.1-cuda10.0_0
.................................................. ..................................................

  1. Installieren Sie Jupyter Notebook, Ipykernel und verwandte Umgebung der Webseite.

1). Installieren Sie das Jupiter-Notebook
conda install jupyter notebook

2). Installieren Sie ipykernel basierend auf dem Jupiter-Notebook
conda ipykernel jupyter installieren

3). Erstellen Sie eine TensorFlow-GPU auf der Webseite des Jupyter-Notebooks
python -m ipykernel install --user --name tf-gpu --display-name "TensorFlow-GPU"

  1. Öffnen Sie das Jupyter-Notizbuch
    1). Befehl in jupyter Notebook-Webseite
    Jupiter-Notizbuch

2). Klicken Sie auf TensorFlow-GPU
Während Sie im Menü "Neu" auf "TensorFlow-GPU" klicken und auf der Webseite "TensorFlow-GPU" auswählen, wird die Zelle auf der Webseite des Jupyter-Notebooks angezeigt. Die Webseite ist wie folgt aufgeführt.
http: // localhost : 8888 / notebooks / Untitled3.ipynb? kernel_name = tf-gpu

  1. Einfügen Führen Sie den einfachen MNIST-Testcode aus

Keras importieren
aus keras.datasets import mnist
aus keras.models importieren Sequential
aus keras.layers importieren Dense, Dropout
aus keras.layers importieren Sie Flatten, MaxPooling2D, Conv2D
aus keras.callbacks importiere 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 = Sequential ()
model.add (Conv2D (32, kernel_size = (3,3), Aktivierung = 'relu', input_shape = (28,28,1)))
model.add (Conv2D (64, kernel_size = (3,3), Aktivierung = 'relu'))
model.add (MaxPooling2D (pool_size = (2,2)))
model.add (Dropout (0,25))
model.add (Flatten ())
model.add (dicht (128, Aktivierung = 'relu'))
model.add (Dropout (0.5))
model.add (Dicht (n_classes, Aktivierung = 'softmax'))

model.compile (loss = 'kategoriale_kreuzentropie', optimierer = 'adam', metriken = ['genauigkeit'])

tensor_board = TensorBoard ('./ logs / LeNet-MNIST-1')

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

  1. Fehler wie bei der zuletzt genannten Meldung:

Unbekannter Fehler: Faltungsalgorithmus konnte nicht abgerufen werden. Dies liegt wahrscheinlich daran, dass cuDNN nicht initialisiert werden konnte. Überprüfen Sie daher, ob oben eine Warnprotokollmeldung gedruckt wurde.
[[{{node conv2d_1 / convolution}}]]
[[{{Knotenmetriken / acc / Mittelwert}}]]

Vielen Dank,

Mike

HI tydlwav:

Übrigens habe ich auch Keras mit dem folgenden Befehl installiert.
conda install keras-gpu

Da die Installation immer korrekt ist, habe ich den Fehler erhalten. Ich gehe also davon aus, dass es sich um das Versionskompatibilitätsproblem zwischen Miniconda und RTX20XX Turing handelt. Der Fehler ist der gleiche wie bei Anaconda. Ich erfahre, dass die Cudnn- und Cuda-Version in Miniconda und Anaconda gleich sind.

Das ist ziemlich interessant. Ich habe cuda 10 und cudnn7.3 vor ungefähr anderthalb Monaten mit conda arbeiten lassen. Ich habe seitdem keinen Tensorflow mehr verwendet. Wenn es bei Ihnen nicht funktioniert, können Sie aus dem Quellcode erstellen. Das funktioniert bei mir immer. Wenn Sie gerade erst anfangen, würde ich die Verwendung von Pytorch empfehlen. Es wäre viel einfacher, Dinge zu installieren und zum Laufen zu bringen.

Hallo tydlwav:

Ich werde die andere Methode wie Pytorch versuchen. Nachdem Google Tensorflow-GPU 1.14 veröffentlicht hat, kann ich mit der Miniconda die unabhängige Tensorflow-GPU 1.14 auf der Google Tensorflow-Website wie folgt installieren.

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

Anmerkungen:

Conda hat nur Tensorflow-GPU-Builds von 1.0.1 bis 1.13.1 wie folgt. Die Builds sind so alt, dass die Builds die offizielle Google TensorFlow- und die offizielle Nvidia GeForce RTX 20XX (2060 ~ 2080) Truing-Serie nicht einholen konnten.

Befehl:
conda search tensorflow-gpu

Kanäle laden: fertig

Name Version Build Channel
tensorflow-gpu 1.0.1 py27_4 pkgs / free
tensorflow-gpu 1.0.1 py35_4 pkgs / frei
tensorflow-gpu 1.0.1 py36_4 pkgs / frei
tensorflow-gpu 1.1.0 np111py27_0 pkgs / free
tensorflow-gpu 1.1.0 np111py35_0 pkgs / free
tensorflow-gpu 1.1.0 np111py36_0 pkgs / free
tensorflow-gpu 1.1.0 np112py27_0 pkgs / free
tensorflow-gpu 1.1.0 np112py35_0 pkgs / free
tensorflow-gpu 1.1.0 np112py36_0 pkgs / free
tensorflow-gpu 1.2.1 py27cuda7.5cudnn5.1_0 pkgs / free
tensorflow-gpu 1.2.1 py27cuda7.5cudnn6.0_0 pkgs / free
tensorflow-gpu 1.2.1 py27cuda8.0cudnn5.1_0 pkgs / free
tensorflow-gpu 1.2.1 py27cuda8.0cudnn6.0_0 pkgs / free
tensorflow-gpu 1.2.1 py35cuda7.5cudnn5.1_0 pkgs / free
tensorflow-gpu 1.2.1 py35cuda7.5cudnn6.0_0 pkgs / free
tensorflow-gpu 1.2.1 py35cuda8.0cudnn5.1_0 pkgs / free
tensorflow-gpu 1.2.1 py35cuda8.0cudnn6.0_0 pkgs / free
tensorflow-gpu 1.2.1 py36cuda7.5cudnn5.1_0 pkgs / free
tensorflow-gpu 1.2.1 py36cuda7.5cudnn6.0_0 pkgs / free
tensorflow-gpu 1.2.1 py36cuda8.0cudnn5.1_0 pkgs / free
tensorflow-gpu 1.2.1 py36cuda8.0cudnn6.0_0 pkgs / free
tensorflow-gpu 1.3.0 0 pkgs / frei
tensorflow-gpu 1.4.1 0 pkgs / main
tensorflow-gpu 1.5.0 0 pkgs / main
tensorflow-gpu 1.6.0 0 pkgs / main
tensorflow-gpu 1.7.0 0 pkgs / main
tensorflow-gpu 1.8.0 h7b35bdc_0 pkgs / main
tensorflow-gpu 1.9.0 hf154084_0 pkgs / main
tensorflow-gpu 1.10.0 hf154084_0 pkgs / main
tensorflow-gpu 1.11.0 h0d30ee6_0 pkgs / main
tensorflow-gpu 1.12.0 h0d30ee6_0 pkgs / main
tensorflow-gpu 1.13.1 h0d30ee6_0 pkgs / main

Sie sind nicht alt, da ich Condas Version von tf 1.12 mit RTX 2070 verwendet habe. Neue Hardware ist normalerweise abwärtskompatibel, und RTX ist nicht anders. Es ist sehr wahrscheinlich, dass ein seltsames Umgebungsproblem im Spiel ist. Ich habe erst im Juli Zugriff auf eine RTX-Maschine, daher kann ich momentan nicht beim Testen helfen. Das Bauen aus der Quelle sollte Ihr Problem lösen. Ich habe es nie versäumt, Convnets von tf aus dem Quellcode auszuführen (vorausgesetzt, Sie haben während des Builds die richtigen Konfigurationen).

Auch hier ist dies nicht der richtige Ort, um das Verteilungsproblem des Tensorflusses zu diskutieren. Sie können einen Beitrag zum Stapelüberlauf erstellen oder reddit und ihn hier verlinken. Mehr Menschen werden es sehen und Ihnen auf diese Weise helfen können.

Ihr Problem ist kein Fehler, und es ist definitiv nicht das, worüber dieses Problem spricht.

@chsigg Sie diagnostizieren, dass dies ein Problem ist, bei dem CUDNN versucht, GPU-Speicherressourcen zuzuweisen, die Tensorflow bereits zugewiesen hat. Das einfache Setzen von per_process_gpu_memory_fraction=0.9 anstelle von 0.95 reichte aus, um meine Probleme zu lösen.

Ich war auch mit diesem Problem konfrontiert. Es wurde behoben, indem cuDNN auf die Version 7.6 aktualisiert wurde.

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

Auch Tensorflow und CuDNN wurden von Conda installiert.
conda list cudnn

cudnn                     7.3.1                cuda10.0_0    anaconda

Dinge, die ich getan habe:

  1. Deinstallierter Conda Tensorflow.
    conda remove tensorflow
  2. Deinstallieren Sie conda cuDNN
    conda remove cudnn
  3. Installieren Sie den Tensorflow mit Pip
    pip install tensorflow
  4. Laden Sie die entsprechende cuDNN 7.6-Laufzeit-Deb-Datei von https://developer.nvidia.com/cudnn herunter
  5. Installieren Sie es mit sudo dpkg -i libcudnn_xxxxx_amd64.deb

@nluehr irgendwelche Kommentare? Können wir die cuda / cudnn-Version von

Es ist ein legitimer Speicherfehler, wenn Sie tf.keras verwenden, gehen Sie wie folgt oben in Ihrer Datei vor
config = tf.ConfigProto ()
config.gpu_options.allow_growth = True
tf.keras.backend.set_session (tf.Session (config = config))

Ich lief in dieser Frage als auch, und war in der Lage , es zu lösen , indem Sie @ va-andrew ‚s Lösung, und zwar habe ich @colinsteidtmann‘ s Implementierung, da ich einige der tensorflow.keras Funktionen in meinem Code verwenden. Ich habe lange versucht, dieses Problem zu beheben. Vielen Dank für Ihre Beiträge.

BEARBEITEN: Ich habe mir gerade die Tensorflow-Dokumentation angesehen (https://www.tensorflow.org/guide/using_gpu), und Sie können auch festlegen, dass Speicherwachstum zulässig ist, indem Sie die Umgebungsvariable TF_FORCE_GPU_ALLOW_GROWTH auf true setzen. Es heißt auch, dass diese Konfiguration plattformspezifisch ist, also YMMV (funktioniert bei mir mit Ubuntu 18.04).

Als Referenz laufe ich:
Ubuntu 18.04.2 LTS, Gigabyte GeForce RTX 2080 Turbo, NVIDIA-Treiber 430.26, CUDA 10.0.130, cuDNN 7.4.2.24, Tensorflow-GPU 1.13.1, Python 3.6. Ich führe Tensorflow in einer virtuellen Umgebung mit spyder 3.3.4 aus.

Ich habe einen zweiten Computer mit genau der gleichen Hardware und habe ihn nach den gleichen Anweisungen eingerichtet, die gleichen Dateien für die Installation verwendet und dieses Problem auch auf diesem Computer gehabt. Kein Wunder dort.

Ich habe einen dritten Computer mit genau der gleichen Hardware, außer dass er einen 2080 Ti anstelle des 2080 hat, und ich habe ihn gemäß den gleichen Anweisungen eingerichtet und erneut die gleichen Dateien für die Installation verwendet. Aber diesmal gab es kein Problem.

Daher muss ich glauben, dass dies nicht mit einem Konflikt zwischen CUDA, cuDNN und Treiberversion zusammenhängt. Es handelt sich nicht um eine falsch durchgeführte Installation usw. Sie bezieht sich vielmehr auf das Modell der Grafikkarte. Ich habe dieses Problem nur bei RTX 2060, 2070 und 2080 erwähnt.

Glücklicherweise ist es keine große Unannehmlichkeit, die Problemumgehung zu verwenden.

Ich war auch mit diesem Problem konfrontiert. Es wurde behoben, indem cuDNN auf die Version 7.6 aktualisiert wurde.

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: 1.13.1
Cuda: 10,0
CuDNN: 7.3.1

Auch Tensorflow und CuDNN wurden von Conda installiert.
conda list cudnn

cudnn                     7.3.1                cuda10.0_0    anaconda

Dinge, die ich getan habe:

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 Sind Sie nach dem Update sicher, dass Sie auf Ihrer GPU und nicht auf der CPU ausgeführt werden? Es scheint, dass Sie die GPU verwenden, bevor Sie Ihr Update durchgeführt haben (aufgrund der Fehlermeldung, die auf cuDNN verweist), aber ich frage mich danach. Sie verwenden "pip install tensorflow", aber es sollte "pip install tensorflow-gpu" sein, nein? Sie sagten auch, dass Sie CUDA 10 verwenden, aber die von Ihnen aufgelistete cuDNN-Deb-Datei ist für cuda9.0, sodass dies nicht funktionieren sollte.

Ich denke also, dass es der Fall sein könnte, dass Sie die GPU nicht tatsächlich verwenden, und daher kein Beweis dafür ist, dass das Problem durch ein Update auf cuDNN 7.6 behoben wird.

@ synapse8 Sie haben absolut Recht mit Tensorflow-GPU und CuDNN-Version. Ich bin jetzt auch sehr verwirrt von meinem Kommentar und erinnere mich nicht mehr an die Details. Wie auch immer, unten sind die aktuellen Versionen in meinem System angegeben.

pip show tensorflow-gpu
Name: Tensorflow-GPU
Version: 1.13.1

nvidia-smi
NVIDIA-SMI 430.26 Treiberversion: 430.26 CUDA-Version: 10.2

sudo apt search cudnn | grep installed
libcudnn7 / now 7.6.0.64-1 + cuda10.0 amd64

@ alexforever86 mit der jetzt erwähnten Konfiguration sehen Sie dieses Problem immer noch? (Ich nehme an, es funktioniert für Sie). Ich habe kürzlich ein System mit cuda10, 410 Treiber, 7.6 cudnn und TF-gpu 1.14 (pip install) installiert und das Problem nicht gesehen.

@ robzor92 Ich habe Tensorflow-GPU 1.13 verwendet und aus Neugier habe ich gerade 1.14 installiert, um zu testen, ob das Problem dadurch behoben wurde (für mich). Ich erhalte immer noch den Fehler und muss immer noch die Problemumgehung "Wachstum zulassen" durchführen (wieder keine so große Sache).

Welche Grafikkarte verwenden Sie?

@ synapse8 Versuchte es mit einer GTX 1070.

@ synapse8 Ich habe gerade auch den Beispielcode ausprobiert, der von diesem Thread-Ersteller bereitgestellt wurde. Er hat problemlos funktioniert. Ich würde jedoch nicht behaupten, dass es sich nur um ein Problem der RTX-Linie handelt, da ich das gleiche Problem bei einer GTX 1050Ti mit TF 1.13.1 gesehen habe. Verwenden der gleichen Treiber / Cuda / Cudnn-Kombination, die ich zuvor gepostet habe.

@ robzor92 Ich bezweifle, dass das Problem des 1050Ti in der kleinen VRAM-Größe liegt. Die RTX-Karten würden dies bei den grundlegenden CNN MNIST-Modellen feststellen. Ich bezweifle, dass NVIDIAs Optimierung der VRAM-Zuweisung auf RTX-Karten die Dinge irgendwie durcheinander gebracht hat.

Ich habe den gleichen Fehler bei Tensorflow 1.14.0 und RTX2080. In meinem Fall tritt dieser Fehler jedoch nur auf, wenn ich die Faltungsschicht verwende.

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.

Ich habe config.gpu_options.allow_growth = True ausprobiert, aber dieser Fehler wird dadurch nicht behoben.

Ich möchte, dass mir jemand hilft.

Vielen Dank.

Gleiches Problem mit RTX 2070

Ich habe diesbezüglich eine interessante Beobachtung gemacht, die helfen könnte, diesen Fehler aufzuspüren oder eine praktikable Lösung zu finden:
Ich erhalte auch den Fehler Failed to get convolution algorithm mit Bezug auf Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR .
System: Laptop-Maschine mit dem Nvidia Quadro P2000, Ubuntu 18.04, tf 1.13.1, cuda10, cudnn 7.4.2
Wie bereits erwähnt, kann ich das Programm mit allow_growth reibungslos ausführen. Vielen Dank dafür, gut genug für mich.

Interessant: Ich erhalte diesen Fehler nur, wenn ich tf.layers.conv... aber wenn ich zu tf.keras.layers.... wechsle, kann das Programm ohne allow_growth , sodass etwas im Keras-Code besser zu funktionieren scheint als im tf Code. Vielleicht kann jemand diese Informationen verwenden, um eine Lösung von Keras zu finden.
Ich halte mich vorerst an die tf.layers, da sie eine einfache Gewichtsverteilung durch variable Bereiche ermöglichen, die von Keras leider nicht unterstützt werden.

@ DavidS3141 Es ist interessant. In meinem Fall funktioniert die einzige Faltungsschicht nicht sowohl in tf.layers als auch in tf.keras.layers ...

Wenn ich Pytorch verwende, ist torch.cuda.is_available True und kann die Faltungsschicht problemlos verwenden. Ich glaube, die Ursache ist der Tensorflow, aber ich weiß nicht, was falsch ist.

Ich stimme @ Hayashi-Yudai zu: Gleiches gilt für MXNet. Die identische Konfiguration funktioniert einwandfrei, wenn der Tensorflow fehlschlägt.

Umgebung:
RTX2080
Ubuntu 18.10
Treiber 430.26
CUDA 10.0 (auch 10.1, das von TF noch nicht unterstützt wird)
cuDNN 7.6.1
mxnet-cu100 1.4.1
Tensorflow-GPU 1.14.0

Hey Leute, ich verwende die Gewichte des vorab trainierten Modells mit ResNet50-Backbone im COCO-Datensatz, um meinen CSV-Datensatz zu trainieren. Ich erhalte folgende Fehlermeldung: Dies liegt wahrscheinlich daran, dass cuDNN nicht initialisiert werden konnte. Überprüfen Sie daher, ob oben eine Warnmeldung angezeigt wurde. Ich führe den folgenden Befehl in einer virtuellen Umgebung unter Ubuntu 16.0 aus, um zu trainieren: keras-retinanet / keras_retinanet / bin / train.py --weights resnet50_coco_best_v2.1.0.h5
- Chargengröße 7 - Schritte 9 - Epochen 4
--snapshot-path snapshots --tensorboard-dir tensorboard
csv dataset / train.csv dataset / classes.csvIch habe versucht, das Problem mithilfe des folgenden Skripts in der Befehlszeile in der virtuellen Umgebung zu beheben:
Python

Tensorflow importieren

aus tensorflow.compat.v1 ConfigProto importieren
aus tensorflow.compat.v1 InteractiveSession importieren
config = ConfigProto ()
config.gpu_options.allow_growth = True
session = InteractiveSession (config = config)

ebenso gut wie
Tensorflow als tf importieren
config = tf.ConfigProto ()
config.gpu_options.allow_growth = True
session = tf.Session (config = config), aber mein Fehler wurde nicht behoben:

Ich benutze: -
Ubuntu 16.0
Cuda: 10,0
Tensorflow 1.14.0

Error:
tensorflow.python.framework.errors_impl.UnknownError: 2 Root-Fehler gefunden. │ | Keine laufenden Prozesse gefunden |
(0) Unbekannt: Faltungsalgorithmus konnte nicht abgerufen werden. Dies liegt wahrscheinlich daran, dass cuDNN nicht initialisiert werden konnte. Suchen Sie daher nach einer Warnung │ + ------------------------------- ---------------------------------------------- +
Die Protokollnachricht wurde oben gedruckt. │
[[{{node conv1 / convolution}}]] │
[[loss / add / _2377]] │
(1) Unbekannt: Faltungsalgorithmus konnte nicht abgerufen werden. Dies liegt wahrscheinlich daran, dass cuDNN nicht initialisiert werden konnte. Suchen Sie daher nach einer Warnung │
Die Protokollnachricht wurde oben gedruckt. │
[[{{node conv1 / convolution}}]] │
0 erfolgreiche Operationen. │
0 abgeleitete Fehler werden ignoriert. │
Beenden ohne aktive Ausnahme beendet │
Abgebrochen (Core Dumped)
Jede Hilfe wäre dankbar.

Selbes Problem hier. Die Problemumgehung von Allow_growth funktioniert. Andernfalls wird dieser Fehler im grundlegendsten MNIST-Tensorflow-Datensatz angezeigt.

RTX2060 mobil hier.

Das Problem tritt beim kompilierten Tensorflow aus dem r2.0-Zweig sowie bei TF 1.4 auf, das über conda mit conda (tensorflow-gpu) installiert wurde.

@ Hayashi-Yudai

Ich habe versucht, config.gpu_options.allow_growth = True, aber es löst diesen Fehler nicht.

Was waren die genauen Befehle, die Sie Ihrem Code hinzugefügt haben? Versuchen Sie stattdessen Folgendes, wenn es anders ist ...

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

@ synapse8 Vielen Dank für Ihren Kommentar. Ich habe es versucht, aber das Ergebnis war das gleiche.

Übrigens habe ich nvidia-docker ausprobiert und bin gut gelaufen, bis auf die Python-Version 3.5.
https://docs.nvidia.com/deeplearning/frameworks/tensorflow-release-notes/running.html#running

Eine zusätzliche Information: Wenn es Ihnen nichts ausmacht, Python 3.6.8 und Tensorflow-GPU 1.12.0 zu verwenden, können Sie Anaconda verwenden.

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

Ich habe das Erstellen von tf-2.0.0-beta1 aus Quellen mit CUDA-10.1 und CUDNN-7.6.2.4 getestet und der Fehler tritt nicht auf.

Sie können Docker Bilder für finden den Aufbau eines tf-gpu - Paket und eine tf-Basis - Paket hier:
https://github.com/edowson/docker-tensorflow

Der Anaconda-Kanal verfügt zum Zeitpunkt des Schreibens dieses Kommentars nicht über cudnn==7.6.2 .

Windows 7 schlug meinen Kopf eine ganze Weile über Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR gegen die Wand und versuchte, eine neue Maschine in Betrieb zu nehmen.

Neuinstallationen, viele andere Dinge in diesem und anderen Threads haben das Problem nicht behoben.

Beim Testen, dass das Fehlen von cudnn64_7.dll einen anderen Fehler verursachen würde als das CUDNN_STATUS_INTERNAL_ERROR ich die DLL umbenannt. Die Bestätigung, dass der Fehler stattdessen ein Fehler vom Typ CUDNN NOT INSTALLED , hat die Änderung des Dateinamens rückgängig gemacht.

Magischerweise fing alles an zu funktionieren.

Keine Ahnung warum oder wie, aber es tut. Hoffentlich hilft das jemand anderem. Wenn nicht, dauert der Versuch nur einige Sekunden.

Ich habe festgestellt, dass dieses Problem dadurch verursacht wurde, dass ich fälschlicherweise zwei Anrufe bei tf.Session getätigt habe

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

# several lines of code later...

sess = tf.Session(config=config)

Wahrscheinlich nicht die Hauptursache für die meisten Leute, aber es könnte sich lohnen, darauf zu achten.

Nur "allow_growth = True" zu teilen, löst das Problem für mein System unten
RTX 2080TI, Ubuntu18.04, Cuda9.0, Cudnn7, Tf1.9

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

Dies hängt mit dem verfügbaren Speicheranteil zusammen, der zum Laden von GPU-Ressourcen zum Erstellen eines Cudnn-Handles verfügbar ist, das auch als per_process_gpu_memory_fraction .
Wenn Sie diesen Speicheranteil selbst reduzieren, wird der Fehler behoben.

> 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])

Verwenden Sie so wenig Bruch, wie in Ihr Gedächtnis passt. (Im Code, den ich mit 0,7 verwende, können Sie mit 0,3 oder noch kleiner beginnen und dann erhöhen, bis Sie den gleichen Fehler erhalten, das ist Ihre Grenze.)
Übergeben Sie es als Konfiguration an Ihre tf.Session() oder tf.train.MonitoredTrainingSession() oder die sv.managed_session() Supervisors.

Dies sollte es Ihrer GPU ermöglichen, ein Cudnn-Handle für Ihren TensorFlow-Code zu erstellen.

Wie hier erläutert, lautet der neue Ansatz in TF 2.0 zum Festlegen von 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)

Mit diesem Code-Snippet und TF 2.0 RC1 wird der Fehler nicht mehr angezeigt.
Aufgrund der Anzahl der Benutzer einer 20XX Nvidia-GPU halte ich es jedoch für eine gute Idee, dieses Problem nativ zu beheben, bevor die endgültige Version von TF 2.0 veröffentlicht wird.

Ich hatte das gleiche Problem mit 1080Ti & TitanX auf TF1.4 und die Vorschläge von @ va-andrew und @oscarlinux haben den Tag gerettet! Das erinnert mich in erster Linie daran, warum ich zu Pytorch gewechselt bin und nie zurückgekommen bin. Leider gibt es immer noch Leute, die TF verwenden ... also muss ich diesen Schmerz immer noch durchstehen, wenn ich ihre Codebasis benutze ... vielleicht ist es Zeit, ein bisschen mit ONNX zu spielen.

Für alle anderen, die dies nach dem Upgrade auf Tensorflow 2.0 feststellen, unterscheiden sich die API und der Code geringfügig.

Ubuntu 18
Tensorflow 2.0
Tensorflow-GPU 2.0
GeForce RTX 2070

Code für dieses System aktualisiert.

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

Diese Lösung hat bei mir funktioniert. (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)

Fügen Sie einen zusätzlichen Datenpunkt hinzu:
RTX 2080ti, Ubuntu18.04, Cuda10.0, Cudnn7
In meinem Fall funktioniert es weder mit tf1.14 noch mit 1.15rc3

@ w4nderlust , für 1.14 und 1.15 möchten Sie weiterhin die Sitzungskonfigurationsoption config.gpu_options.allow_growth = True festlegen. Funktioniert das, was Sie melden, nicht oder nur der tf.config.experimental -Mechanismus?

@ w4nderlust , für 1.14 und 1.15 möchten Sie weiterhin die Sitzungskonfigurationsoption config.gpu_options.allow_growth = True festlegen. Funktioniert das, was Sie melden, nicht oder nur der tf.config.experimental -Mechanismus?

Entschuldigung, hätte präziser sein sollen. Ich berichte, dass es ohne config.gpu_options.allow_growth = True in meiner Konfiguration mit 1.14 und 1.15rc3 immer noch nicht funktioniert.

Ich glaube, ich habe eine bessere Problemumgehung gefunden als die config.gpu_options.allow_growth = True .

Bei meinem Setup (_RTX 2070_, Docker-Image _tensorflow: 1.15.0-gpu-py3_) wird durch die Einstellung der Konfiguration wie unten gezeigt _CUDNN_STATUS_INTERNAL_ERROR_ vermieden, während weiterhin der gesamte GPU-Speicher zugewiesen wird.
Dies ist sehr nützlich für große Modelle, die im allow_growth -Modus nicht in den Speicher passen, sondern nur passen, wenn der gesamte Speicher zugewiesen ist.

So weisen Sie den gesamten Speicher auf RTX zu:
config.gpu_options.per_process_gpu_memory_fraction = 1.0

So weisen Sie den gesamten Speicher auf RTX zu:
config.gpu_options.per_process_gpu_memory_fraction = 1.0

@PoloShock
Ich habe dies mit TF 2.0 versucht und es scheint nicht zu funktionieren.
Ubuntu18.04, RTX 2080, CUDA10, cudnn 7.6.

Für TF 2.0 hat sich die API zur Begrenzung der GPU-Speichernutzung geändert.

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 Verstehst du, warum dieses Problem nur bei RTX

Es ist schwierig für mich, dies direkt zu debuggen, da ich keinen Zugriff auf eine RTX-GPU habe.

@sanjoy Ich

Ich habe versucht, das für Tensorflow 2.0 zu verwenden:

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

Es behebt Cudnn-Fehler auf meinem RTX2080, aber das Training ist so schnell wie mein 1050Ti auf meinem Laptop!
Während des Trainings eines 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 |
+-----------------------------------------------------------------------------+

Hinzufügen

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

Das Problem wurde nicht gelöst, ohne allow_growth erhalte ich den cudnn-Fehler, und mein RTX verwendet sowieso nur 3 GB oder Speicher.

Irgendeine Idee ?

Ich habe es versucht

    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)])

aber cudnn wirft immer noch einen Fehler

Dieser Fehler funktioniert auch im Tensorflow 1.15.0-py3-gpu Docker-Image (Ubuntu 18.04) mit zwei Titan V-GPUs (@sanjoy) - nicht mit RTXs. Dieser Fehler scheint jedoch nur bei meiner GPU0 aufzutreten, bei der Xorg und Gnome-Shell GPU0-Speicher verwenden, während GPU1 nur Python mit GPU-Mem verwendet und diesen Fehler nicht auslöst. Der Fehler tritt leider auch zeitweise auf - manchmal kann ich den Docker-Container entfernen, ihn mit denselben Einstellungen und demselben Code neu erstellen, dann verschwindet der Fehler. Oder nicht.

Ich konnte es über die Keras-Backend-Oberfläche beheben mit:

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)

Es folgt mein NVIDIA-SMI auf beiden GPUs

+-----------------------------------------------------------------------------+
| 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 |
+-----------------------------------------------------------------------------+

Ich habe das gleiche Problem wie @clementpoiret mit TF 2.0 über conda installiert. Durch die Verwendung des Flags allow_growth verschwindet das Problem, aber das macht das Training auch sehr, sehr langsam, langsamer als das, was ich auf TF 1.x hatte ... Eifrig zuerst, oder?

@clementpoiret und @EKami , beschleunigt es Ihr Training, wenn Sie config.gpu_options.allow_growth = True durch config.gpu_options.per_process_gpu_memory_fraction = 0.8 ersetzen? Sie können experimentieren, um herauszufinden, welche Fraktion Ihre GPU am meisten nutzt.

@ synapse8 Ich sehe in der Dokumentation von Tensorflow 2.0 kein Äquivalent. Wie kann ich das mit tf.config.experimental tun?

Bearbeiten: Ich werde versuchen, den Speicher auf diese Weise einzustellen, um zu sehen, ob das Problem dadurch behoben wird:

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)

Auf diese Weise können wir bequem setup_gpus(True, .9) anrufen

@clementpoiret : Bitte beachten Sie, dass der Aufruf von tf.config.experimental.set_memory_growth nicht erforderlich ist, da tf.config.experimental.set_virtual_device_configuration dieses Flag überschreibt, da es den GPU-Speicher aufteilt und den zugewiesenen Speicher vorab zuweist.

Dieses Problem ist nicht auf RTX beschränkt. Oder TF 2.0.

Hinzufügen:
_von Tensorflow.compat.v1 importieren Sie ConfigProto
aus tensorflow.compat.v1 InteractiveSession importieren
config = ConfigProto ()
config.gpu_options.allow_growth = True
session = InteractiveSession (config = config) _

Behebt das Problem "Cudnn-Handle konnte nicht erstellt werden: CUDNN_STATUS_INTERNAL_ERROR" mit der Umgebung wie folgt:

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
Könnte dies ein maximal zusammenhängendes Blockzuweisungsproblem mit den NVIDIA-Treibern sein? Wo ist es in Ordnung, die gleiche Gesamtspeichermenge zuzuweisen, jedoch in kleineren Blöcken?

Hallo,

Ich kann dies nicht auf meinem Computer reproduzieren, daher benötige ich Hilfe, die dies verursacht. Haben wir hier jemanden, der das Problem reproduzieren kann und bereit ist, ein praktisches Debugging durchzuführen?

Als Ausgangspunkt möchte ich verstehen, warum MinSystemMemory nicht genügend Speicher für cuDNN speichert. Wenn jemand mit einem Setup, das dieses Problem reproduziert, eine Protokollierung (als lokaler Patch) hinzufügen kann, um die von MinSystemMemory Speichermenge zu ermitteln, wäre dies großartig. Und hilft die Erhöhung der magischen 0.05 Zahl in MinSystemMemory der Situation?

@sanjoy Ich habe eine Version, die dieses Problem aufweist. Wie würde ich vorgehen, um auf MinSystemMemory zuzugreifen oder "die magische 0,05-Zahl einzustellen"? Ich habe größtenteils wieder Cuda 9.1 verwendet, aber es macht mir nichts aus, ein paar Dinge auszuprobieren.

@odinsbane Sie müssen TensorFlow aus dem Quellcode

Der erste Schritt besteht darin, LOG(INFO) oder std::cerr Zeilen zu MinSystemMemory hinzuzufügen, um available_memory und den Rückgabewert von MinSystemMemory auszudrucken. Stimmt available_memory mit dem überein, was nvidia-smi druckt? Wie viel Speicher hinterlassen wir für das System?

Zweitens hilft es überhaupt, die magische Zahl von 0.07 erhöhen?

Dieser funktioniert! Danke Jungs!

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)

Wir haben ein ähnliches Problem mit unserem RTX 2070 (Ubuntu 18.04, TF2). Wir haben verschiedene Kombinationen von CUDA 10.0- und libcudnn7.xxx-Versionen ausprobiert, aber der Fehler wird immer wieder angezeigt.
Auf einem anderen Computer haben wir eine GTX 1080ti und dieser läuft ohne Probleme.
Der NVIDIA-Treiber ist in beiden Fällen 430,50.

Es wird nicht durch tf.keras.utils.plot_model , ich entferne es und dieser Fehler erscheint immer noch, aber weniger häufig.
Update: Ich finde, dass dies nur passiert, wenn ich tf.keras.utils.plot_model . Ich werde es weiter versuchen.

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

Ich habe ein ähnliches Problem mit RTX 2080 Ti unter Ubuntu 18.04.3 LTS, tf 1.15, cuda 10.0.

Was in meinem Fall seltsam ist, ist, dass dies nur sehr gelegentlich vorkommt und wenn es einmal vorkommt, dauert es Minuten bis Stunden und verschwindet dann einfach von selbst .

Ich habe alle oben genannten Lösungen ausprobiert und keine kann es sofort beheben. Ich habe versucht nichts zu tun und warte nur, es wird endlich verschwinden.

Was ich auch versucht habe und oben nicht erwähnt wird:

  1. Entfernen Sie das Verzeichnis ~/.nv
  2. Einfach neu starten

Zu Ihrer Information, Fehlerprotokolle

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.

Wir stehen vor relevanten Problemen

Systemspezifikationen

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

Der Fehler wird ausgelöst, wenn ich versuche, LSTM, GRU, RNN usw. zu verwenden.

Tatsächlicher Fehler

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]

Scheinbares Problem

Wie es scheint, ist mein ganzes Gedächtnis ziemlich schnell aufgebraucht. Die Probleme scheinen nur im GPU-Modus aufzutreten, der gleiche Code funktioniert gut mit CPU

Versuche

  • Gedächtniswachstum zulassen
  • Erstellen Sie ein virtuelles Gerät mit begrenztem Speicher

Beide Versuche erzeugen den gleichen Fehler.

Irgendwelche Ideen?

Ich kann in diesem Bereich keine Fortschritte erzielen, da ich es nicht reproduzieren kann. Wenn Sie dies zuverlässig auf Ihrem Computer reproduzieren können, können Sie helfen. So geht's: https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -560963770, https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -561366750

Ich kann in diesem Bereich keine Fortschritte erzielen, da ich es nicht reproduzieren kann. Wenn Sie dies zuverlässig auf Ihrem Computer reproduzieren können, können Sie helfen. So geht's: # 24496 (Kommentar) , # 24496 (Kommentar)

Hallo @sanjoy , ich bin sehr

Ich habe den folgenden Code beim Stapelüberlauf gefunden. Könnte er helfen?

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))

Gibt es andere Möglichkeiten, um das benötigte Protokoll zu erhalten?

Ich werde eine VLOG -Anweisung einchecken, um diese Informationen zu erhalten. Wenn dies erledigt ist, können Sie dies mit tf-nightly installieren und reproduzieren (mit einigen zusätzlichen Flags werde ich Sie genau wissen lassen, welche)?

Sicherlich kann ich ein Paket auf diesem Computer installieren, wenn es auf pip oder conda verfügbar ist und ich eine virtuelle Umgebung verwende. Ich werde versuchen, den Fehler zu reproduzieren.

Sicherlich kann ich ein Paket auf diesem Computer installieren, wenn es auf pip oder conda verfügbar ist und ich eine virtuelle Umgebung verwende. Ich werde versuchen, den Fehler zu reproduzieren.

Können Sie bitte tf-nightly installieren (damit es das Commit aufnimmt, das TF_CPP_VMODULE ausführen, die auf gpu_device=5 ? Das sollte zwei Zeilen wie ausdrucken

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                                              

Können Sie diese Zahlen bitte hier angeben?

Leider ist mein aktueller Code nicht mit tf 2.0 kompatibel (ich verwende 1.15). Ich versuche ihn zu aktualisieren. Bitte gib mir etwas Zeit.

Dieses Problem scheint mit meiner RTX2080 zu tun zu haben. Ich habe eine Desktop-GTX1080. Alles scheint in Ordnung zu sein. Dann verwende ich Conda-Klon. Die Conda-Umgebung wird auf mein RTX2080-Notebook übertragen. Ich verwende Tensorflow2.0.0-GPU. Sobald der Anwendungscode Conv2d, LSTM, GRU verwendet, tritt dieses Problem auf.
bevor ich die folgenden Codes verwende, um dieses Problem zu lösen:
gpus = tf.config.experimental.list_physical_devices ('GPU')
wenn gpus:
Versuchen:

Derzeit muss das Speicherwachstum für alle GPUs gleich sein

    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:

Das Speicherwachstum muss eingestellt werden, bevor GPUs initialisiert wurden

    print(e)

aber seit einigen Tagen funktioniert die obige Methode nicht mehr

Ich habe das gleiche Problem mit GTX 960m

Hallo @sanjoy , ich habe gerade diese Ausgabe erhalten:

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

Hallo @sanjoy , ich habe gerade diese Ausgabe erhalten:

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

Vielen Dank!

Leider hat das nicht so viel geholfen, wie ich dachte. Wenn ich MinSystemMemory an einem lokalen Build auf 542015488 (dh min_system_memory = std::min(min_system_memory, 542015488ll) ) klemme, scheint resnet (zum Beispiel) gut zu funktionieren, und ich bekomme keine Fehler von cuDNN .

@sanjoy Ich bin in der Lage, das Problem (größtenteils konsistent) auf meiner Seite zu reproduzieren.

Relevante Nachrichten vom letzten Abend:

Mit Speicherwachstum ausdrücklich erlaubt

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

Ohne Änderungen an der Konfiguration des GPU-Geräts

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

EDIT: Modellinformationen, wenn es hilft.

__________________________________________________________________________________________________
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

Ein minimales Beispiel mit TF 1.15, und ich erhalte diesen Fehler. Unter RTX 2070 und NVIDIA 440.44 und CUDA Version 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.

Ich möchte in einem separaten Problem https://github.com/tensorflow/tensorflow/issues/36501 darauf hinweisen, dass bei Verwendung dieser Optionen die Ausführung des Codes ermöglicht wird. Die Beobachtung der tatsächlichen Speichernutzung der GPUs zeigt, dass dies nicht einmal wirklich der Fall ist inkrementelle Speichernutzung. Die obige Option behebt also den Fehler, macht aber nicht das, was sie behauptet zu tun. Ich habe das gleiche Modell in älteren TF-Versionen wie 1.2 ... usw. verwendet, und diese haben die tatsächliche inkrementelle Speicherzuweisung durchgeführt.

Ich habe die gleichen Probleme wie alle hier! Nach der Installation von tf 2.1 konnte ich kein einfaches MNIST-Beispiel ausführen, ohne der GPU Speicherwachstum hinzuzufügen. Ich benutze einen 2080 ti .

Das Hauptproblem, mit dem ich konfrontiert bin, ist, dass ich die Tensorflow-Wahrscheinlichkeit nicht zusammen mit tf 2.1 ausführen kann, ohne den verfluchten internen CUDNN-Fehler zu erhalten, selbst wenn dem Code Speicherwachstum hinzugefügt wird. Ich habe versucht, tf 2.0, CUDA 10.0 und CUDA 10.1, verschiedene CUDNN-Versionen, zu installieren. Ich habe es geschafft, das einfache MNIST-Beispiel so zu reparieren, dass es ohne Wachstum funktioniert, nachdem ich mein Ubuntu vollständig neu installiert habe, aber nicht das Beispiel für die Tensorflow-Wahrscheinlichkeit. Ich habe schließlich versucht, einen offiziellen Tensorflow-Nachtdock zu verwenden, und habe immer noch den gleichen Fehler bei der Verwendung der Tensorflow-Wahrscheinlichkeit erhalten (tf 2.2 im Container). Alles läuft gut auf der CPU. Ich habe auch versucht, den gleichen Docker auf einem Computer mit 1080 ti auszuführen, und das hat funktioniert ... Mit der RTX-Serie, die ich fühle, stimmt definitiv etwas nicht.

Fehler mit tf Docker und Tensorflow-Wahrscheinlichkeitsbeispiel und zusätzlichen Cudnn-Debug-Informationen:

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 Ich habe das gleiche Problem mit RTX 2080 und kann bei Bedarf aus dem Quellcode erstellen.

@odinsbane Sie müssen TensorFlow aus dem Quellcode

Der erste Schritt besteht darin, LOG(INFO) oder std::cerr Zeilen zu MinSystemMemory hinzuzufügen, um available_memory und den Rückgabewert von MinSystemMemory auszudrucken. Stimmt available_memory mit dem überein, was nvidia-smi druckt? Wie viel Speicher hinterlassen wir für das System?

Zweitens hilft es überhaupt, die magische Zahl von 0.07 erhöhen?

kann bestätigen, dass das Erstellen aus der Quelle durch Ändern der magischen Zahl 0.05 magische Zahl in 0.1 das Problem zu beheben scheint (zumindest für 1.15.2)!

In einem Ozean von lauten Posts scheint die minimale magische Anzahl von Systemspeichern völlig logisch. Danke für das Teilen!

@chsigg Irgendwelche Vorschläge? Vielleicht können wir versuchen, cuDNN, cuBLAS und andere NVIDIA-Bibliotheken zu initialisieren, bevor wir den gesamten GPU-Speicher reservieren?

Wir können auch versuchen, allow_growth standardmäßig zu aktivieren, aber das wird einige Zeit dauern.

Dieses Problem scheint mit meiner RTX2080 zu tun zu haben. Ich habe eine Desktop-GTX1080. Alles scheint in Ordnung zu sein. Dann verwende ich Conda-Klon. Die Conda-Umgebung wird auf mein RTX2080-Notebook übertragen. Ich verwende Tensorflow2.0.0-GPU. Sobald der Anwendungscode Conv2d, LSTM, GRU verwendet, tritt dieses Problem auf.
bevor ich die folgenden Codes verwende, um dieses Problem zu lösen:
gpus = tf.config.experimental.list_physical_devices ('GPU')
wenn gpus:
Versuchen:

Derzeit muss das Speicherwachstum für alle GPUs gleich sein

    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:

Das Speicherwachstum muss eingestellt werden, bevor GPUs initialisiert wurden

    print(e)

aber seit einigen Tagen funktioniert die obige Methode nicht mehr

Ich habe seit Tagen versucht, den Lambda Tensorflow2-Tutorial- Code für die

Ich treffe auch dieses Problem
anacondacloud install tensorflow-gpu2.0

RTX2070s
tensorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
Cudnn-Handle konnte nicht erstellt werden: CUDNN_STATUS_INTERNAL_ERROR
Faltungsalgorithmus konnte nicht abgerufen werden. Dies liegt wahrscheinlich daran, dass cuDNN nicht initialisiert werden konnte. Überprüfen Sie daher, ob oben eine Warnprotokollmeldung gedruckt wurde.

Ich treffe auch dieses Problem
anacondacloud install tensorflow-gpu2.0

RTX2070s
tensorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
Cudnn-Handle konnte nicht erstellt werden: CUDNN_STATUS_INTERNAL_ERROR
Faltungsalgorithmus konnte nicht abgerufen werden. Dies liegt wahrscheinlich daran, dass cuDNN nicht initialisiert werden konnte. Überprüfen Sie daher, ob oben eine Warnprotokollmeldung gedruckt wurde.

Haben Sie eingefügt:

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)

oben in Ihrem Zugangscode?

Nach einiger Zeit experimentieren wir mit einem anscheinend anderen Problem, das mit tf.signal.stft fehlschlägt
Endlich bin ich auf diesen Thread gestoßen und habe die Lösung ausprobiert, die das Speicherwachstum ermöglicht. Es hat auch mein Problem gelöst.
Ich habe tensorflow-gpu = 2.1 mit cudatoolkit = 10.1 von anaconda installiert, aber auch versucht, es zu installieren
Tensorflow-GPU über Pip mit genau dem gleichen Ergebnis. Ich kann dies unter Linux-Ubuntu 18.04 und Debian 9.12 mit den Karten reproduzieren

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

Ich habe auch zwei andere Karten in unserem Labor ausprobiert

  GeForce GTX 1080 Ti
  TITAN Xp COLLECTORS EDITION

wo der Code mit und ohne Speicherwachstum gut läuft

Mein minimales Problem ist unten. Interessanterweise ist das Problem nicht conv2d. Ich kann die Reihenfolge dieser drei Befehle ändern und es ist immer der dritte, bei dem einer fehlschlägt.

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")

Ich bin auch auf dieses Problem gestoßen
anacondacloud installiere tensorflow-gpu2.0
RTX2070s
tensorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
Cudnn-Handle konnte nicht erstellt werden: CUDNN_STATUS_INTERNAL_ERROR
Faltungsalgorithmus kann nicht abgerufen werden. Dies kann daran liegen, dass cuDNN nicht initialisiert werden konnte. Versuchen Sie daher zu prüfen, ob oben Warnprotokollmeldungen angezeigt werden.

Haben Sie eingefügt:

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)

Oben in dem Code, den Sie eingegeben haben?

Ja, ich habe dieses Problem auf diese Weise gelöst. Danke !!

Ich hatte das gleiche Problem und allow_growth = True war die Lösung. ABER für TensorFlow 2 müssen Sie dazu die folgenden Zeilen hinzufügen:

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

Vielen Dank an Benutzer @opcecco in dieser Ausgabe: https://github.com/tensorflow/tensorflow/issues/25446

Interessanterweise ist das Problem nicht conv2d. Ich kann die Reihenfolge dieser drei Befehle ändern und es ist immer der dritte, bei dem einer fehlschlägt.

@roebel Kannst du bitte Protokolle für ein paar verschiedene sechs Permutationen anhängen?

Und was passiert, wenn Sie das Programm auf (sagen wir) ändern:

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")

Tritt der Fehler immer noch beim conv2d oder tritt er beim dritten stft ?

@sanjoy sicher hier drei Variationen des obigen Skripts, die die Reihenfolge der Befehle ändern, und eine vierte Variante, die mit 4 stft beginnt und mit conv2d endet

Die vier verschiedenen Protokolle verwenden das Skript von
https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -593098386
Ersetzen der letzten vier Zeilen.

Kurz gesagt, die Ergebnisse hängen von der Reihenfolge ab:

stft-> blas-> conv2d schlägt beim Ausführen von conv2d fehl
conv2d-> stft-> blas schlägt beim Ausführen von stft fehl (also nicht das dritte, aber blas scheint bereits für conv2d geladen zu sein
matmul-> conv2d-> stft schlägt beim Ausführen von STFT fehl
stft -> - stft -> - stft-> stft-> matmul-> conv2d schlägt fehl, wenn conv2d ausgeführt wird. Bitte beachten Sie die Protokolle unten.

Es macht nichts aus, bei Bedarf nach anderen Varianten zu fragen.

conv2d last:

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

matmul zuletzt

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

stft zuletzt

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 stft first conv2d last:

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

Danke vielmals

Ich habe das gleiche Problem mit der folgenden Konfiguration:
TensorFlow installiert von (Quelle oder Binärdatei): r1.13.1, r.1.13.2, r1.14
Python-Version: 3.6.1
Bazel-Version (wenn aus der Quelle kompiliert):
GCC / Compiler-Version (beim Kompilieren aus dem Quellcode):
CUDA / cuDNN-Version: CUDA 10 mit cuDNN 7.4.1
GPU-Modell und Speicher: RTX 2070 8 GB.

Ich habe dieses Problem gelöst mit:
TensorFlow installiert von (Quelle oder Binärdatei): r1.12.0
Python-Version: 3.6.9
GCC / Compiler-Version: 4.8
CUDA / cuDNN-Version: CUDA 9.0 mit cuDNN 7.1.4
GPU-Modell und Speicher: RTX 2070 8 GB.
Hoffe hilfreich für Sie

Ich war auch mit einem solchen Problem konfrontiert, das durch Hinzufügen einer Umgebungsvariablen TF_FORCE_GPU_ALLOW_GROWTH = true gelöst wurde.

Die Konfiguration ist wie folgt:
Windows 10
Tensorflow aus Quelle r2.0 kompiliert
Bazel: 0,26,1
C ++ - Compiler: MSVC 2017
CUDA: 10
cuDNN: 7.6.5

Intel4930 CPU, NVIDIA Titan XP Pascal
Ubuntu 18.04.4, Miniconda spätestens,
`! conda list | grep "cud" gibt

    cudatoolkit               10.1.243             h6bb024c_0  
    cudnn                     7.6.5                cuda10.1_0  

`! conda list | grep "tensor" `` gibt

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  

Die erste Zelle im Jupiter-Notizbuch ist:

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)

Modell ist ein Variations-Autoencoder mit Gesamtparametern: 112.269
x_train.shape, y_train.shape, x_test.shape, y_test.shape gibt
((106496, 32, 32, 1), (106496,), (12288, 32, 32, 1), (12288,))

Code enthält:

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))

und es schlägt fehl. Konsole zeigt

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

I f anstelle der ersten Zelle, wie oben angegeben, verwende ich

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)

dann bekomme ich diesen Fehler


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?

Interessanterweise erhielt ich während meiner Kämpfe eine Nachricht von einem roten "No Entry" -Schild in meiner Menüleiste mit der Aufschrift "Fehler gebrochen Anzahl, Sie haben unerfüllte Abhängigkeit"
Ich habe ein Software-Update ausgeführt und es möchte libcudnn7-dev und libcudnn7-doc entfernen
sowie ein Upgrade von 57 anderen Bibliotheken, die mit Linux zu tun haben

BEARBEITEN: Nach dem Neustart scheint das Modell erfolgreich zu trainieren.

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)

oder dieses:

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)

Die Speicherauslastung auf der GPU beträgt <700 MB bei Stapelgröße 16 und
~ 1 Gigabyte mit einer Stapelgröße von 256 (die 3x schneller trainiert)

Ich habe versucht, aus dem Quellcode zu kompilieren, bin aber auf dasselbe Problem gestoßen. Ich konnte endlich mein Problem beheben, indem ich config.gpu_options.allow_growth = True .

Aber wenn ich dieses Problem in der Befehlszeile festgestellt habe, wie füge ich diese Codes hinzu?

Ich treffe auch dieses Problem
anacondacloud install tensorflow-gpu2.0
RTX2070s
tensorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
Cudnn-Handle konnte nicht erstellt werden: CUDNN_STATUS_INTERNAL_ERROR
Faltungsalgorithmus konnte nicht abgerufen werden. Dies liegt wahrscheinlich daran, dass cuDNN nicht initialisiert werden konnte. Überprüfen Sie daher, ob oben eine Warnprotokollmeldung gedruckt wurde.

Haben Sie eingefügt:

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)

oben in Ihrem Zugangscode?

Ich hatte genau das gleiche Problem wie oben. Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

Die Lösung von @robosmith behebt mein Problem vollständig!

Meine Angaben:
RTX 2070
Ubuntu 18.04 LTE
Tensorflow 2.1.0
Keras 2.3.0
cudnn 7.6.5
cuda10.1.0
conda 4.8.3
Python 3.7.7

Gebaut über conda install tensorflow-gpu keras

Ich danke dir sehr! Dies ist das erste Mal, dass TF-2 überhaupt funktioniert! Und TF-1 hat ganz aufgehört zu arbeiten, weshalb ich mich entschlossen habe, ein Upgrade durchzuführen und zu sehen, was passiert!

Vielen Dank!

config.gpu_options.allow_growth = True

Wenn Sie Tensorflow 2.0 verwenden, können Sie verwenden
tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)
Dieser Code steht nach import tensorflow as tf aber vor Ihrem Code.

Ich habe versucht, aus dem Quellcode zu kompilieren, bin aber auf dasselbe Problem gestoßen. Ich konnte endlich mein Problem beheben, indem ich config.gpu_options.allow_growth = True .

Dieser Code wird gemeinsam genutzt, um ihn sowohl für Tensorflow- als auch für Keras-Benutzer schneller verfügbar zu machen.
Quelle von hier

# 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

Ich wollte mich nur einschalten und sagen, dass das Problem immer noch da ist.

Meine Angaben:
Ubuntu 20.04
NVIDIA RTX 2070
Nvidia_driver 440.64
Tensorflow-gpu 2.0.1 (Wird über conda installiert, wodurch Cudatoolkit und CuDNN automatisch in derselben Umgebung installiert werden.)
cudatoolkit 10.1.243
cudnn 7.6.5

Das Problem wird durch tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) gelöst

Dies scheint jedoch eher eine Umgehung als eine tatsächliche Lösung zu sein, und viele Leute haben heutzutage 20XX-Karten. Wahrscheinlich sollte es ein Update geben, in dem dieses Problem behoben wird.

Update: Da ich doppelt boote, habe ich auch versucht, nach Windows zu suchen. Das Problem bleibt dort bestehen.
Windows 10
Nvidia-Treiber 445.87
Ansonsten ist alles ähnlich

Die Installation des neuesten Treibers (445.87) für meinen RTX 2080 hat dieses Problem für mich behoben.

@NBouman Das ist interessant, aber für mich unter Ubuntu 18.04 mit GeForce GTX 1050 TI habe ich gerade auf den letzten verfügbaren Treiber 440.82 aktualisiert. Es ist weiterhin erforderlich, Speicherwachstum zuzulassen, damit es funktioniert.

Die Installation des neuesten Treibers (445.87) für meinen RTX 2080 hat dieses Problem für mich behoben.

@NBouman Welches Betriebssystem verwenden Sie? Ich bin auf Ubuntu 20.40 und der neueste verfügbare Treiber, den ich finden konnte, ist 440.82, und wie bei @roebel bleibt das Problem bestehen.

@roebel @eduardoscsouza Ich bin unter Windows 10 mit dem Computer, auf dem dieses Problem früher

Ich wollte mich nur einschalten und sagen, dass das Problem immer noch da ist.

Meine Angaben:
Ubuntu 20.04
NVIDIA RTX 2070
Nvidia_driver 440.64
Tensorflow-gpu 2.0.1 (Wird über conda installiert, wodurch Cudatoolkit und CuDNN automatisch in derselben Umgebung installiert werden.)
cudatoolkit 10.1.243
cudnn 7.6.5

Das Problem wird durch tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) gelöst

Dies scheint jedoch eher eine Umgehung als eine tatsächliche Lösung zu sein, und viele Leute haben heutzutage 20XX-Karten. Wahrscheinlich sollte es ein Update geben, in dem dieses Problem behoben wird.

Update: Da ich doppelt boote, habe ich auch versucht, nach Windows zu suchen. Das Problem bleibt dort bestehen.
Windows 10
Nvidia-Treiber 445.87
Ansonsten ist alles ähnlich

Für Tensorflow 2.0.0 gearbeitet mit:
tf.config.experimental.set_memory_growth(tf.config.experimental.list_physical_devices('GPU')[0],True)

Vielen Dank!!! Tausende von Dankeschön !!!!!!!!!!!!!!!

Betriebssystem: Ubuntu 18.04 lts

Treiberversion: 435.21

CUDA: cudatoolkit 10.1

CUDNN: cudnn-7.6.5-cuda10.1_0

Ich habe Anaconda Tensorflow installiert

conda create -n tf-gpu tensorflow-gpu

Das Cudatoolkit und Cudnn werden von Anaconda über den vorherigen Befehl automatisch installiert.

Ich habe die gleiche Frage: Der Fehler:

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}}]]

Wir haben hier also ein ungelöstes Problem (abgesehen von einer Problemumgehung, die gegen offizielle Empfehlungen verstößt, das Speicherwachstum nicht für eine effizientere Speicherbehandlung zu verwenden). Das Entwicklerteam hat nicht viel Feedback gegeben. Ich wundere mich warum?

Dieser Fehler scheint eine ganze Reihe von Tensorflow-Versionen (1.13, 2.0, 2.1) zu betreffen. Wenn ich richtig gesehen habe, werden alle Probleme mit cuda 10 gemeldet. Der Code läuft auf vielen Karten einwandfrei, auf anderen jedoch nicht.
Könnte uns jemand vom Entwicklerteam sagen, ob dies mehr auf ein Problem im Cuda-Treiber als in der Tensorflow-Schicht hindeutet? In diesem Fall wäre es sicherlich hilfreich, den Fehlerbericht an die NVIDIA-Support-Seiten zu senden. Wäre es nicht?

Könnte jemand vom Tensorflow-Entwicklerteam kommentieren, wie er diesen Fehler sieht? Gibt es jemanden, der sich darum kümmert?

Haben Leute überprüft, ob sich zwei gemeinsam genutzte CuDNN 7-Bibliotheken im Pfad oder im LD-Bibliothekspfad befinden? Diese Bibliothek enthält keine Neben- oder Patchnummern, aber Versionsinkongruenzen können zu dieser Fehlermeldung führen.

Ich habe bei NVIDIA einen Fehlerbericht geöffnet. Ich werde Sie wissen lassen, was dabei herauskommt.

@samhodge
In der Tat sind viele Versionen von libcudnn installiert, jede anaconda env hat ihre eigene Version.
Normalerweise wird anaconda mit ordnungsgemäß eingerichtetem Pfad installiert, sodass es ziemlich schwierig ist, nicht die richtigen Bibliotheken zu finden.

Ich habe eine Strace gemacht und die Bibliotheken durchsucht, die geöffnet werden, wenn es fehlschlägt
Sie stammen konsistent aus dem Anaconda-Env-Verzeichnis, in dem sich das Tensorflow-Paket befindet (siehe unten).
Neben libcuda ist das Version 440.82 und das habe ich mit dem NVIDIA Installer kompiliert.

Ich kann LD_LIBRARY_PATH auf eines der anderen anaconda env lib-Verzeichnisse mit unterschiedlichen cudatoolkits und unterschiedlichen libcudnn setzen, die Ablaufverfolgung bleibt gleich.
Beachten Sie auch, dass es nicht lbcudnn ist, das das Problem aufwirft. Es ist immer die dritte libcuxyz-Bibliothek
verwendet und dies nur auf bestimmten GPUs (ich habe das gleiche Installationsskript auf verschiedenen Computern mit unterschiedlichen GPUs verwendet, einige funktionieren, andere nicht) und sie funktionieren alle, wenn das Speicherwachstum aktiviert ist.

(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

Ich habe das gleiche Problem unter Ubuntu 20.04 mit einer GeForce RTX 2060 SUPER. Ein NN mit dichten Schichten funktioniert gut. Aber mit CNN-Schichten bekomme ich 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.
Das Hinzufügen von tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) macht keinen Unterschied für den Fehler.
Ich verfolgte die Installation gemäß https://www.tensorflow.org/install/gpu und nvidia-smi zeigt:
Driver Version: 440.64.00 CUDA Version: 10.2
Mein conda env hat:

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

In einer Conda-Umgebung mit tf 1.15 erhalte ich den gleichen Fehler. Es wäre großartig, wenn dies behoben werden könnte.

Aktualisieren

Nach der Verwendung von export TF_FORCE_GPU_ALLOW_GROWTH=true funktioniert alles. Ich hatte den Eindruck, dass die tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) dasselbe tun würden, aber das ist nicht der Fall. Ich denke, dies sollte auf der TensorFlow GPU-Support-Webseite klar angegeben werden.

@samhodge
In der Tat sind viele Versionen von libcudnn installiert, jede anaconda env hat ihre eigene Version.
Normalerweise wird anaconda mit ordnungsgemäß eingerichtetem Pfad installiert, sodass es ziemlich schwierig ist, nicht die richtigen Bibliotheken zu finden.

Ich habe eine Strace gemacht und die Bibliotheken durchsucht, die geöffnet werden, wenn es fehlschlägt
Sie stammen konsistent aus dem Anaconda-Env-Verzeichnis, in dem sich das Tensorflow-Paket befindet (siehe unten).
Neben libcuda ist das Version 440.82 und das habe ich mit dem NVIDIA Installer kompiliert.

Ich kann LD_LIBRARY_PATH auf eines der anderen anaconda env lib-Verzeichnisse mit unterschiedlichen cudatoolkits und unterschiedlichen libcudnn setzen, die Ablaufverfolgung bleibt gleich.
Beachten Sie auch, dass es nicht lbcudnn ist, das das Problem aufwirft. Es ist immer die dritte libcuxyz-Bibliothek
verwendet und dies nur auf bestimmten GPUs (ich habe das gleiche Installationsskript auf verschiedenen Computern mit unterschiedlichen GPUs verwendet, einige funktionieren, andere nicht) und sie funktionieren alle, wenn das Speicherwachstum aktiviert ist.

(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

Sie veranschaulichen also meinen Standpunkt. libcudnn.so.7 sagt nicht, dass 7.XXX.YYY zu 7.XXX.YYY eine weitere Abhängigkeit von CUDA 10.2 10.1 10.0 9.2 9.1 9.0 etc.

Ich habe den Fehler nicht gesehen, seit ich damit begonnen habe, den Pfad gut zu verwalten und die verfügbare Speichermenge zu verwalten, bevor ich ein Diagramm bekannter Größe initialisiert und sichergestellt habe, dass die Ziel-GPU nur genügend Speicher für das Diagramm und genügend Speicher verwendet, um abzufragen, wie viel CUDA abgefragt wird Speicher ist verfügbar.

Ich denke, es ist ein Ressourcenproblem. Wie viel Speicher ist verfügbar, wenn Sie den Prozess starten, und wie viel Speicher verwendet Ihr Diagramm?

@ kognat-docs

Sie veranschaulichen also meinen Standpunkt libcudnn.so.7 sagt nicht 7.XXX.YYY zusätzlich zu 7.XXX.YYY hat eine weitere Abhängigkeit von CUDA 10.2 10.1 10.0 9.2 9.1 9.0 usw.

Die von Ihnen gestellte Frage lautete: "Haben die Benutzer überprüft, ob sich zwei gemeinsam genutzte CuDNN 7-Bibliotheken im Pfad oder im LD-Bibliothekspfad befinden?". Und meine Antwort war: Ich habe das überprüft, es gibt nur einen.
Ich habe dir die Spur geschickt.

Ich habe den Fehler nicht gesehen, seit ich mit der Verwaltung des Pfads begonnen habe

Was meinst du mit der Verwaltung des Pfades?
Ich verwalte immer meine Wege! Ich habe eine Conda-Umgebung installiert, deren Konsistenz ich überprüft habe! Alles ist so, wie es von Anaconda verpackt wurde. Ich habe dies überprüft.

Wie auch immer, Sie mögen glauben, ich bin zu dumm, um eine Anakonda aufzubauen. Gut
Ich habe jetzt das offizielle Docker-Image heruntergeladen

Tensorflow / t ensorflow: 2.1.0-gpu-py3

und führe dort mein Skript aus. Es stürzt ab, wenn ich nicht habe

export TF_FORCE_GPU_ALLOW_GROWTH = true

Kann ich Pfade besser verwalten?

und Verwalten der verfügbaren Speichermenge vor dem Initialisieren eines Diagramms bekannter Größe und Sicherstellen, dass die Ziel-GPU nur genügend Speicher für das Diagramm und genügend Speicher verwendet, um abzufragen, wie viel CUDA-Speicher verfügbar ist.

Ich denke, es ist ein Ressourcenproblem. Wie viel Speicher ist verfügbar, wenn Sie den Prozess starten, und wie viel Speicher verwendet Ihr Diagramm?

Wie ich oben in meinem Bericht geschrieben habe, gibt es keine Grafik (oder besser gesagt, es gibt kaum eine Grafik)! Ich führe nur diese vier Zeilen

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")

und es stürzt ab. Wenn ich die Reihenfolge der drei Zeilen ändere, stürzt es nach diesen drei Vorgängen immer ab (ich hatte dies in meinem Fehlerbericht erklärt).

Nur zum Spaß habe ich die Bytes gezählt: Es sind <83kB Datenspeicher erforderlich. Die GPU ist leer, ich verwende sie nicht für Grafiken und es laufen keine anderen Prozesse darauf. Auf den verschiedenen Systemen stehen 4GB oder 11GB zur Verfügung! Außerdem weiß ich, wie man nvidia-smi ausführt! Die Karte ist also immer noch leer. Ich kann diese 4 Zeilen, die 84 KB benötigen, nicht ausführen!

Nur zu Ihrer Information, ein Fehler aufgrund von Speicherauslastung sieht ganz anders aus, ich habe auch diese. Für meine realen Grafiken kann ich diese sehr gut erkennen und entsprechend reagieren.

Trotzdem vielen Dank für Ihre Bemühungen.

@roebel Haben Sie den Kommentar von @sanjoy zum Debuggen über die CPP https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -561366750 gesehen?

Ich bin nicht dazu gekommen, den Tensorflow neu zu kompilieren und auszuprobieren. Ihre Versionen bewegen sich so schnell, dass ich ein bisschen brauchen würde, um alles einzurichten und zu kompilieren. Außerdem hat 1.15 die Unterstützung für die von mir verwendete gcc-Version eingestellt, und 1.13 erhält keine Updates, sodass es für mich sowieso etwas sinnlos war, dies zu debuggen.

@roebel Ich konnte mich nicht erinnern, was das Problem für Sie ausgelöst hat.

Siehe dies https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -480549043

Aus diesem Grund dachte ich, es sei speicherbezogen. Dieses Problem hat mich und die Benutzer meiner Software auf einer Vielzahl von Plattformen seit einiger Zeit nicht mehr betroffen.

@samhodge

Ja, ich verstehe, wenn es einen Fehler gibt, scheint er nur durch eine bestimmte Situation ausgelöst zu werden.

@odinsbane

danke nein ich hatte das nicht bemerkt. Ich werde sehen, ob es gelingt, die neueste Version tf2.2.0 zu kompilieren.

Tatsächlich habe ich den Docker mit Tensorflow 2.2 ausprobiert, er verwendet dieselbe Version von Cuda 10.1 und hat dasselbe Problem.

Ich dachte, dies sei nur ein Windows-Problem, also habe ich eine Ubuntu-Umgebung von Grund auf neu installiert, nur um herauszufinden, dass meine Grafikkarte (RTX 2080) das Problem ist. Leider denke ich, dass ich aufgrund dieses Problems eine andere Plattform für maschinelles Lernen auswählen werde, da dies seit 2018 ein Problem zu sein scheint.

@ kognat-docs

und Verwalten der verfügbaren Speichermenge vor dem Initialisieren eines Diagramms bekannter Größe und Sicherstellen, dass die Ziel-GPU nur genügend Speicher für das Diagramm und genügend Speicher verwendet, um abzufragen, wie viel CUDA-Speicher verfügbar ist.

Ich denke, es ist ein Ressourcenproblem. Wie viel Speicher ist verfügbar, wenn Sie den Prozess starten, und wie viel Speicher verwendet Ihr Diagramm?

Wie ich oben in meinem Bericht geschrieben habe, gibt es keine Grafik (oder besser gesagt, es gibt kaum eine Grafik)! Ich führe nur diese vier Zeilen

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")

und es stürzt ab. Wenn ich die Reihenfolge der drei Zeilen ändere, stürzt es nach diesen drei Vorgängen immer ab (ich hatte dies in meinem Fehlerbericht erklärt).

Nur zum Spaß habe ich die Bytes gezählt: Es sind <83kB Datenspeicher erforderlich. Die GPU ist leer, ich verwende sie nicht für Grafiken und es laufen keine anderen Prozesse darauf. Auf den verschiedenen Systemen stehen 4GB oder 11GB zur Verfügung! Außerdem weiß ich, wie man nvidia-smi ausführt! Die Karte ist also immer noch leer. Ich kann diese 4 Zeilen, die 84 KB benötigen, nicht ausführen!

Haben Sie beobachtet, wie viel Speicher verwendet wurde, indem Sie watch auf nvidia-smi verwendet haben, während Ihr Prozess mit einem Intervall von 50 ms ausgeführt wurde?

Sehen Sie sich dieses Update an, das für andere Personen funktioniert hat

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

Oder Sie können das freundliche Handbuch lesen:
https://www.tensorflow.org/guide/gpu#limiting_gpu_memory_growth

Sie können den Patch also ausführen, ohne den Code zu berühren, indem Sie einfach Ihre Laufzeitumgebung ändern.

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

Gute Nachrichten!
Folgen
https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -561366750

Ich habe die Version 2.1 mit dem Anaconda-Tensorflow-Rezept von hier neu erstellt
https://github.com/AnacondaRecipes/tensorflow_recipes

Ich habe zwei Drucke in MinSystemMemory hinzugefügt, die "available_memory" und "min_system_memory" anzeigen.
Auf meinem System mit GeForce GTX 1050 Ti Deaktivieren des TF-Standardprotokolls
Ich habe das

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 meldet, dass die GPU 4040 MB hat. Auf diesem System läuft X auf der Karte mit 13 MB, sodass die Zahlen in Ordnung zu sein scheinen.

min_system_memory ist so eingestellt

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

Die maximale Speichermenge wird also trotzdem gewählt. Stattdessen habe ich einen Mechanismus hinzugefügt, um das min_system_memory über die Umgebungsvariable TF_FORCE_MIN_SYSTEM_MEMORY_MB zu erzwingen.
Dann rennen

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

das Problem ist behoben!

Leider habe ich derzeit kein System mit einer funktionierenden RTX-Karte und bin mir nicht sicher, wann diese wieder funktionieren werden. Wenn jemand bereit wäre, dies auf einer solchen Karte zu testen, könnte ich das Pip-Paket und den Inhalt der Conda-Umgebung für Ubuntu Linux bereitstellen, das installiert werden muss, damit es ausgeführt wird.

Netter @roebel !

Könnte es wert sein, dies als Pull-Anfrage vorzuschlagen und zu den Dokumenten hinzuzufügen.

@samhodge @sanjoy @odinsbane

Könnte es wert sein, dies als Pull-Anfrage vorzuschlagen und zu den Dokumenten hinzuzufügen.

Sicher, aber das Problem ist, dass die Lösung für die anderen Karten wahrscheinlich nicht funktioniert.
Für meine GTX 1050 beträgt der Gesamtspeicher 4 GB und der Standard-Systemspeicher bleibt erhalten
durch Tensorfluss ist max (300 MB, 4 GB * 0,05). Für die GTX1050 sind dies also 300 MB, was anscheinend zu klein ist. Wie oben erwähnt, muss ich auf 310 MB erhöhen.

Für den RTX2080 beträgt der Gesamtspeicher 11 GB, maximal (300 MB, 11 GB * 0,05).
wählt den Systemspeicher auf 550 MB, was den Ergebnissen des 1050 entspricht
sollte normalerweise ausreichen.

Ich werde bis Ende der Woche wieder Zugriff auf die RTX2080-GPUs haben und sehen
was ich dort bekomme.

@samhodge @sanjoy @odinsbane

Endlich konnte ich die gepatchte Bibliothek auf den RTX 2080-Karten ausführen.
Wie erwartet wird die gepatchte Version nicht bestanden. Hier nochmal das Drehbuch

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")

Und hier die Matrix von available memory , die von gpu_device.cc gemeldet wurde,
Standardwert von Min_system_memory wie in gpu_device.cc und dem ausgewählt
min value of the min_system_memory Ich muss auswählen, damit das Skript nicht abgebrochen wird:

Karte | AvailMem | Def MinSysMem | Erforderliches MinSysMem
: ------- |: ----------- |: ---------- |: --------------- --------
1050 TI | 4163764224 | 314572800 | 325058560
1080 TI | 11567431680 | 578371584 | 335544320
2080 TI | 11381964800 | 569098240 | 618659840

Während 1050 und 1080 das Skript mit ungefähr der gleichen Speichergröße ausführen
Der RTX2080 benötigt fast doppelt so viel Speicher. Das hört sich nicht gut an
mir.

Irgendwelche Vorschläge, was Sie versuchen sollten, um dies auf einen vergleichbaren Wert zu bringen?

@roebel

Ich habe in meiner C ++ - Anwendung für eine Reihe von Iterationen damit zu kämpfen.

Am Ende ging es um Folgendes.

Führen Sie Modelle nur auf der GPU aus, wenn genügend Speicher verfügbar ist, um das Modell auszuführen.

Die Menge an Speicher, die das Modell benötigt, ist also quantifizierbar.

Sie benötigen also einen GPU-Speicher als Prozentsatz, der zu diesem Modell passt.

Dann müssen Sie auch genau wissen, wie viel Speicher auf der Karte verfügbar ist, bevor Sie den Speicher zuweisen, der den Rennbedingungen unterliegt, da Sie nicht wissen, was CUDA-Speicher gleichzeitig auf dem Betriebssystem verwendet.

Abgesehen von den Rennbedingungen müssen Sie auch den freien Speicher messen.

Dies geschieht mit cudaMemInfo , das an sich Speicher verwendet.

Vorausgesetzt, Sie haben genug Speicher, um cudaMemInfo einmal zum Messen auszuführen, und Sie müssen sicherstellen, dass genügend Speicher frei ist, um zum Modell zu passen, und cudaMemInfo dann und nur noch einmal ausführen Dann können Sie genug Prozentsatz des verfügbaren VRAM auf dieser Karte zuweisen, um das Modell auszuführen.

Auf jeden Fall ist das Mitnehmen von meinem zufälligen Geschwätz, dass cudaMemInfo erforderlich ist, um die zur Zuweisung verfügbare Speichermenge abzufragen, die an sich auch einen Teil des verfügbaren Speichers verwendet.

Vielleicht ist die von cudaMemInfo verwendete Speichermenge auf einer Turing-basierten Karte anders als auf einer Pascal-basierten Karte. Wenn Sie möchten, kann ich jemanden von NVIDIA dazu bringen, einen Blick darauf zu werfen.

Ja, ich kann überhaupt keinen Hinweis auf cudaMemInfo aber das scheint die Art von Footprint zu sein, die maximal 300 MB und 5% des Kartenspeichers beträgt.

einen Blick auf:

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

Es scheint nicht so, als würde es dies per se verwenden.

Ich denke nicht, dass wir Katz und Maus mit der Menge an Speicher spielen sollten, die wir für Systembibliotheken reservieren müssen - wie Sie bemerkt haben, gibt es keinen systematischen Weg, dies richtig zu machen.

Stattdessen sollten wir IMO versuchen, die Systembibliotheken zu initialisieren, bevor der BFC-Allokator die Möglichkeit hatte, den Rest des GPU-Speichers zuzuweisen.

CC @chsigg

Wahrscheinlich sollte man dies nur tun, wenn das Wachstum des Speichers deaktiviert ist. Andernfalls benötigen Sie für den 2080 immer etwa 580 MB, auch wenn Sie nicht alle Operatoren benötigen.

Ich habe einige weitere Tests bezüglich der minimalen Systemspeicheranforderungen für die Ausführung von Kombinationen der drei Operationen aus meinem Testfall durchgeführt. Ich vergleiche nur die Karten 1080 und 2080. Sie finden conv2d nicht alleine, da es auf jeden Fall blas initialisiert. Kommt raus

GPU | MatMul | STFT | Conv2D + MatMUL | MatMul + STFT | MATMUL + STFT + Conv2D |
: --- |: --- |: --- |: --- |: --- |: ---
1080 | 140 MB | 130 MB | 290 MB | 170 MB | 320 MB
2080 | 190 MB | 190 MB | 520 MB | 250 MB | 580 MB

Man kann sehen, dass auf dem 2080 cuda für jede Operation ein Overhead erforderlich ist und dass sich dieser Overhead erhöht, wenn mehr Bibliotheken verwendet werden. In den meisten Fällen beträgt der Overhead <100MB , wird jedoch zu >220MB sobald Conv2D beteiligt ist.

Wenn @samhodge Kontakt zu NVIDIA hat, würde ich es

Hallo, alle miteinander!
Ich habe ein ähnliches Problem mit der Begrenzung des Speicherwachstums gelöst, und Sie können es versuchen.

Code finden Sie im Abschnitt Speicherwachstum begrenzen

(Dies ist mein erster Kommentar in GitHub)

Ich hatte vorher ein ähnliches Problem. Die manuelle Begrenzung des GPU-Speichers hat geholfen. https://github.com/tensorflow/tensorflow/issues/25160#issuecomment -643703167

Ich habe das gleiche Problem unter Ubuntu 20.04 mit einer GeForce RTX 2060 SUPER. Ein NN mit dichten Schichten funktioniert gut. Aber mit CNN-Schichten bekomme ich 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.
Das Hinzufügen von tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) macht keinen Unterschied für den Fehler.
Ich verfolgte die Installation gemäß https://www.tensorflow.org/install/gpu und nvidia-smi zeigt:
Driver Version: 440.64.00 CUDA Version: 10.2
Mein conda env hat:

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

In einer Conda-Umgebung mit tf 1.15 erhalte ich den gleichen Fehler. Es wäre großartig, wenn dies behoben werden könnte.

Aktualisieren

Nach der Verwendung von export TF_FORCE_GPU_ALLOW_GROWTH=true funktioniert alles. Ich hatte den Eindruck, dass die tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) dasselbe tun würden, aber das ist nicht der Fall. Ich denke, dies sollte auf der TensorFlow GPU-Support-Webseite klar angegeben werden.

Alter, deine Lösung rettet mein Leben.

Nvidia hat gerade die Linux-Display-Treiber 440.100 und 450.51 (Beta) veröffentlicht.
Ich habe den 440.100 ausprobiert und das Problem wurde dadurch nicht behoben. Hat jemand die Beta 450.51 ausprobiert?

@eduardoscsouza

Nvidia hat gerade die Linux-Display-Treiber 440.100 und 450.51 (Beta) veröffentlicht.
Ich habe den 440.100 ausprobiert und das Problem wurde dadurch nicht behoben. Hat jemand die Beta 450.51 ausprobiert?

Ich habe 450.36.06 versucht. Überprüfen Sie https://github.com/tensorflow/tensorflow/issues/25160#issuecomment -643703167.

der Code, der für mich funktioniert hat:

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

_Bitte stellen Sie sicher, dass dies ein Fehler ist. Gemäß unserer GitHub-Richtlinie behandeln wir nur Code- / Dokumentfehler, Leistungsprobleme, Funktionsanforderungen und Build- / Installationsprobleme auf GitHub. tag: bug_template_

System Information

  • Habe ich benutzerdefinierten Code geschrieben (im Gegensatz zur Verwendung eines in TensorFlow bereitgestellten Beispielskripts): Ja und Nein (unten beschrieben)
  • Betriebssystemplattform und -verteilung (z. B. Linux Ubuntu 16.04): Manjaro
  • Mobiles Gerät (z. B. iPhone 8, Pixel 2, Samsung Galaxy), wenn das Problem auf einem mobilen Gerät auftritt:
  • TensorFlow installiert von (Quelle oder Binärdatei): tf-nightly-gpu (19. Dezember, r1.13)
  • TensorFlow-Version (Befehl unten verwenden): 1.13.0-dev20181219
  • Python-Version: 3.7.1
  • Bazel-Version (wenn aus der Quelle kompiliert):
  • GCC / Compiler-Version (beim Kompilieren aus dem Quellcode):
  • CUDA / cuDNN-Version: CUDA 10 mit cuDNN 7.4.1
  • GPU-Modell und Speicher: RTX 2070 8 GB

Beschreiben Sie das aktuelle Verhalten
Ich verwende das CNN-Modell auf MNIST. Wenn ich mit der GPU laufe, stoße ich auf
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

Ich habe ein bisschen gegraben und festgestellt, dass es sich um ein Speicherproblem handelt (was nicht der Fall sein sollte, da ich 32 GB RAM und 64 GB Swap habe. Ich habe htop ausgeführt, als ich das Modell ausgeführt habe, und ich habe 20 + GB frei, was mehr als ist genug für die 8 GB vRAM-Zuordnungen.

Wenn Sie gpu_options.allow_growth = True verwenden, funktioniert das Modell ordnungsgemäß, und das Festlegen von os.environ['CUDA_VISIBLE_DEVICES'] = '-1' funktioniert ebenfalls. Dies bedeutet, dass ich mit einem Speicherproblem konfrontiert bin, aber ich sehe nicht wie.

Die Verwendung von gpu_options.allow_growth = True behebt nicht das gleiche Problem, wenn versucht wird, Tensorflow / Models / Official / Mnist / Model auszuführen, das sich mit meinem Code ähnlich verhalten sollte.

Code zur Reproduktion des Problems

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()

Das hat bei mir funktioniert.RTX 2060Ubuntu 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 ...

Hallo @ bm777

Nach meiner Untersuchung vor einigen Monaten fasse ich zusammen, wie ich das Problem verstehe

GPU-Modell und Speicher: RTX 2070 8 GB
... was nicht der Fall sein sollte, da ich 32 GB RAM und 64 GB RAM habe

Das Problem ist nicht der Systemspeicher, das Problem ist der GPU-Speicher!

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

funktioniert, weil die GPU nicht verwendet wird!

Einige Erklärungen:

TF hat zwei Betriebsarten:

  1. allow memory growth = false : In diesem Fall ordnet TF etwas Speicher für die Systembibliotheken vor, wobei eine grobe Schätzung von verwendet wird
    wie viel Speicher benötigt wird. WIE Sie hier lesen können https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -633953715 TF verwendet für diese Vermutung die Formel max(300MB, GPU-MEM * fac) . Für TF2.1 fac = 0.05 für TF2.2 und wenn ich
    Denken Sie daran, es ist fac=0.07 . Jetzt haben Sie also 8 GB, was 400 MB für den vorab zugewiesenen GPU-Speicher unter TF2.1 ergibt
    und 560 MB unter TF2.2.

    Ich habe den erforderlichen vorab zugewiesenen Speicher für einige GPUs und TF21 hier experimentell ausgewertet: https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -637715002 und hier https://github.com/tensorflow/tensorflow / issue / 24496 # issuecomment -637715002

    Es stellte sich heraus, dass ich für Conv2D-Vorgänge dort 520 MB benötigte. Unter TF21 hätten Sie weniger als unter TF22 mehr. Leider erwähnen Sie Ihre TF-Version nicht, aber ich gehe davon aus, dass Sie TF2.1 verwenden. Wenn Sie TF2.2 verwenden und es dennoch fehlschlägt, liegt dies möglicherweise daran, dass Sie eine andere GPU verwenden. Tatsache ist jedenfalls, dass es fehlschlägt. Siehe unten

2) allow memory growth = true : TF verwendet keinen vorab zugewiesenen Speicher und lädt die Bibliotheken so, wie sie kommen. In der TF-Dokumentation wird dies aufgrund einer möglichen Speicherfragmentierung als problematisch deklariert und ist daher standardmäßig off .

Meine Einstellung:

Angesichts des großen Bereichs des erforderlichen Speichers für die Bibliotheken, der von den Operationen abhängt, die Sie ausführen, sowie von der GPU, die Sie ausführen, scheint es sehr schwierig zu sein, den Modus allow memory growth = false richtig zu machen (siehe https://github.com/tensorflow/). Tensorflow / Issues / 24496 # Issuecomment-637950411). Die aktuelle Lösung: Die Vergrößerung des vorab zugewiesenen Speichers, der für TF2.2 durchgeführt wurde, ist problematisch, wenn Ihre GPU eher klein ist. Dies blockiert die Verwendung des Speichers, vorausgesetzt, Sie benötigen alle verfügbaren Bibliotheken (blas, Conv, FFT und ich weiß nicht, ob es andere gibt). Wenn Sie nicht alle verwenden, wird vorab zugewiesener Speicher verschwendet, wodurch sich die Modellgröße verringert, die Sie möglicherweise für Ihre Anwendung laden. Andererseits glaube ich, dass das Problem der Speicherfragmentierung verhindert werden kann, wenn Sie Modelle erstellen, die Systembibliotheken frühzeitig zum Laden zwingen, bevor Sie mit dem Training beginnen. Dies scheint ohnehin in den meisten Fällen der Fall zu sein, und es scheint daher insbesondere für GPUs mit kleinem Speicher und insbesondere für das Training eines einzelnen Modells von Vorteil zu sein, nicht vorab zuzuweisen, sondern allow memory growth = true .

Persönlich verwende ich GPUs mit einem Speicher zwischen 4 GB und 11 GB. Nach dem obigen Argument habe ich TF_FORCE_GPU_ALLOW_GROWTH = true für alle festgelegt. Im Moment hatte ich damit keine Probleme.

Hallo @roebel

Auch ich habe über die Probleme des Fehlers bei der Zuweisung von Speicher nachgedacht. Das ist jetzt klar für mich.
Jetzt sieht es gut aus GPU-Speicher

In der Vergangenheit habe ich viele Optionen getestet, um Speicher vorab zuzuweisen 😢:

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

Persönlich benutze ich GPU mit 6 GB Speicher.
Und danke @roebel , für diesen neuen Pfeil TF_FORCE_GPU_ALLOW_GROWTH=true , der meine GPU zur Zuweisung zwingt 😊.

Ich hatte das gleiche Problem. Ich kann mit Sicherheit sagen, dass das Problem nur bei meinem 2070 RTX und NICHT bei einem Titan RTX auftritt, auf dem genau derselbe Code ausgeführt wird.

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

Aktualisieren Sie einfach mit CUDA 11 und cudnn 8.0 auf Tensorflow 2.3. Es hat alle meine Probleme auf magische Weise gelöst und ich brauche jetzt nicht einmal die Problemumgehung mit config.gpu_options.allow_growth = True .

Leider muss ich Code ausführen, der nur Tensorflow 1.X unterstützt

Aktualisieren Sie einfach mit CUDA 11 und cudnn 8.0 auf Tensorflow 2.3. Es hat alle meine Probleme auf magische Weise gelöst und ich brauche jetzt nicht einmal die Problemumgehung mit config.gpu_options.allow_growth = True .

Ein Upgrade von 2.2 auf 2.3 auch mit explizitem TF_FORCE_GPU_ALLOW_GROWTH=false dies auch für mich gelöst (zumindest kann ich jetzt Delf-Demo-Code ausführen ; habe mit nichts anderem getestet).

Ich bin immer noch auf CUDA 10.1, Cudnn 7.6.5.

Gibt es eine Lösung für dieses Problem mit Tensorflow 2 und Python3?

Ich habe ein:
RTX 2080

Ich erhalte folgende Nachricht:


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

Falls Ihr Problem denselben Ursprung hat wie die Probleme, die in der vorliegenden Ausgabe behandelt werden (was ich aus Ihrem Bericht nicht wissen kann), gibt es einige Lösungen, die Sie leicht finden können, indem Sie die letzten 10 bis 20 Beiträge in diesem lesen Faden.

Ich habe es damit behoben:

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

Ich hatte das gleiche Problem mit RTX 2080. Dann funktionierte der folgende Code für mich.

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

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

Vielen Dank an alle

Ich denke, wir können jetzt aufhören, das allow_growth Fix zu veröffentlichen :)

RTX 2070 hier. Wurde dieser Fehler angezeigt, aber jetzt läuft er mit TF_FORCE_GPU_ALLOW_GROWTH=true (wie andere Kommentatoren darauf hingewiesen haben, behebt ihn für sie) und ändert die Fehlermeldung in einen Fehler wegen zu wenig Speicher (obwohl ich genügend Speicher habe):

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

Aber meine GPU hat 8 GB und nur ungefähr 250 MB wurden verwendet, bevor ich den Prozess startete. Ich verstehe also nicht, warum es nicht 3,87 GB zuweisen kann. (Das Verringern der Stapelgröße hatte keine Auswirkung. Die HDF5-Datei mit Gewichten ist kleiner als 200 MB.)

TF_FORCE_GPU_ALLOW_GROWTH = true hat bei mir funktioniert.
tf.config.experimental.set_memory_growth (gpu, True) funktionierte ebenfalls.

Hier ist meine Konfiguration:
GPU GTX 1650
cuda-10-1 10.1.243-1
libcudnn7 7.6.5.32-1 + cuda10.1
Ubuntu 18.04.5 LTS

Wer die Umgebungsvariable nicht festlegen kann, kann dies wie unter https://www.tensorflow.org/guide/gpu vorgeschlagen versuchen:
gpus = tf.config.experimental.list_physical_devices ('GPU')
wenn gpus:
Versuchen:
# Derzeit muss das Speicherwachstum für alle GPUs gleich sein
für gpu in gpus:
tf.config.experimental.set_memory_growth (gpu, True)
logischer_gpus = tf.config.experimental.list_logical_devices ('GPU')
print (len (gpus), "Physische GPUs", len (logischer_gpus), "Logische GPUs")
außer RuntimeError als e:
# Das Speicherwachstum muss eingestellt werden, bevor GPUs initialisiert wurden
drucken (e)

Das Eingeben des auf dem Terminal erwähnten Befehls hat gerade für mich funktioniert.

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

Aktualisieren Sie einfach mit CUDA 11 und cudnn 8.0 auf Tensorflow 2.3. Es hat alle meine Probleme auf magische Weise gelöst und ich brauche jetzt nicht einmal die Problemumgehung mit config.gpu_options.allow_growth = True .

Es scheint, dass das Problem in Tensorflow 2.3.0 bemerkt und gelöst wird.

  • CUDA 10.1
  • GPU: Quadro RTX 6000
  • Tensorflow 2.2.0
  • cudnn 7.6.5

Gleiches Problem:
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.

Und die Problemumgehung allow_growth = True hilft nicht.

Nachdem ich Tensorflow auf 2.3.0 aktualisiert hatte, verschwand das Problem, auch ohne die Zeile allow_growth = True hinzuzufügen.

ok, hat es in tf-nightly-gpu-2.0-preview und ipython notebook funktionieren lassen und dies meinem Code hinzugefügt:

aus tensorflow.compat.v1 ConfigProto importieren
aus tensorflow.compat.v1 InteractiveSession importieren

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

es funktioniert in meinem Fall

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen