Dieses Tutorial zeigt, wie die beabsichtigte Jupyter Hub Umgebung der THL genutzt werden kann, um Machine Learning Modelle nicht nur auf einer JupyterLab Instanz, sondern in einem für Machine Learning optimierten Ray-Cluster auszuführen.
## Training eines neuronalen Netzes auf einer Virtuellen Maschine
Die JupyterLab Instanzen sind bewusst knapp dimensioniert und haben keine GPU-Karten. Das Trainieren von Neuronalen Netzen direkt auf den JupyterLab Instanzen ist also recht ineffektiv, da dies auf einer All Purpose CPU erfolgt. Für kleinere Tests ist dies ausreichend, mit komplexeren Machine Learning Modellen stößt man damit aber schnell an Grenzen der Praktikabilität.
Das folgende Beispiel trainiert wieder den MNIST-Datensatz zur Erkennung von Kleidungsstücken, das Sie bereits aus dem Zalando-Tutorial kennen.
Diese Training erfolgt auf derselben Maschine, auf der auch diese Web-Oberfläche läuft und würde genauso auf ihrem Arbeitsplatz-PC oder Laptop funktionieren.
Für die THL soll jedoch ein GPU-Cluster aufgebaut und Nutzergruppen für
- Lehre
- Forschung und
- Transfer
komfortabel zur Verfügung gestellt werden, um auch komplexere Fragenstellungen des Machine Learnings (z.B. das Trainieren neuronaler Netze) berechnen zu können. Dieses Beispiel hier zeigt das grundsätzliche Prinzip noch in Form eines noch CPU-basierten Demonstrators.
Perspektivisch sollen jedoch für Machine Learning optimierte GPU-Karten in einem Ray-Cluster zur Verfügung gestellt werden, die u.a. das Trainieren von Neuronalen Netzen erheblich beschleunigen und allen Nutzern als Shared Ressource zur Verfügung gestellt werden können. Der Ray-Cluster sorgt dafür, dass diese teuren GPU-Karten tatsächlich nur für die Trainingsdauer allokiert werden und direkt danach sofort wieder anderen Nutzern zur Verfügung gestellt werden.
Um das Training von Tensorflow oder PyTorch Modellen an diesen Cluster auszulagern, wird es nur erforderlich sein, das Training in einer Funktion zu kapseln und diese Funktion auf dem Cluster auszuführen. Dieses Tutorial zeigt am Beispiel des Zalando Tutorials wie dies grundsätzlich geht.
Auf diese Weise soll mit dem Ray Cluster das Training von Neuronalen Netzen substantiell für alle Nutzer beschleunigt werden (d.h. Trainingszeiten von Stunden oder Tagen auf Minuten oder Sekunden reduziert werden).
> __Hinweis:__
>
> Aktuell sind noch keine GPU-Karten im Ray Cluster hinterlegt.
> Diese werden aktuell durch die FB E+I und M+W beschafft.
> Ziel der beantragten Stelle ist es, solche Hochwert-Machine Learning Ressourcen
> allen Hochschulmitgliedern komfortabel zur Verfügung stellen zu können.
>
> __Die aktuelle Installation ist ein reiner Demonstrations-Prototyp.__
>
> Alle Warn-Meldungen der Tensorflow-Bibliothek sind aktuell noch auf das Fehlen
print(f"Der Ray-Cluster stellt aktuell folgende Ressourcen bereit: {ray.available_resources()}")
refs=train_ray.remote()
cluster=ray.get(refs)
print(f"Berechnungsdauer im Ray Cluster: {cluster} sec")
ray.shutdown()
print(f"Obwohl es sich nur um einen CPU-Cluster zu Demonstrationszwecken handelt, konnte die Berechnungszeit immerhin auf {cluster/local*100:.2f}% gesenkt werden.")