Ich verwende Tensor Flow Version 0.7.1, 64-Bit GPU-fähig, installiert mit pip und auf einem PC mit Ubuntu 14.04. Mein Problem ist, dass Tensor Flow nicht mehr genügend Speicher hat, wenn ich mein Netzwerk erstelle, obwohl ich aufgrund meiner Berechnungen genügend Platz auf meiner GPU haben sollte.
Im Folgenden finden Sie ein minimales Beispiel für meinen Code, der auf dem Tensor Flow MNIST-Tutorial basiert. Das Netzwerk ist ein zweischichtiges, vollständig verbundenes Netzwerk und die Anzahl der Knoten in der ausgeblendeten Schicht wird durch die Variable n
definiert. Die Größe des Trainings Minibatch ist 1. Hier ist mein Code:
Nun, wenn n <= 22000
, dann läuft das Netzwerk gut. Wenn n >= 23000
, bekomme ich jedoch den folgenden Fehler:
Nach meinen Berechnungen sollte es jedoch kein Problem mit dem Speicher geben. Die Anzahl der Parameter im Netzwerk ist wie folgt:
%Vor% Also, mit n = 23000
und mit float32
data sollte der gesamte für das Netzwerk benötigte Speicher daher 73,1 MB betragen.
Nun, meine Grafikkarte ist die NVIDIA GeForce GTX 780 Ti, die 3072 MB Speicher hat. Nachdem Tensor Flow meine Grafikkarte gefunden hat, druckt es Folgendes aus:
%Vor%Also sollten etwa 2,32 GB Speicher verfügbar sein, was weit größer ist als die oben berechneten 73,1 MB. Die Minibatch-Größe ist 1, also hat dies minimale Auswirkungen. Warum erhalte ich diesen Fehler?
Ich habe das jetzt auch auf meinem Laptop versucht, der eine NVIDIA GeForce GTX 880M GPU hat. Hier liest Tensor Flow Free memory: 7.60GiB
aus. Wenn ich denselben Code wie oben benutze, erhalte ich einen Speicherfehler um n = 700,000
, was 2,2 GB entspricht. Dies ist ein wenig sinnvoller und wesentlich höher als der Punkt, an dem mein PC-Code bricht. Es ist mir jedoch immer noch rätselhaft, warum es nicht näher an die Marke von 7,6 GB heran geht.
Die vollständige Ausgabe von Tensor Flow, während der obige Code auf meinem PC mit n = 23000
ausgeführt wird, lautet:
Nach dem Fehler zu urteilen, hat Tensorflow OOM versucht, einen [10000, 23000]
-sized tensor zuzuweisen. Angesichts der Tatsache, dass 10.000 die Anzahl von Beispielen ist, die normalerweise in der MNIST-Testmenge enthalten sind, gehe ich davon aus, dass Sie einen Evaluierungscode haben, der versucht, den gesamten Testsatz gleichzeitig zu evaluieren. Für nur die Aktivierungen benötigen Sie 10000 * (784 + n + 10) ~= 1GB
, was für OOM alleine nicht ausreichen sollte. Aber es gibt auch 1,7GB Tensor aus irgendeinem Grund zugeordnet, die schwer zu erklären ist.
Für den Fall auf dem Laptop fehlen einige Variablen in Ihrer Berechnung. Adam verfolgt den ersten und zweiten Moment für jede Variable , damit der 2,2 GB verdreifacht zu 6,6 GB. Fügen Sie einen Overhead für die Gradienten hinzu, die im Speicher gespeichert sind, und das erklärt OOM.
Es tut mir leid, dass dies Ihre Frage nicht vollständig beantwortet, ich hätte dies als Kommentar hinzugefügt, aber dafür habe ich noch nicht den Ruf.
Nur zu Ihrer Information. Ich hatte denselben Fehler auf meinem Macbook Pro. Nachdem ich einige andere Anwendungen geschlossen habe, ist dieses Problem verschwunden. Aber ich habe noch andere Fehler wie:
Blockquote W tensorflow / core / common_runtime / bfc_allocator.cc: 217] Nicht genügend Arbeitsspeicher, um 214,51MiB zuzuweisen. Der Anrufer zeigt an, dass dies kein Fehler ist, kann jedoch bedeuten, dass es Leistungssteigerungen geben kann, wenn mehr Speicher verfügbar ist.
Also, das ist ein echtes Problem mit dem Speicher.
Tags und Links python memory tensorflow gpu