AIME Machine Learning Framework Container Management

Um ein Deep Learning-Framework wie Tensorflow, Pytorch oder Mxnet in einer GPU-Umgebung einzurichten und auszuführen, müssen einige Voraussetzungen an die installierten Treiber und Sytembibliotheken erfüllt sein. Dies bedeutet einen hohen Administrations- bzw. Installationsaufwand. 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

Unsere Lösung: AIME ML Container Manager

AIME MLC

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.

AIME maschine learning software stack visualization

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:

Tensorflow: 2.1.0, 2.0.0, 1.15.0, 1.15, 1.14.0, 1.13.2

Mxnet: 1.5.0, 1.4.1, 1.3.1

Pytorch: 1.4.0, 1.3.0, 1.2.0, 1.1.0

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.