Update: Diese Frage bezieht sich auf Google Colabs "Notebook-Einstellungen: Hardwarebeschleuniger: GPU". Diese Frage wurde geschrieben, bevor die Option "TPU" hinzugefügt wurde.
Als ich mehrere aufgeregte Ankündigungen über Google Colaboratory las, das eine kostenlose Tesla K80-GPU bereitstellte, versuchte ich, fast.ai zu lernen, damit es nie fertig wird - schnell geht der Speicher aus. Ich begann zu untersuchen, warum.
Das Fazit ist, dass "free Tesla K80" nicht für alle "kostenlos" ist - für einige ist nur ein kleiner Teil davon "kostenlos".
Ich stelle von West Coast Canada aus eine Verbindung zu Google Colab her und erhalte nur 0,5 GB eines angeblich 24 GB GPU-RAM. Andere Benutzer erhalten Zugriff auf 11 GB GPU-RAM.
Offensichtlich reichen 0,5 GB GPU-RAM für die meisten ML / DL-Arbeiten nicht aus.
Wenn Sie nicht sicher sind, was Sie erhalten, finden Sie hier eine kleine Debug-Funktion, die ich zusammengestellt habe (funktioniert nur mit der GPU-Einstellung des Notebooks):
# memory footprint support libraries/code
!ln -sf /opt/bin/nvidia-smi /usr/bin/nvidia-smi
!pip install gputil
!pip install psutil
!pip install humanize
import psutil
import humanize
import os
import GPUtil as GPU
GPUs = GPU.getGPUs()
# XXX: only one GPU on Colab and isn’t guaranteed
gpu = GPUs[0]
def printm():
process = psutil.Process(os.getpid())
print("Gen RAM Free: " + humanize.naturalsize( psutil.virtual_memory().available ), " | Proc size: " + humanize.naturalsize( process.memory_info().rss))
print("GPU RAM Free: {0:.0f}MB | Used: {1:.0f}MB | Util {2:3.0f}% | Total {3:.0f}MB".format(gpu.memoryFree, gpu.memoryUsed, gpu.memoryUtil*100, gpu.memoryTotal))
printm()
Wenn ich es in einem Jupiter-Notizbuch ausführe, bevor ich einen anderen Code ausführe, habe ich folgende Möglichkeiten:
Gen RAM Free: 11.6 GB | Proc size: 666.0 MB
GPU RAM Free: 566MB | Used: 10873MB | Util 95% | Total 11439MB
Die glücklichen Benutzer, die Zugriff auf die vollständige Karte erhalten, werden sehen:
Gen RAM Free: 11.6 GB | Proc size: 666.0 MB
GPU RAM Free: 11439MB | Used: 0MB | Util 0% | Total 11439MB
Sehen Sie einen Fehler in meiner Berechnung der GPU-RAM-Verfügbarkeit, die von GPUtil ausgeliehen wurde?
Können Sie bestätigen, dass Sie ähnliche Ergebnisse erhalten, wenn Sie diesen Code auf dem Google Colab-Notizbuch ausführen?
Wenn meine Berechnungen korrekt sind, gibt es eine Möglichkeit, mehr von diesem GPU-RAM auf die kostenlose Box zu bekommen?
Update: Ich bin mir nicht sicher, warum einige von uns 1/20 von dem bekommen, was andere Benutzer bekommen. zB die Person, die mir beim Debuggen geholfen hat, kommt aus Indien und bekommt das Ganze!
Hinweis : Bitte senden Sie keine weiteren Vorschläge zum Beenden der potenziell festgefahrenen / außer Kontrolle geratenen / parallelen Notebooks, die möglicherweise Teile der GPU verbrauchen. Egal wie Sie es schneiden, wenn Sie sich im selben Boot wie ich befinden und den Debug-Code ausführen würden, würden Sie sehen, dass Sie immer noch insgesamt 5% des GPU-RAM erhalten (ab diesem Update noch).
Antworten:
Um zu verhindern, dass ein weiteres Dutzend Antworten im Kontext dieses Thread-Vorschlags für! Kill -9 -1 ungültig werden, schließen wir diesen Thread:
Die Antwort ist einfach:
Zum jetzigen Zeitpunkt gibt Google einigen von uns nur 5% der GPU, den anderen 100%. Zeitraum.
Update Dezember 2019: Das Problem besteht weiterhin - die positiven Stimmen dieser Frage bleiben weiterhin bestehen.
Update März 2019: Ein Jahr später kommentierte ein Google-Mitarbeiter @AmiF den Stand der Dinge und erklärte, dass das Problem nicht besteht. Jeder, der dieses Problem zu haben scheint, muss einfach seine Laufzeit zurücksetzen, um den Speicher wiederherzustellen. Die positiven Stimmen gehen jedoch weiter, was für mich bedeutet, dass das Problem trotz des gegenteiligen Vorschlags von @ AmiF immer noch besteht.
Update Dezember 2018: Ich habe die Theorie, dass Google möglicherweise eine schwarze Liste bestimmter Konten oder möglicherweise Browser-Fingerabdrücke hat, wenn seine Roboter ein nicht standardmäßiges Verhalten feststellen. Es könnte ein totaler Zufall sein, aber für einige Zeit hatte ich ein Problem mit Google Re-Captcha auf jeder Website, die es erforderte, wo ich Dutzende von Rätseln durchgehen musste, bevor ich oft durchgelassen wurde Ich brauche mehr als 10 Minuten, um das zu erreichen. Dies dauerte viele Monate. Ab diesem Monat bekomme ich plötzlich überhaupt keine Rätsel mehr und jedes Google-Re-Captcha wird mit nur einem Mausklick gelöst, wie es vor fast einem Jahr war.
Und warum erzähle ich diese Geschichte? Nun, weil ich gleichzeitig 100% des GPU-RAM auf Colab erhalten habe . Aus diesem Grund habe ich den Verdacht, dass Ihnen nicht vertraut wird, wenn Sie auf einer theoretischen schwarzen Liste von Google stehen, dass Ihnen viele Ressourcen kostenlos zur Verfügung gestellt werden. Ich frage mich, ob einer von Ihnen die gleiche Korrelation zwischen dem eingeschränkten GPU-Zugriff und dem Re-Captcha-Albtraum findet. Wie gesagt, es könnte auch ein Zufall sein.
quelle
Letzte Nacht habe ich dein Snippet laufen lassen und genau das bekommen, was du hast:
aber heute:
Ich denke, der wahrscheinlichste Grund ist, dass die GPUs von VMs gemeinsam genutzt werden. Bei jedem Neustart der Laufzeit haben Sie also die Möglichkeit, die GPU zu wechseln, und es besteht auch die Wahrscheinlichkeit, dass Sie zu einer wechseln, die von anderen Benutzern verwendet wird.
AKTUALISIERT: Es stellt sich heraus, dass ich die GPU normal verwenden kann, selbst wenn die GPU RAM Free 504 MB beträgt, was ich als Ursache für ResourceExhaustedError angesehen habe, den ich letzte Nacht bekommen habe.
quelle
RuntimeError: cuda runtime error (2) : out of memory at /pytorch/torch/lib/THC/generated/../THCTensorMathCompare.cuh:84
Wenn Sie eine Zelle ausführen, in der sich gerade
! Kill -9 -1
befindet, wird der gesamte Laufzeitstatus (einschließlich Speicher, Dateisystem und GPU) gelöscht und neu gestartet. Warten Sie 30-60 Sekunden und drücken Sie die CONNECT-Taste oben rechts, um die Verbindung wiederherzustellen.
quelle
Irreführende Beschreibung seitens Google. Ich war auch zu aufgeregt darüber, denke ich. Richten Sie alles ein, laden Sie die Daten, und jetzt kann ich nichts mehr damit anfangen, da meinem Notebook nur 500 MB Speicher zugewiesen sind.
quelle
Geben Sie Google Colab eine schwere Aufgabe. Sie werden aufgefordert, auf 25 GB RAM umzusteigen.
Beispiel: Führen Sie diesen Code zweimal aus:
dann klicke auf mehr RAM bekommen :)
quelle
Finde die Python3-PID und töte die PID. Bitte sehen Sie das Bild unten
Hinweis: Töte nur Python3 (pid = 130), nicht Jupyter Python (122).
quelle
GPU RAM Free: 564MB
Starten Sie den Jupyter IPython Kernel neu:
quelle
GPU RAM Free: 564MB
CMD/CTRL+M
Ich bin mir nicht sicher, ob diese schwarze Liste wahr ist! Es ist eher möglich, dass die Kerne von Benutzern gemeinsam genutzt werden. Ich habe auch den Test durchgeführt und meine Ergebnisse sind die folgenden:
Gen RAM Free: 12,9 GB | Prozessgröße: 142,8 MB GPU RAM Frei: 11441 MB | Verwendet: 0MB | Util 0% | Insgesamt 11441 MB
Es scheint, dass ich auch vollen Kern bekomme. Ich habe es jedoch ein paar Mal ausgeführt und das gleiche Ergebnis erzielt. Vielleicht werde ich diese Überprüfung einige Male im Laufe des Tages wiederholen, um festzustellen, ob sich etwas ändert.
quelle
Ich glaube, wenn wir mehrere Notizbücher geöffnet haben. Nur das Schließen stoppt den Prozess nicht. Ich habe nicht herausgefunden, wie ich es aufhalten kann. Aber ich habe top verwendet, um die PID des Python3 zu finden, der am längsten lief und den größten Teil des Speichers verwendete, und ich habe ihn getötet. Jetzt ist alles wieder normal.
quelle