10 Befehlszeilenrezepte für Deep Learning in Amazon Web Services

10 Befehlszeilenrezepte für Deep Learning in Amazon Web Services

Das Ausführen großer Deep-Learning-Prozesse auf Amazon Web Services EC2 ist eine kostengünstige und effektive Möglichkeit, Modelle zu lernen und zu entwickeln.

Für nur ein paar Dollar können Sie auf zehn Gigabyte RAM, zehn CPU-Kerne und mehrere GPUs zugreifen. Ich empfehle es sehr.

Wenn Sie mit EC2 oder der Linux-Befehlszeile noch nicht vertraut sind, gibt es eine Reihe von Befehlen, die Sie beim Ausführen Ihrer Deep-Learning-Skripte in der Cloud von unschätzbarem Wert finden.

In diesem Tutorial finden Sie meine private Liste der 10 Befehle, die ich jedes Mal verwende, wenn ich EC2 verwende, um große Deep-Learning-Modelle anzupassen.

Nachdem Sie diesen Beitrag gelesen haben, werden Sie wissen:

  • So kopieren Sie Ihre Daten zu und von Ihren EC2-Instanzen.
  • So richten Sie Ihre Skripte so ein, dass sie Tage, Wochen oder Monate sicher ausgeführt werden.
  • So überwachen Sie Prozesse, das System und die GPU-Leistung.

Starten Sie Ihr Projekt mit meinem neuen Buch Deep Learning With Python, einschließlich Schritt-für-Schritt-Anleitungen und das Python-Quellcode Dateien für alle Beispiele.

Lass uns anfangen.

Hinweis: Alle von Ihrer Workstation ausgeführten Befehle setzen voraus, dass Sie eine Linux-Umgebung ausführen (z. B. Linux, OS X oder Cygwin).

Haben Sie weitere Tipps, Tricks oder Lieblingsbefehle zum Ausführen von Modellen auf EC2?
Lass es mich in den Kommentaren unten wissen.

10 Befehlszeilenrezepte für Deep Learning in Amazon Web Services

10 Befehlszeilenrezepte für Deep Learning in Amazon Web Services
Foto von Chascar, einige Rechte vorbehalten.

Überblick

Die in diesem Beitrag vorgestellten Befehle setzen voraus, dass Ihre AWS EC2-Instanz bereits ausgeführt wird.

Aus Gründen der Konsistenz werden einige andere Annahmen getroffen:

  • Ihre Server-IP-Adresse lautet 54.218.86.47;; Ändern Sie dies in die IP-Adresse Ihrer Serverinstanz.
  • Dein Benutzername ist ec2-user;; Ändern Sie dies in Ihren Benutzernamen auf Ihrer Instanz.
  • Ihr SSH-Schlüssel befindet sich in ~ / .ssh / und hat den Dateinamen aws-keypair.pem;; Ändern Sie dies in Ihren SSH-Schlüsselspeicherort und Dateinamen.
  • Sie arbeiten mit Python-Skripten.

Wenn Sie Hilfe beim Einrichten und Ausführen einer GPU-basierten AWS EC2-Instanz für Deep Learning benötigen, lesen Sie das Tutorial:

1. Melden Sie sich von Ihrer Workstation aus beim Server an

Sie müssen sich beim Server anmelden, bevor Sie etwas Nützliches tun können.

Sie können sich einfach mit der sicheren SSH-Shell anmelden.

Ich empfehle, Ihren SSH-Schlüssel in Ihrem zu speichern ~ / .ssh / Verzeichnis mit einem nützlichen Namen. Ich benutze den Namen aws-keypair.pem. Denken Sie daran: Die Datei muss die Berechtigungen 600 haben.

Mit dem folgenden Befehl werden Sie bei Ihrer Serverinstanz angemeldet. Denken Sie daran, den Benutzernamen und die IP-Adresse in Ihren relevanten Benutzernamen und die IP-Adresse der Serverinstanz zu ändern.

2. Kopieren Sie Dateien von Ihrer Workstation auf den Server

Sie kopieren Dateien von Ihrer Workstation mit einer sicheren Kopie (scp) auf Ihre Serverinstanz.

Das folgende Beispiel, das auf Ihrer Workstation ausgeführt wird, kopiert das script.py Python-Skript im lokalen Verzeichnis auf Ihrer Workstation zu Ihrer Serverinstanz.

3. Führen Sie das Skript als Hintergrundprozess auf dem Server aus

Sie können Ihr Python-Skript als Hintergrundprozess ausführen.

Außerdem können Sie es so ausführen, dass Signale von anderen Prozessen ignoriert, Standardeingaben (stdin) ignoriert und alle Ausgaben und Fehler an eine Protokolldatei weitergeleitet werden.

Nach meiner Erfahrung ist all dies für lang laufende Skripte erforderlich, um große Deep-Learning-Modelle anzupassen.

Dies setzt voraus, dass Sie das ausführen script.py Python-Skript in der / home / ec2-user / Verzeichnis und dass Sie die Ausgabe dieses Skripts an die Datei weiterleiten möchten script.py.log befindet sich im selben Verzeichnis.

Stellen Sie sich auf Ihre Bedürfnisse ein.

Wenn dies Ihre erste Erfahrung mit nohup ist, können Sie hier mehr erfahren:

Wenn dies Ihre erste Erfahrung mit der Umleitung von Standardeingabe (stdin), Standardausgabe (stout) und Standardfehler (sterr) ist, können Sie hier mehr erfahren:

4. Führen Sie das Skript auf einer bestimmten GPU auf dem Server aus

Ich empfehle, mehrere Skripte gleichzeitig auszuführen, wenn Ihre AWS EC2-Instanz dies für Ihr Problem verarbeiten kann.

Beispielsweise verfügt Ihre ausgewählte EC2-Instanz möglicherweise über 4 GPUs, und Sie können festlegen, dass jeweils ein Skript ausgeführt wird.

Mit CUDA können Sie angeben, welches GPU-Gerät mit der Umgebungsvariablen verwendet werden soll CUDA_VISIBLE_DEVICES.

Wir können den gleichen Befehl wie oben verwenden, um das Skript auszuführen und das zu verwendende GPU-Gerät wie folgt anzugeben:

Wenn Ihre Instanz 4 GPU-Geräte enthält, können Sie dies angeben CUDA_VISIBLE_DEVICES = 0 zu CUDA_VISIBLE_DEVICES = 3.

Ich gehe davon aus, dass dies für das Theano-Backend funktionieren würde, habe es jedoch nur mit dem TensorFlow-Backend für Keras getestet.

Sie können mehr darüber erfahren CUDA_VISIBLE_DEVICES in der Post:

5. Überwachen Sie die Skriptausgabe auf dem Server

Sie können die Ausgabe Ihres Skripts überwachen, während es ausgeführt wird.

Dies kann nützlich sein, wenn Sie in jeder Epoche oder nach jedem Algorithmuslauf eine Punktzahl ausgeben.

In diesem Beispiel werden die letzten Zeilen Ihrer Skriptprotokolldatei aufgelistet und die Ausgabe aktualisiert, wenn dem Skript neue Zeilen hinzugefügt werden.

Amazon kann Ihr Terminal aggressiv schließen, wenn der Bildschirm nach einiger Zeit keine neue Ausgabe mehr erhält.

Eine Alternative ist die Verwendung des Befehls watch. Ich habe festgestellt, dass Amazon dieses Terminal offen hält:

Ich habe festgestellt, dass Standard-Out (Stout) von Python-Skripten nicht häufig aktualisiert zu werden scheint.

Ich weiß nicht, ob dies eine EC2-Sache oder eine Python-Sache ist. Dies bedeutet, dass die Ausgabe im Protokoll möglicherweise nicht häufig aktualisiert wird. Es scheint gepuffert und ausgegeben zu werden, wenn der Puffer feste Größen erreicht oder am Ende eines Laufs.

Wissen Sie mehr darüber?
Lass es mich in den Kommentaren unten wissen.

6. Überwachen Sie die System- und Prozessleistung auf dem Server

Es ist eine gute Idee, die Leistung des EC2-Systems zu überwachen. Besonders die Menge an RAM, die Sie verwenden und übrig haben.

Sie können dies mit dem Befehl top tun, der alle paar Sekunden aktualisiert wird.

Sie können auch das System und nur Ihren Prozess überwachen, wenn Sie dessen Prozesskennung (PID) kennen.

7. Überwachen Sie die GPU-Leistung auf dem Server

Es ist eine gute Idee, die Leistung Ihrer GPU im Auge zu behalten.

Behalten Sie auch hier die GPU-Auslastung im Auge, auf der GPUs ausgeführt werden, wenn Sie mehrere Skripts parallel und in der GPU-RAM-Nutzung ausführen möchten.

Du kannst den ... benutzen nvidia-smi Befehl, um die GPU-Nutzung im Auge zu behalten. Ich benutze gerne die sehen Befehl, der das Terminal offen hält und den Bildschirm für jedes neue Ergebnis löscht.

8. Überprüfen Sie, welche Skripte noch auf dem Server ausgeführt werden

Es ist auch wichtig zu beobachten, welche Skripte noch ausgeführt werden.

Sie können dies mit dem tun ps Befehl.

Auch hier verwende ich gerne den Befehl watch, um das Terminal offen zu halten.

9. Bearbeiten Sie eine Datei auf dem Server

Ich empfehle, keine Dateien auf dem Server zu bearbeiten, es sei denn, Sie müssen wirklich.

Trotzdem können Sie eine Datei mit dem bearbeiten vi Editor.

Das folgende Beispiel öffnet Ihr Skript in vi.

Natürlich können Sie Ihren bevorzugten Befehlszeileneditor wie Emacs verwenden. Dieser Hinweis ist wirklich für Sie, wenn Sie neu in der Unix-Befehlszeile sind.

Wenn dies Ihre erste Begegnung mit vi ist, können Sie hier mehr erfahren:

10. Laden Sie von Ihrer Workstation Dateien vom Server herunter

Ich empfehle, Ihr Modell sowie alle Ergebnisse und Grafiken explizit in neuen und separaten Dateien als Teil Ihres Skripts zu speichern.

Sie können diese Dateien mithilfe einer sicheren Kopie (scp) von Ihrer Serverinstanz auf Ihre Workstation herunterladen.

Das folgende Beispiel wird von Ihrer Workstation ausgeführt und kopiert alle PNG-Dateien aus Ihrem Home-Verzeichnis auf Ihre Workstation.

Zusätzliche Tipps und Tricks

In diesem Abschnitt werden einige zusätzliche Tipps aufgeführt, wenn Sie intensiv an AWS EC2 arbeiten.

  • Führen Sie mehrere Skripte gleichzeitig aus. Ich empfehle, Hardware mit mehreren GPUs auszuwählen und mehrere Skripte gleichzeitig auszuführen, um die Plattform voll auszunutzen.
  • Schreiben und bearbeiten Sie Skripte nur auf Ihrer Workstation. Behandeln Sie EC2 als Pseudoproduktionsumgebung und kopieren Sie immer nur Skripte und Daten, um sie auszuführen. Führen Sie die gesamte Entwicklung auf Ihrer Workstation durch und schreiben Sie kleine Tests Ihres Codes, um sicherzustellen, dass er wie erwartet funktioniert.
  • Speichern Sie Skriptausgaben explizit in einer Datei. Speichern Sie Ergebnisse, Grafiken und Modelle in Dateien, die später zur Analyse und Anwendung auf Ihre Workstation heruntergeladen werden können.
  • Verwenden Sie den Befehl watch. Amazon beendet Terminalsitzungen ohne Aktivität aggressiv. Mit dem Befehl watch, der häufig genug Daten sendet, um das Terminal offen zu halten, können Sie die Dinge im Auge behalten.
  • Führen Sie Befehle von Ihrer Workstation aus. Alle oben aufgeführten Befehle, die auf dem Server ausgeführt werden sollen, können auch von Ihrer Workstation aus ausgeführt werden, indem dem Befehl das Präfix „ssh -ich ~ / .ssh /aws-keypair.pem [email protected]”Und zitieren Sie den Befehl, den Sie ausführen möchten. Dies kann nützlich sein, um den ganzen Tag über Prozesse zu überprüfen.

Zusammenfassung

In diesem Lernprogramm haben Sie die 10 Befehle entdeckt, die ich jedes Mal verwende, wenn ich große Deep-Learning-Modelle auf AWS EC2-Instanzen mit GPUs trainiere.

Insbesondere haben Sie gelernt:

  • So kopieren Sie Ihre Daten zu und von Ihren EC2-Instanzen.
  • So richten Sie Ihre Skripte so ein, dass sie Tage, Wochen oder Monate sicher ausgeführt werden.
  • So überwachen Sie Prozesse, das System und die GPU-Leistung.

Haben Sie irgendwelche Fragen?
Stellen Sie Ihre Fragen in den Kommentaren unten und ich werde mein Bestes tun, um zu beantworten.

Entwickeln Sie Deep Learning-Projekte mit Python!

Deep Learning mit Python

Was wäre, wenn Sie in wenigen Minuten ein Netzwerk aufbauen könnten?

... mit nur wenigen Zeilen Python

Entdecken Sie, wie in meinem neuen Ebook:
Tiefes Lernen mit Python

Es bedeckt End-to-End-Projekte zu Themen wie:
Mehrschichtige Perzeptrone, Faltungsnetze und Wiederkehrende neuronale Netze, und mehr...

Bringen Sie endlich Deep Learning zu
Ihre eigenen Projekte

Überspringen Sie die Akademiker. Nur Ergebnisse.

Siehe Was ist drin?

Das könnte Sie auch interessieren