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. Beispielsweise benötigt TensorFlow 2.16 CUDA 12.3, während PyTorch 2.5.0 mit CUDA 12.1 oder CUDA 11.8 kompatibel ist – was zu einem verwirrenden und frustrierenden Kompatibilitätschaos führt.
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
- Mühelose Framework-Einrichtung: Starte eine spezifische Version von PyTorch oder TensorFlow mit nur einem einzigen Befehl.
- Parallele Framework-Unterstützung: Führe mehrere Versionen von Machine-Learning-Frameworks und deren benötigte Bibliotheken gleichzeitig aus.
- Einfache Bibliotheksverwaltung: Verwaltet alle Abhängigkeiten (CUDA, cuDNN, cuBLAS etc.) innerhalb von Containern, sodass das Host-System unberührt bleibt.
- Klare Trennung für einfaches Testen: Nutzer-Code und Framework-Installationen bleiben vollständig isoliert, sodass du deine Software in wenigen Minuten mit verschiedenen Framework-Versionen testen kannst.
- Unterstützung für mehrere Sitzungen: Öffne und betreibe mehrere Shell-Sitzungen gleichzeitig innerhalb eines Containers.
- Multi-User-Funktionalität: Stelle sicher, dass Container-Umgebungen für jeden Benutzer sicher voneinander getrennt sind.
- Flexible GPU-Zuweisung: Weise GPUs gezielt bestimmten Benutzern, Containern oder Sitzungen zu.
- Bare-Metal-Performance: Erlebe dieselbe Leistung wie bei einer direkten Installation auf der Hardware.
- Umfassendes Repository: Greife auf eine große Sammlung vorkonfigurierter Container für alle wichtigen Deep-Learning-Framework-Versionen zu.
Wie es funktioniert...
Entdecke die wichtigsten Befehle, die dich durch jeden Schritt führen – vom Erstellen über das Öffnen, Starten, Stoppen bis hin zum Löschen deiner eigenen Machine-Learning-Container.
Um detaillierte Informationen zu allen verfügbaren Befehlen anzuzeigen, verwende:
mlc -h
Für Hilfe zu einem bestimmten Befehl (z. B. create), verwende:
mlc create -h
Erstellen eines Machine-Learning-Containers
mlc create container_name framework version [-w=workspace_dir] [-d data_dir] [-m models_dir] [-s|--script] [-arch|--architecture gpu_architecture] [-g|--num_gpus all]
Beim Erstellen eines neuen Containers stehen die folgenden Optionen zur Verfügung.
Verfügbare Frameworks:
PyTorch, TensorFlow
Unterstützte GPU-Architekturen:
CUDA_ADA, CUDA_AMPERE, CUDA für NVIDIA-GPUs und ROCM6, ROCM5 für AMD-GPUs
Verfügbare Versionen für CUDA_ADA, das NVIDIA-GPUs der Ada-Lovelace-Architektur entspricht (RTX 4080/4090, RTX 4500/5000/6000 Ada, L40, L40S):
PyTorch: 2.6.0, 2.5.1, 2.5.0, 2.4.0, 2.3.1-aime, 2.3.0, 2.2.2, 2.2.0, 2.1.2-aime, 2.1.1-aime, 2.1.0-aime, 2.1.0, 2.0.1-aime, 2.0.1, 2.0.0, 1.14.0a-nvidia, 1.13.1-aime, 1.13.0a-nvidia, 1.12.1-aime
TensorFlow: 2.16.1, 2.15.0, 2.14.0, 2.13.1-aime, 2.13.0, 2.12.0, 2.11.0-nvidia, 2.11.0-aime, 2.10.1-nvidia, 2.10.0-nvidia, 2.9.1-nvidia
Um die aktuell verfügbaren GPU-Architekturen, Frameworks und deren Versionen anzuzeigen, verwende:
> mlc create –info
Beispiel zur Erstellung eines Containers im Skriptmodus mit Pytorch 2.4.0, dem Namen 'container_name' und dem eingebundenen Benutzer-Home-Verzeichnis als Arbeitsbereich sowie /data und /models als Daten- bzw. Modellverzeichnis:
> mlc create container_name Pytorch 2.4.0 -w /home/user_name/workspace -d /data -m /models
Öffnen eines Machine-Learning-Containers
mlc open container_name
Um den erstellten machine learning container "container_name" zu öffnen
> mlc open contianer_name
Konsolen-Ausgabe:
[container_name] starting container
[container_name] 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!
[container_name] 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 ML-Container sowie deren CPU- und Speicherauslastung an.
> 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
mlc stop container_name [-f]
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.
Um einen Container zwangsweise zu stoppen, verwenden Sie:
mlc stop container_name -f
Entfernen/Löschen von Machine-Learning-Containern
mlc remove container_name
um einen Container zu löschen.
Warnung: Der gelöschte Container kann nicht wiederhergestellt werden! Es bleiben nur die Daten erhalten, die im Verzeichnis '/workspace ', '/data' und '/models' gespeichert sind. Bitte verwenden Sie diesen Befehl nur zum aufräumen von nicht mehr benötigten Containern.
mlc remove container_name
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 grundlegenden, aber leistungsstarken Befehlen können Sie Ihre Deep-Learning-Container mühelos erstellen, öffnen und verwalten.
Innerhalb des Containers können Sie sowohl apt- als auch Python-Pakete installieren, ohne das Host-System zu beeinträchtigen. Es ist zwar möglich, ein zusätzliches venv zu verwenden, um Python-Pakete zu verwalten, aber dies ist oft nicht notwendig – erstellen Sie einfach einen neuen Container, um mit verschiedenen Setups zu experimentieren. Führen Sie mehrere Instanzen Ihrer Container aus und verwalten Sie Ihre Deep-Learning-Sitzungen nahtlos. Teilen Sie Daten und Quellcode zwischen dem Container und dem Host-System über das gemountete Arbeitsverzeichnis. Wenn Sie an einer Workstation arbeiten, können Sie Ihre Daten und Ihren Code mit Ihrem bevorzugten Desktop-Editor – wie Visual Studio Code – direkt auf dem Host-System bearbeiten und verwalten. Testen Sie Ihre Änderungen sofort – es ist kein mühsames Pushen und Pullen von Dateien über eine Remote-Desktop-Verbindung erforderlich.
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 MLC steht außerdem auch als Open Source Projekt auf GitHub zur Verfügung.