Mit einer modernen IDE gestaltet sich die Software-Entwicklung auf einem lokalen Computer komfortabel - aber wie kann man die Leistung eines remote betriebenen AIME Multi-GPU-Servers genauso bequem nutzen?
Um Ihren Code mit der vollen Leistung der AIME Multi-GPU-Server berechnen lassen zu können, müssen Sie zuerst den Code und die Daten in den Speicher des Remote-Computers übertragen. Der einfachste Weg, dies zu erreichen, besteht darin, alle Daten auf die Festplatte des Remote-Computers zu kopieren, was bei Projekten mit vielen Dateien und Ordnern schnell sehr unpraktisch wird.
Es ist viel bequemer, den Code per Remote direkt auf dem Computer zu bearbeiten. Dieser Artikel beschreibt nun das Einrichten einer Remote-Verbindung mit der IDE Microsoft Visual Studio Code unter Linux, Windows 10 oder macOS, um Code über SSH in einer lokal laufenden IDE zu bearbeiten.
Der klassische Weg: Dateien kopieren mit secure copy
Um Dateien mit Secure copy auf den AIME GPU Server zu kopieren, folgenden Befehl im Linux Terminal ausführen:
scp -p <port> <quell_datei> <user_name>@<gateway>:<ziel_datei>
Hier den <port>
, den <gateway>
und den <user_name>
aus der Willkommens-Email von AIME verwenden.
Nach erfolgtem Kopiervorgang den vorab erstellten AIME Container mit folgendem Kommando öffnen:
mlc-open MyContainer
Weitere Erklärung im Umgang mit AIME Containern siehe https://www.aime.info/blog/deep-learning-framework-container-management. Anschließend kann der Code z.B. mit folgendem Kommando ausgeführt werden:
python3 sample.py
Um das ständige Kopieren zu umgehen, können die Dateien auch direkt auf dem AIME GPU Server editiert werden, im Folgenden am Beispiel mit Microsoft Visual Code erklärt.
Der moderne Weg: Mit Visual Studio Code den Code per Remote editieren
Visual Studio Code ist ein kostenloser Quelltext-Editor von Microsoft. Er ist plattformübergreifend für die Betriebssysteme Windows, macOS und Linux verfügbar und ermöglicht u. a. Syntaxhervorhebung, Code-Faltung, Debugging, Autovervollständigung und Versionsverwaltung. Der folgende Screenshot zeigt auf einem AIME GPU-Server gespeicherten Beispiel-Code, der in VSCode per Remote editiert wird:
Visual Code mit Linux
Microsoft Visual Code mittels Linux Paket manager installieren und ausführen. Zum Tab Extensions in der Navigationsleiste auf der linken Seite des Fensters wechseln. ssh
in das Suchfeld eingeben und die Erweiterung SSH FS durch klicken auf die Schaltfläche Install installieren.
Jetzt in den in der Navigationsleiste neu erschienenen Tab SSH FS wechseln.
Auf add klicken um eine neue Konfiguration für eine SSH-Verbindung zu erstellen.
Einen bevorzugten Namen für die Konfiguration in das Textfeld name eintragen und auf save klicken.
Im sich nun öffnenden Fenster den Gateway (z.B. `gate0X.aime.info), den Port und den Nutzernamen aus der AIME Willkommens-Email in die Felder Host, Port und Username eintragen. Das Passwort im Feld Password ist optional und ersetzt die Passwortabfrage bei jeder Verbindung. Im Feld Root kann der Arbeitsordner auf der Remote Maschine festgelegt werden. Wird dieses Feld leer gelassen, wird das Wurzelverzeichnis der Remote Maschine eingebunden. Nach Abschluss Save klicken um die Konfiguration zu speichern.
Die neu erstellte Konfiguration sollte nun im Feld CONFIGURATIONS auf der linken Seiten des Fensters erscheinen. Hier auf das Symbol Add as Workspace folder neben der eigenen Konfiguration klicken um den Arbeitsordner der Remote Maschine einzubinden. Falls kein Passwort gespeichert wurde, erscheint nun eine zweimalige Passwortabfrage.
Anschließend wird automatisch in den Tab Explorer gewechselt, in dem der Inhalt des eingebundenen Arbeitsordners der Remote Maschine zu sehen ist und mit diesem interagiert werden kann. Es können neue Dateien und Ordner angelegt und editiert werden. Das Ausführen des Codes auf der Remote Maschine direkt in Visual Code funktioniert momentan insbesondere in Verbindung mit Containern nur bedingt. Daher wird empfohlen den Code in einem extra Terminal auszuführen, wie im vorletzten Absatz näher beschrieben. Nach dem Editieren des Codes sollte jedoch daran gedacht werden alle entsprechenden Dateien abzuspeichern.
Visual Code mit Windows 10
Microsoft Visual Code von https://code.visualstudio.com herunterladen, installieren und öffnen.
Zum Tab Extensions wechseln und ssh
in die Suchleiste oben eingeben. Die Erweiterung Remote - SSH über den zugehörigen Button Install installieren. Nach Abschluss in den Tab Remote Explorer wechseln.
Um eine neue ssh-Verbindung zu erstellen auf Add new (Das +-Symbol) neben SSH TARGETS klicken. Im nun erscheinenden Textfeld das folgende Kommando eingeben:
ssh -XY -p <port> <user_name>@<gateway>
Hier den <port>
, den <user_name>
und den <gateway>
aus der AIME Willkommens-Email verwenden. Die Flag -XY
aktiviert die Weiterleitung des X11 Screens zum lokalen Screen, z.B. um Plots von matplotlib anzeigen lassen zu können. Anschließend wählen in welcher Datei die Konfiguration gespeichert werden soll. Die neu erstellte Verbindung sollte nun unter SSH TARGETS erscheinen. Um eine Verbindung herzustellen auf Connect to Host in New Window klicken und die Passwortabfrage mit dem von AIME erhaltenen Passwort bestätigen.
Nun läuft eine neue Instanz von Microsoft Visual Code auf der Remote Maschine. Wenn nicht bereits ausgewählt, in den Tab Explorer wechseln. Auf Open Folder klicken und den gewünschten Ordner auf der Remote Maschine als Arbeitsordner festlegen. Erneut das Passwort eingeben.
Hier kann nun mit dem Arbeitsordner der Remote Maschine interagiert werden. Es können neue Dateien und Ordner angelegt und editiert werden, löschen von Dateien funktioniert jedoch nicht zuverlässig. Das Ausführen des Codes auf der Remote Maschine direkt in Visual Code funktioniert momentan insbesondere in Verbindung mit Containern nur bedingt. Daher wird empfohlen den Code in einem extra Terminal auszuführen, wie im vorletzten Absatz näher beschrieben. Nach dem Editieren des Codes sollte jedoch daran gedacht werden alle entsprechenden Dateien abzuspeichern.
Visual Code mit macOS
Microsoft Visual Code von https://code.visualstudio.com/docs/setup/mac herunterladen, installieren und öffnen. Zum Tab Extensions in der Navigationsleiste auf der linken Seite des Fensters wechseln. ssh
in das Suchfeld eingeben und die Erweiterung SSH FS durch klicken auf die Schaltfläche Install installieren.
Jetzt in den in der Navigationsleiste neu erschienenen Tab SSH FS wechseln.
Auf add klicken um eine neue Konfiguration für eine SSH-Verbindung zu erstellen.
Einen bevorzugten Namen für die Konfiguration in das Textfeld name eintragen und auf save klicken.
Im sich nun öffnenden Fenster den Gateway (z.B. `gate0X.aime.info), den Port und den Nutzernamen aus der AIME Willkommens-Email in die Felder Host, Port und Username eintragen. Das Passwort im Feld Password ist optional und ersetzt die Passwortabfrage bei jeder Verbindung. Im Feld Root kann der Arbeitsordner auf der Remote Maschine festgelegt werden. Wird dieses Feld leer gelassen, wird das Wurzelverzeichnis der Remote Maschine eingebunden. Nach Abschluss Save klicken um die Konfiguration zu speichern.
Die neu erstellte Konfiguration sollte nun im Feld CONFIGURATIONS auf der linken Seiten des Fensters erscheinen. Hier auf das Symbol Add as Workspace folder neben der eigenen Konfiguration klicken um den Arbeitsordner der Remote Maschine einzubinden. Falls kein Passwort gespeichert wurde, erscheint nun eine zweimalige Passwortabfrage.
Anschließend wird automatisch in den Tab Explorer gewechselt, in dem der Inhalt des eingebundenen Arbeitsordners der Remote Maschine zu sehen ist und mit diesem interagiert werden kann. Es können neue Dateien und Ordner angelegt und editiert werden, löschen von Dateien funktioniert jedoch nicht zuverlässig. Das Ausführen des Codes auf der Remote Maschine direkt in Visual Code funktioniert momentan insbesondere in Verbindung mit Containern nur bedingt. Daher wird empfohlen den Code in einem extra Terminal auszuführen, wie im nächsten Absatz näher beschrieben. Nach dem Editieren des Codes sollte jedoch daran gedacht werden alle entsprechenden Dateien abzuspeichern.
Code auf der Remote Maschine ausführen
Den Code in einem Terminal auszuführen bietet verschiedene Vorteile wie extra Screen Sessions und das Arbeiten mit Containern ohne zu viel Konfiguration. Um sich über das Terminal mit Remote Maschine via ssh zu verbinden, folgenden Befehl im Terminal ausführen.
ssh -XY -p <port> <user_name>@<gateway>
Hier den selben Port, Nutzernamen und Gateway wie oben aus der AIME-Willkommensemail verwenden. Die flag -XY
stellt die Weiterleitung des X11 Screens der Remote Maschine zum lokalen Screen sicher (z.B. um Plots von matplotlib anzeigen zu können). Nach Passworteingabe ist die SSH-Verbindung hergestellt. Wie man Code mit einer längeren Laufzeit auszuführt, folgt im nächsten Absatz.
Screen Session mit AIME Container
Code mit einer langen Laufzeit erfordert die Möglichkeit, das Terminal (und den lokalen Klienten) schließen zu können, ohne den laufenden Prozess abbrechen zu müssen. Dies kann mit dem auf den AIME Servern vorinstallierten Kommandozeilentool screen erreicht werden. Eine neue Screen-Session mit dem Namen <screen_name>
kann durch Ausführen des foldenden Befehls auf der Remote Maschine erstellt werden:
screen -S <screen_name>
In der neuen Screen-Session jetzt den AIME Container öffnen:
mlc-open MyContainer
Zum Zielordner navigieren und den Code ausführen.
python3 spam.py
Um die Screen-Session vom Terminal zu trennen ohne den laufenden Prozess abzubrechen erst Strg+A und im Anschluss die Taste D drücken. Nun kann das Terminal geschlossen und der lokale Klient ausgeschaltet werden, während der Prozess auf der Remote Maschine weiterläuft. Um die Screen-Session wiederherzustellen zunächst eine neue ssh Verbindung herstellen wie oben beschrieben. Anschließend das folgende Kommando ausführen.
screen -r
Navigieren in einer Screen Session funktioniert ein wenig anders als in einer normalen Terminal Session. Z.B. muss man um scrollen zu können erst in den copy mode wechseln. Dies erfolgt durch Drücken von Strg+A und anschließendem Betätigen der Esc-Taste. Hier kann nun mit den Pfeiltasten oder dem Mausrad gescrollt werden. Um den copy mode wieder zu verlassen, erneut Esc drücken.