Ich arbeite in einer Umgebung, in der Rechenressourcen gemeinsam genutzt werden, dh wir haben einige Server-Computer, die jeweils mit einigen Nvidia Titan X-GPUs ausgestattet sind.
Bei kleinen bis mittelgroßen Modellen reichen die 12 GB des Titan X normalerweise aus, damit 2 bis 3 Personen gleichzeitig auf derselben GPU trainieren können. Wenn die Modelle klein genug sind, dass ein einzelnes Modell nicht alle Recheneinheiten der GPU voll ausnutzt, kann dies tatsächlich zu einer Beschleunigung führen, verglichen mit dem Ausführen eines Trainingsprozesses nach dem anderen. Selbst in Fällen, in denen der gleichzeitige Zugriff auf die GPU die individuelle Trainingszeit verlangsamt, ist es immer noch schön, die Flexibilität zu haben, mehrere Benutzer gleichzeitig auf der GPU trainieren zu lassen.
Das Problem mit TensorFlow besteht darin, dass beim Start standardmäßig die gesamte Menge des verfügbaren GPU-Speichers zugewiesen wird. Selbst für ein kleines zweischichtiges neuronales Netzwerk sehe ich, dass alle 12 GB des GPU-Speichers verbraucht sind.
Gibt es eine Möglichkeit, TensorFlow dazu zu bringen, beispielsweise nur 4 GB GPU-Speicher zuzuweisen, wenn man weiß, dass dies für ein bestimmtes Modell ausreicht?
quelle
MonitoredTrainingSession
https://github.com/tensorflow/tensorflow/issues/1578
quelle
from keras import backend as K
undK.set_session(sess)
zu vermeiden SpeicherbeschränkungenHier ist ein Auszug aus dem Buch
Deep Learning with TensorFlow
1) Wachstum zulassen: (flexibler)
Die zweite Methode ist die
per_process_gpu_memory_fraction
Option, mit der der Anteil dereach
sichtbaren GPU an der Gesamtspeichermenge bestimmt wird. Hinweis: Es ist keine Speicherfreigabe erforderlich. Wenn dies abgeschlossen ist, kann sich die Speicherfragmentierung sogar verschlechtern.2) Festen Speicher zuweisen :
So weisen Sie nur
40%
den Gesamtspeicher jeder GPU zu:Hinweis: Dies ist jedoch nur dann nützlich, wenn Sie die Menge des im TensorFlow-Prozess verfügbaren GPU-Speichers wirklich binden möchten.
quelle
Aktualisiert für TensorFlow 2.0 Alpha und darüber hinaus
In den 2.0 Alpha-Dokumenten ist die Antwort nur noch eine Zeile, bevor Sie etwas mit TensorFlow tun:
quelle
Alle obigen Antworten setzen die Ausführung mit einem
sess.run()
Aufruf voraus , was in neueren Versionen von TensorFlow eher zur Ausnahme als zur Regel wird.Wenn Sie das
tf.Estimator
Framework (TensorFlow 1.4 und höher) verwenden, können Sie den Bruch an den implizit erstellten übergebenMonitoredTrainingSession
:Ähnlich im Eager-Modus (TensorFlow 1.5 und höher),
Bearbeiten: 11-04-2018 Wenn Sie beispielsweise ein Beispiel verwenden möchten
tf.contrib.gan.train
, können Sie etwas Ähnliches wie unten verwenden:quelle
Verwenden Sie für Tensorflow Version 2.0 und 2.1 das folgende Snippet :
In früheren Versionen funktionierte das folgende Snippet für mich:
quelle
Tensorflow 2.0 Beta und (wahrscheinlich) darüber hinaus
Die API wurde erneut geändert. Es kann jetzt gefunden werden in:
Aliase:
Verweise:
Siehe auch: Tensorflow - Verwenden Sie eine GPU : https://www.tensorflow.org/guide/gpu
Für Tensorflow 2.0 Alpha siehe: diese Antwort
quelle
Sie können verwenden
in Ihren Umgebungsvariablen.
Im Tensorflow- Code:
quelle
Schamloser Stecker: Wenn Sie den von der GPU unterstützten Tensorflow installieren, weist die Sitzung zunächst alle GPUs zu, unabhängig davon, ob Sie nur CPU oder GPU verwenden. Ich kann meinen Tipp hinzufügen, dass selbst wenn Sie das Diagramm so einstellen, dass nur die CPU verwendet wird, Sie dieselbe Konfiguration festlegen sollten (wie oben beantwortet :)), um die unerwünschte GPU-Belegung zu verhindern.
Und in einer interaktiven Oberfläche wie IPython sollten Sie auch diese Konfiguration festlegen, da sonst der gesamte Speicher zugewiesen wird und fast keiner für andere übrig bleibt. Dies ist manchmal schwer zu bemerken.
quelle
Für Tensorflow 2.0 dies diese Lösung für mich gearbeitet. (TF-GPU 2.0, Windows 10, GeForce RTX 2070)
quelle
Wenn Sie Tensorflow 2 verwenden, versuchen Sie Folgendes:
quelle
Ich habe versucht, Unet auf Voc-Datensatz zu trainieren, aber wegen der großen Bildgröße wird der Speicher beendet. Ich habe alle oben genannten Tipps ausprobiert, sogar mit der Chargengröße == 1, aber ohne Verbesserung. Manchmal verursacht die TensorFlow-Version auch Speicherprobleme. versuchen Sie es mit
quelle
Nun, ich bin neu in Tensorflow, ich habe Geforce 740m oder eine GPU mit 2 GB RAM, ich habe ein mnistisches handgeschriebenes Beispiel für eine Muttersprache mit Trainingsdaten ausgeführt, die 38700 Bilder und 4300 Testbilder enthalten, und versucht, Präzision zu erhalten. F1 mit folgendem Code als sklearn gab mir keine genauen Ergebnisse. Nachdem ich dies zu meinem vorhandenen Code hinzugefügt hatte, bekam ich GPU-Fehler.
Außerdem war mein Modell schwer, ich glaube, ich bekam nach 147, 148 Epochen einen Speicherfehler, und dann dachte ich mir, warum ich keine Funktionen für die Aufgaben erstellen sollte, damit ich nicht weiß, ob es im Tensrorflow so funktioniert, aber ich dachte, ob es eine lokale Variable ist verwendet und wenn es außerhalb des Bereichs liegt, kann es Speicher freigeben und ich definierte die oben genannten Elemente für das Training und Testen in Modulen. Ich konnte 10000 Epochen ohne Probleme erreichen. Ich hoffe, dies wird helfen.
quelle
quelle