web-dev-qa-db-de.com

Google Colaboratory: Irreführende Informationen zur GPU (nur 5% RAM für einige Nutzer verfügbar)

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 bereitstellt, versuchte ich, fast.ai eine Lektion zu schreiben, damit sie nie abgeschlossen wurde - und schnell kein Speicher mehr zur Verfügung stand. Ich begann zu untersuchen, warum.

Das Fazit ist, dass "freies Tesla K80" nicht für alle "frei" ist - für manche ist nur ein kleines Stück davon "frei".

Ich verbinde mich mit Google Colab von der kanadischen Westküste und erhalte nur 0,5 GB an angeblichem 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 bekommen, ist hier eine kleine Debug-Funktion, die ich zusammengeschabt 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()

Das Ausführen in einem Jupyter-Notizbuch, bevor ein anderer Code ausgeführt wird, gibt mir Folgendes:

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 Verfügbarkeit der GPU RAM, die ich von GPUtil ausgeliehen habe?

Können Sie bestätigen, dass Sie ähnliche Ergebnisse erhalten, wenn Sie diesen Code in Google Colab Notebook ausführen?

Wenn meine Berechnungen korrekt sind, gibt es eine Möglichkeit, mehr von dieser GPU RAM auf die freie Box zu bekommen?

update: Ich bin nicht sicher, warum einige von uns 1/20 von dem bekommen, was andere Benutzer bekommen. z.B. Die Person, die mir beim Debuggen geholfen hat, kommt aus Indien und bekommt das Ganze!

Hinweis : Bitte senden Sie keine weiteren Vorschläge, wie Sie die möglicherweise stecken gebliebenen/außer Kontrolle geratenen/parallelen Notebooks, die möglicherweise Teile der GPU verbrauchen, entfernen können. Unabhängig davon, wie Sie es in Scheiben schneiden, wenn Sie sich im selben Boot wie ich befinden und den Debug-Code ausführen, werden Sie feststellen, dass Sie immer noch insgesamt 5% der GPU RAM (ab diesem Update) erhalten immer noch).

83
stason

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 vergibt Google nur 5% der GPU an einige von uns, während 100% an die anderen. Punkt.

Update März 2019 : Ein Jahr später bemerkte Google diesen Thread und schickte @AmiF, um ihn zu diskreditieren. Dies bedeutet, dass jeder, der dieses Problem hat, ein inkompetenter Benutzer ist wer kann nicht herausfinden, wie man ihre Laufzeit zurücksetzt, um Gedächtnis wiederzugewinnen. @AmiF schlägt ferner vor, dass dieses Problem möglicherweise nur ein Fehler in ihrem Code war und dass wir, die Benutzer, eine Unternehmensrichtlinie nicht gegen einen Fehler unterscheiden können.

Leider wird keine vollständige Offenlegung vorgenommen, und wir bleiben nur bei unseren Vermutungen, was wirklich vor sich gehen könnte. Es ist klar, dass ein gewinnorientiertes Unternehmen Vorbehalte dazu hat, wem es sympathisch ist, und daher ist es hier unmöglich, Diskriminierung zu vermeiden. Es macht total Sinn und es ist sehr logisch. Da diese Ressource kostenlos zur Verfügung gestellt wird, können wir uns nicht wirklich beschweren, sondern fragen nur, warum einige von uns auf die schwarze Liste gesetzt werden, während andere, die von ansonsten identischen Setups/Locales stammen, dies nicht tun.

Da mein persönlicher Account im Dezember 2018 von der Blacklist gestrichen wurde (siehe mein Update unten), kann ich mich nur auf andere Benutzer verlassen, die sich noch auf der Blacklist befinden, um die Wahrheit zu sagen. Während ich dieses Update schreibe, hat dieser Thread eine weitere positive Bewertung erhalten.

Das heißt, wir hoffen, dass Google die schwarze Liste beendet, zumindest für diejenigen, die darum bitten, von ihr entfernt zu werden. Die meisten von uns haben keine belastenden Aktivitäten unternommen, um auf einer solchen Liste zu stehen. Sie wurden einfach von unreifen maschinell lernenden Köpfen erwischt und haben keine Chance, sich als nicht schuldig zu beweisen. @AmyF schlug vor, dieses Problem unter http://github.com/googlecolab/colabtools/issues zu melden, wenn Sie das Problem melden und Ihr Ticket ohne Untersuchung geschlossen haben Veröffentlichen Sie wie in diesem Fall den Link zu Ihrem ungelösten Problem in den Kommentaren dieser Antwort, damit wir Sie um Verantwortlichkeit bitten können.

Und natürlich, bevor Sie diesen Thread upvoten, führen Sie "Reset all runtimes" im Runtime-Menü in colab aus und prüfen Sie, ob Sie vielleicht tatsächlich das hatten Problem mit unvollendeten Notizbüchern, die immer noch GPU RAM verbrauchen und von der Richtlinie zur Sperrung der Liste überhaupt nicht betroffen sind.

Sobald die Abstimmung beendet ist, werden wir wissen, dass diese Diskriminierungspolitik abgeschafft wurde. Leider ist dies ab diesem Update nicht der Fall, weshalb die folgenden Kommentare von @ AmyF höchst zweifelhaft sind.

dec-2018 update : Ich habe die Theorie, dass Google möglicherweise eine schwarze Liste bestimmter Konten oder Browser-Fingerabdrücke hat, wenn seine Roboter eine Nicht-Standard erkennen Verhalten. Es könnte ein totaler Zufall sein, aber ich hatte eine ganze Weile lang ein Problem mit Google Re-captcha auf jeder Website, die es erforderte, wo ich Dutzende von Rätseln durchlaufen musste, bevor ich es oft durchmachen durfte Ich brauche mindestens 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-Neu-Captcha wird mit nur einem Mausklick gelöst, wie es vor fast einem Jahr war.

Und warum erzähle ich diese Geschichte? Nun, weil zur gleichen Zeit mir 100% der GPU RAM auf Colab gegeben wurde . Aus diesem Grund habe ich den Verdacht, dass Ihnen, wenn Sie sich auf einer theoretischen schwarzen Liste von Google befinden, nicht vertraut wird, dass Ihnen viele Ressourcen kostenlos zur Verfügung stehen. Ich frage mich, ob einer von Ihnen die gleiche Korrelation zwischen dem eingeschränkten GPU-Zugriff und dem Alptraum von Re-Captcha findet. Wie gesagt, es könnte auch ein Zufall sein.

24
stason

Letzte Nacht habe ich dein Snippet abgespielt und genau das bekommen, was du bekommen hast:

Gen RAM Free: 11.6 GB  | Proc size: 666.0 MB
GPU RAM Free: 566MB | Used: 10873MB | Util  95% | Total 11439MB

aber heute:

Gen RAM Free: 12.2 GB  I Proc size: 131.5 MB
GPU RAM Free: 11439MB | Used: 0MB | Util   0% | Total 11439MB

Ich denke, der wahrscheinlichste Grund dafür ist, dass die GPUs von mehreren 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 GPU normal verwenden kann, auch wenn die GPU RAM Free 504 MB beträgt, was ich als Ursache für ResourceExhaustedError angesehen habe, das ich letzte Nacht erhalten habe.

20

Wenn Sie eine Zelle ausführen, die gerade hat
! kill -9 -1
Dadurch wird der gesamte Laufzeitstatus (einschließlich Arbeitsspeicher, 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.

6
Ajaychhimpa1

Irreführende Beschreibung von Google. Ich war auch zu aufgeregt darüber, denke ich. Richten Sie alles ein, laden Sie die Daten und jetzt kann ich nichts damit anfangen, da meinem Notebook nur 500 MB Speicher zugewiesen sind.

4
ivan_bilan

Finden Sie die Python3-PID und töten Sie die PID. Bitte sehen Sie das Bild unten enter image description here

Hinweis: Töte nur python3 (pid = 130) und nicht jupyter python (122).

Starten Sie den Jupyter IPython Kernel neu:

!pkill -9 -f ipykernel_launcher
2
mkczyk

Ich bin nicht sicher, ob diese schwarze Liste wahr ist! Es ist eher möglich, dass die Kerne unter den Benutzern geteilt werden. Ich habe auch den Test ausgeführt, und meine Ergebnisse sind die folgenden:

Gen RAM Free: 12.9 GB | Proc size: 142.8 MB GPU RAM Free: 11441MB | Gebraucht: 0MB | Verbrauch 0% | Insgesamt 11441 MB

Es scheint, dass ich auch den vollen Kern bekomme. Allerdings habe ich es ein paar Mal ausgeführt und ich habe das gleiche Ergebnis erzielt. Vielleicht wiederhole ich diese Prüfung ein paar Mal am Tag, um festzustellen, ob sich etwas geändert hat.

1
Kregnach

Ich glaube, wenn wir mehrere Notizbücher geöffnet haben. Das Schließen stoppt den Prozess nicht wirklich. 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 beendet. Jetzt ist alles wieder normal.

0
Ritwik G