Commit 62205313 authored by Nane Kratzke's avatar Nane Kratzke
Browse files

Update ray tutorial

parent 9888f64a
......@@ -17,7 +17,7 @@
"source": [
"## Training eines neuronalen Netzes auf einer Virtuellen Maschine\n",
"\n",
"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 komplexere Machine Learning Modellen stößt man damit aber schnell an Grenzen der Praktikabilität.\n",
"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.\n",
"\n",
"Das folgende Beispiel trainiert wieder den MNIST-Datensatz zur Erkennung von Kleidungsstücken, das Sie bereits aus dem Zalando-Tutorial kennen.\n",
"\n",
......@@ -87,7 +87,8 @@
" \n",
" return time.monotonic() - start\n",
"\n",
"print(f\"Berechnungsdauer ohne Ray Cluster: {train_local()} sec\")"
"local = train_local()\n",
"print(f\"Berechnungsdauer ohne Ray Cluster: {local} sec\")"
]
},
{
......@@ -97,9 +98,15 @@
"source": [
"## Training in einem GPU-Cluster\n",
"\n",
"Für die THL soll jedoch ein GPU-Cluster aufgebaut und komfortabel zur Verfügung gestellt werden. Dieses Beispiel zeigt das grundsätzliche Prinzip in Form eines noch CPU-basierten Demonstrators.\n",
"Für die THL soll jedoch ein GPU-Cluster aufgebaut und Nutzergruppen für\n",
"\n",
"Im Ray-Cluster sollen hingegen optimierte GPU-Karten zur Verfügung stehen, 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.\n",
"- Lehre\n",
"- Forschung und\n",
"- Transfer\n",
"\n",
"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.\n",
"\n",
"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.\n",
"\n",
"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.\n",
"\n",
......@@ -114,7 +121,7 @@
">\n",
"> __Die aktuelle Installation ist ein reiner Demonstrations-Prototyp.__\n",
">\n",
"> Alle Warn-Meldungen der Tensorflow-Bibliothek sind noch auf das Fehlen\n",
"> Alle Warn-Meldungen der Tensorflow-Bibliothek sind aktuell noch auf das Fehlen\n",
"> von optimierten GPU-Karten zurückzuführen."
]
},
......@@ -127,6 +134,7 @@
"source": [
"print(\"Training eines Neuronalen Netzes im Ray Cluster mittels ray.remote() Annotation\")\n",
"print(\"Auch dies wird noch eine ähnlich lange Zeit (aufgrund fehlender GPU-Ressourcen) in Anspruch nehmen.\")\n",
"print(\"Die Stelle des wiss. MA soll u.a. die GPU-Ressourcen in diesen Cluster integrieren.\")\n",
"\n",
"# Import the necessary libraries\n",
"import ray, time\n",
......@@ -138,7 +146,9 @@
"def train_ray():\n",
" start = time.monotonic()\n",
"\n",
" print(f\"Hello from the Ray Cluster. The following training runs on the cluster\")\n",
" print(f\"Hello from the Ray Cluster. The following training runs still on a CPU cluster.\")\n",
" print(f\"Providing GPU ressources would speedup training cycles by a factor of 1000 or even more.\")\n",
" \n",
" \n",
" # Import the Fashion MNIST dataset\n",
" fashion_mnist = tf.keras.datasets.fashion_mnist\n",
......@@ -178,9 +188,11 @@
"ray.client().connect()\n",
"print(f\"Der Ray-Cluster stellt aktuell folgende Ressourcen bereit: { ray.available_resources() }\")\n",
"refs = train_ray.remote()\n",
"result = ray.get(refs)\n",
"print(f\"Berechnungsdauer im Ray Cluster: {result} sec\")\n",
"ray.shutdown()"
"cluster = ray.get(refs)\n",
"print(f\"Berechnungsdauer im Ray Cluster: {cluster} sec\")\n",
"ray.shutdown()\n",
"\n",
"print(f\"Obwohl es sich nur um einen CPU-Cluster zu Demonstrationszwecken handelt, konnte die Berechnungszeit immerhin auf {cluster / local * 100:.2f}% gesenkt werden.\")"
]
},
{
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment