AIME Machine Learning Framework Container Management
Hierzu findet man zwar viele Anleitungen, doch bis man eine bestimmte Version des bevorzugten Frameworks installiert hat und zum Laufen bekommt, sind einige Hürden zu umschiffen. Und wie in einer Partie Jenga, führt der Austausch oder die Aktualisierung eines einzelnen Bausteins dann häufig zu einem vollständigen Zusammenbruch des Systems.
Daher erscheint das Motto "Never change a running System" hier oft als sicherste Option, da man hierbei nicht das Risiko eingeht, beim Aktualisieren für mehrere Stunden oder Tage von einem funktionierenden System ausgeschlossen zu werden.
Und die Herausforderung steigt, wenn sich mehrere Benutzer das System teilen oder verschiedene Frameworks installiert werden müssen. Tensorflow 1.15 basiert z.B. auf CUDA 10.0, Pytorch 1.4 jedoch auf CUDA 10.1 oder CUDA 9.2. Ein Wechsel wäre hier wieder mit hohem Aufwand verbunden.
Ein funktionierendes GPU-Deep-Learning-Setup spannt sich zwischen folgenden Eckpunkten auf:
- Betriebsystem Version
- Version des NVIDIA Treibers
- CUDA Version
- CuDNN Version
- Zusätzlich benötigte CUDA Bilbiotheken und deren Versionen
- Version des Python-Interpreters
- Installierte Python-Pakete und zugehörige System-Bibliotheken
Natürlich gibt es einige Ansätze, die versuchen, dieses Problem zu lösen. Diese weisen jeweils spezifische Unterschiede mit eigenen Vor- und Nachteile auf:
Conda
Conda ist eine Packetverwaltung und eine erweiterte Version von Pythons "pip/venv"-Ansatzes. Es hilft beim Einrichten einer virtuellen Umgebung von Python-Paketen und berücksichtigt dabei auch die erforderlichen Systembibliotheken (apt-Pakete), die für das jeweils installierte Python-Paket benötigt werden. Conda bietet teilweise Deep Learning Framework-Versionen für die Unterstützung von verschiedene CUDA-Versionen an.
Vorteile
- Mächtiger als Python venv
- Geeignet, um zwischen Python-Paket-Setups für verschiedene Projekte zu wechseln, die auf kompatiblen Deep-Learning-Framework-Versionen basieren
- Gute PyTorch Unterstützung
Nachteile
- Wird nicht von allen gängigen Deep Learning Frameworks unterstützt
- unbrauchbar wenn verschiedene Systembibliotheken oder Treiberversionen benötigt werden
Virtuelle Maschinen
Die Allround-Lösung für Multi-User- und Multi-Version-Abstraktionsprobleme: Richten Sie eine virtuelle Maschine für jeden Benutzer, jedes Deep Learning Framework und/oder jedes Projekt ein.
Vorteile
- sicherste Möglichkeit, um verschiedene Benutzer- und Framework-Setups voneinander zu trennen
- dediziertes Ressourcenmanagement möglich
Nachteile
- nur für GPUs verfügbar, die Treiber für virtuelle Maschinen unterstützen (Tesla, Quadro)
- sehr ressourcenintensiv
- im gewissen Rahmen Leistungsverluste durch die Virtualisierungsschichten
- aufwendig in der Wartung
Docker-Container
Die nächste Generation der Virtualisierung sind Container-Systeme, wie sie z.B. Docker bereitstellt. Das Container-Konzept sieht vor, nur so viel wie nötig, aber so wenig wie möglich zu virtualisieren. Es bündelt dabei alle benötigten Ressourcen in sogenannten Containern, die einen völlig anderen Versionsstack als das Hostsystem besitzen können. Hierzu stellt es Schnittstellen bereit, um direkt mit dem Hostsystem interagieren zu können.
Vorteile
- schlanker als komplett virtuelle Maschinen
- für die meisten Deep-Learning-Frameworks sind Docker-Container verfügbar
- Funktioniert auf allen NVIDIA-GPUs
- Bare-Metal-Performane
- sehr flexibel in Gebrauch und Konfiguration
Nachteile
- steile Lernkurve mit wenig Konvention, wie man es 'richtig' benutzt
- kann ohne Konventionen schnell chaotisch & verwirrend werden
- keine eingebaute Mehrbenutzer-Funktionalität
AIME Machine Learning Container Management System
AIME hat ein Container-Management-System entwickelt, das eine einfache und problemfreie Installation, Ausführung und Verwaltung von Docker-Containern für die gängigsten Deep-Learning-Frameworks erlaubt.
Features
- Einrichten und Ausführen einer bestimmten Version von Tensorflow, Pytorch oder Mxnet mit einem einfachen Befehl
- Paralleles Ausführen verschiedener Versionen der gängigsten Frameworks für maschinelles Lernen inklusive der erforderlichen Bibliotheken
- Verwaltung erforderlicher Bibliotheken (CUDA, CUDNN, CUBLAS usw.) in Containern, ohne Beeinträchtigung der Host-Installation
- Klare Trennung von Benutzercode und Framework-Installation. Testen und vergleichen Sie Ihren Code innerhalb von Minuten mit anderen Framework-Versionen
- Multi-Session: Öffnen Sie mehrere Shell-Sessions und führen Sie sie gleichzeitig in einem einzigen Container aus
- Mehrbenutzer: Separater Container-Bereich für jeden Benutzer
- Multi-GPU: Einzelne GPUs Benutzern, Containern oder Sitzungen zuweisen
- Läuft mit der gleichen Leistung wie eine Bare-Metal-Installation
- Repository aller wichtigen Deep Learning Framework-Versionen als Container
Wie es funktioniert...
Im Folgenden finden Sie die wesentlichen Befehle zum Erstellen, Öffnen, Starten / Stoppen und Löschen Ihrer Machine-Learning-Container.
Erstellen eines Machine-Learning-Containers
mlc-create container_name framework version [-w=workspace]
Erstellen einen neuen Machine-Learning-Containers
Verfügbare Frameworks und Versionen:
Pytorch: 2.3.0, 2.2.2, 2.2.1, 2.2.0, 2.1.2, 2.1.0, 2.0.1, 2.0.0, 1.13.1, 1.13.0, 1.12.1-jlab, 1.12.1, 1.12.0, 1.11.0, 1.10.2-aime, 1.10.0, 1.9.0, 1.8.0, 1.7.1, 1.7.0, 1.7.0-nvidia
Tensorflow: 2.14.0, 2.13.1, 2.13.0, 2.12.0, 2.11.0, 2.10.1, 2.10.0, 2.9.2-jlab, 2.9.0, 2.8.0, 2.7.0, 2.6.1, 2.5.0, 2.4.1, 2.4.0, 2.3.1-nvidia, 1.15.4-nvidia
MXNet: 1.8.0-nvidia
Beispiel zum Erstellen eines Tensorflow-1.15.0-Containers mit dem Namen 'my-container' mit gemountetem Benutzerverzeichnis als Arbeitsbereich:
> mlc-create my-container Tensorflow 1.15.0 -w=/home/admin
Öffnen eines Machine-Learning-Containers
mlc-open container_name
So öffnen Sie den erstellten Machine-Learning-Container "my-container"
> mlc-open my-container
Konsolen-Ausgabe:
[my-container] starting container
[my-container] opening shell to container
________ _______________
___ __/__________________________________ ____/__ /________ __
__ / _ _ \_ __ \_ ___/ __ \_ ___/_ /_ __ /_ __ \_ | /| / /
_ / / __/ / / /(__ )/ /_/ / / _ __/ _ / / /_/ /_ |/ |/ /
/_/ \___//_/ /_//____/ \____//_/ /_/ /_/ \____/____/|__/
You are running this container as user with ID 1000 and group 1000,
which should map to the ID and group for your user on the Docker host. Great!
[my-container] admin@aime01:/workspace$
Der Container wird mit den Zugriffsrechten des Benutzers ausgeführt. Um privilegierte Rechte, wie zum Installieren von Paketen mit 'apt' innerhalb des Containers zu verwenden, nutzen Sie 'sudo'. In der Standardeinstellung wird für sudo kein Passwort benötigt. Um dies zu ändern, setzen Sie ein Passwort mit 'passwd'.
Mehrere Instanzen eines Containers können mit ' mlc-open ' geöffnet werden. Jede Instanz wird in einem eigenen Prozess ausgeführt.
Um eine geöffnete Shell zu verlassen, geben Sie in der Befehlszeile 'exit' ein. Die zuletzt verlassene Shell stoppt den Container automatisch.
Liste der verfügbaren Machine-Learning-Container
mlc-list
listet alle verfügbaren Container für den aktuellen Benutzer auf
> mlc-list
würde zum Beispiel ausgeben:
Available ml-containers are:
CONTAINER FRAMEWORK STATUS
[torch-vid2vid] Pytorch-1.2.0 Up 2 days
[tf1.15.0] Tensorflow-1.15.0 Up 8 minutes
[mx-container] Mxnet-1.5.0 Exited (137) 1 day ago
[tf1-nvidia] Tensorflow-1.14.0_nvidia Exited (137) 1 week ago
[tf1.13.2] Tensorflow-1.13.2 Exited (137) 2 weeks ago
[torch1.3] Pytorch-1.3.0 Exited (137) 3 weeks ago
[tf2-gpt2] Tensorflow-2.0.0 Exited (137) 7 hours ago
Liste der aktiven Machine-Learning-Container
mlc-stats
zeigt alle laufenden Machine-Learning-Container und deren CPU- und Speicherauslastung
> mlc-stats
Running ml-containers are:
CONTAINER CPU % MEM USAGE / LIMIT
[torch-vid2vid] 4.93% 8.516GiB / 63.36GiB
[tf1.15.0] 7.26% 9.242GiB / 63.36GiB
Starten von Machine-Learning-Containern
mlc-start container_name
um explizit einen Container zu starten.
'mlc-start' bietet eine Möglichkeit, Container zu starten, um installierte Hintergrundprozesse wie einen dort installierten Webserver auszuführen, ohne eine interaktive Shell dafür öffnen zu müssen.
Zum Öffnen einer Shell für den Container verwenden Sie einfach 'mlc-open', wodurch der Container automatisch gestartet wird, wenn er nicht bereits läuft.
Stoppen von Machine-Learning-Containern
ml-stop container_name [-Y]
um explizit einen Container zu stoppen.
'mlc-stop' für einen Container ist vergleichbar mit dem Herunterfahren eines Computers. Alle Aktivierungsvorgänge und offenen Shells für den Container werden beendet.
So erzwingen Sie einen Stop eines Container:
mlc-stop my-container -Y
Entfernen/Löschen von Machine-Learning-Containern
mlc-remove container_name
um Container zu löschen.
Warnung: Der gelöschte Container kann nicht wiederhergestellt werden! Es bleiben nur die Daten erhalten, die im Verzeichnis '/workspace ' gespeichert sind. Bitte verwenden Sie diesen Befehl nur zum aufräumen von nicht mehr benötigten Containern.
mlc-remove my-container
ML-Container aktualisieren
mlc-update-sys
um das Containerverwaltungssystem auf die neueste Version zu aktualisieren.
Das Containersystem und das Container-Repo werden auf die neueste Version aktualisiert. Führen Sie diesen Befehl aus, um zu überprüfen, ob neue Framework-Versionen verfügbar sind. Auf den meisten Systemen ist hierfür ein privilegierter Zugriff (sudo-Passwort) erforderlich.
mlc-update-sys
Das war‘s!
Mit diesen einfachen, aber effektiven Befehlen können Sie Ihre Deep-Learning-Container erstellen, öffnen und verwalten. So ist es möglich, apt- und Python-Pakete innerhalb eines Containers zu installieren, ohne das Host-System zu gefährden. Die Erstellung einer zusätzlichen venv-Umgebung zur Verwaltung Ihrer Python-Pakete ist zwar möglich, aber nicht unbedingt erforderlich: Erstellen Sie einfach einen neuen Container, um mit einem neuen Setup zu experimentieren. Öffnen Sie multiple Instanzen Ihrer Container und führen Sie dort Ihre Deep Learning-Sitzungen parallel aus. Teilen Sie Daten und Quellcode zwischen Container und Host über das bereitgestellte Arbeitsbereichsverzeichnis. Wenn Sie an einer Workstation arbeiten, bearbeiten und verwalten Sie Ihre Daten und Ihren Code in Ihrem bevorzugten Editor, der einfach auf dem Desktop des Host-Systems ausgeführt wird, und testen Sie Ihre Änderungen, ohne umständliches Datenhandling.
Installation
AIME-Systeme werden mit dem AIME-Container-Managementsystem vorinstalliert ausgeliefert. Nach der Anmeldung kann man mit den oben beschriebenen Befehlen innerhalb von Sekunden mit dem Maschine Learning loslegen.
AIME ML Container steht außerdem auch als Open Source Projekt auf github zur Verfügung.