Wie man Angst überwindet und Azure Machine Learning zu nutzen beginnt

Ich kenne viele Data Scientists – vielleicht zähle ich mich selbst dazu – die auf Maschinen mit GPU arbeiten, entweder lokal oder virtuell in der Cloud, entweder über Jupyter Notebook oder über eine Entwicklungsumgebung für Python. Während meiner zweijährigen Tätigkeit als AI/ML-Entwicklungsexperte habe ich genau so gearbeitet, dabei die Daten auf einem normalen Server oder Arbeitsplatz vorbereitet und das Training auf einer virtuellen Maschine mit GPU in Azure gestartet.

Natürlich haben wir alle von Azure Machine Learning – einer spezialisierten Cloud-Plattform für maschinelles Lernen – gehört. Doch nach dem ersten Blick auf Einführungsartikel, könnte man den Eindruck gewinnen, dass Azure ML Ihnen mehr Probleme bereitet, als es löst. Zum Beispiel wird im genannten Trainingsbeispiel das Training auf Azure ML aus Jupyter Notebook gestartet, dabei wird vorgeschlagen, das Trainingsskript als Textdatei in einer der Zellen zu erstellen und zu bearbeiten, ohne dabei die Vorteile einer normalen Entwicklungsumgebung wie Autovervollständigung und Syntax-Hervorhebung zu nutzen. Aus diesem Grund haben wir Azure ML lange Zeit nicht ernsthaft in unserer Arbeit verwendet.

Kürzlich habe ich jedoch einen Weg entdeckt, wie man Azure ML effektiv in seine Arbeit integrieren kann! Interessiert an den Einzelheiten?

Wie man Angst überwindet und Azure Machine Learning zu nutzen beginnt

Das Hauptgeheimnis ist das Visual Studio Code-Erweiterung für Azure ML. Sie ermöglicht es Ihnen, Trainingsskripte direkt in VS Code zu entwickeln und dabei alle Vorteile der Umgebung zu nutzen – dabei können Sie das Skript sogar lokal ausführen und es dann mit nur wenigen Mausklicks zur Schulung in den Azure ML-Cluster senden. Praktisch, oder?

Dabei profitieren Sie von den folgenden Vorteilen bei der Nutzung von Azure ML:

  • Sie können die meiste Zeit lokal auf Ihrem Laptop in einer komfortablen IDE arbeiten und GPU nur für das Model Training nutzen.Dabei kann der Pool an Trainingsressourcen automatisch an die erforderliche Last angepasst werden, und wenn Sie die minimale Anzahl an Knoten auf 0 einstellen, können Sie die virtuelle Maschine "nach Bedarf" bei Schulungsaufträgen automatisch starten.
  • Sie können alle Trainingsergebnisse an einem Ort speichern, einschließlich der erreichten Metriken und der erhaltenen Modelle – es ist nicht nötig, sich selbst ein System oder eine Ordnung für die Speicherung aller Ergebnisse auszudenken.
  • Dabei An einem Projekt können mehrere Personen arbeiten. — sie können denselben Rechencluster nutzen, alle Experimente werden in einer Warteschlange angeordnet, und sie können die Ergebnisse der Experimente einsehen. Ein solches Szenario ist die Verwendung von Azure ML im Unterricht für Deep Learning, wenn Sie anstelle von virtuellen Maschinen mit GPU für jeden Studenten einen zentral genutzten Cluster erstellen können. Außerdem kann eine gemeinsame Ergebnistabelle mit der Genauigkeit des Modells ein guter wettbewerbsfähiger Anreiz sein.
  • Mit Azure ML können Sie einfacher eine Reihe von Experimenten durchführen, z. B. zur Optimierung von Hyperparametern — das kann mit nur wenigen Zeilen Code erfolgen, es ist nicht notwendig, Experimente manuell durchzuführen.

Ich hoffe, ich habe Sie überzeugt, Azure ML auszuprobieren! So können Sie anfangen:

Azure ML-Arbeitsbereich und Azure ML-Portal

Azure ML ist um das Konzept eines Arbeitsbereichs — Workspace. In einem Arbeitsbereich können Daten gespeichert, Experimente zum Training gesendet und die Ergebnisse — die erhaltenen Metriken und Modelle — gespeichert werden. Sie können sehen, was sich im Arbeitsbereich befindet, über das Azure ML-Portal — und von dort aus können Sie viele Aktionen durchführen, von der Datenübertragung bis hin zu Überwachungen der Experimente und dem Bereitstellen von Modellen.

Ein Arbeitsbereich kann über die Weboberfläche Azure Portal (siehe Schritt-für-Schritt-Anleitungen), oder mit Hilfe der Azure CLI (Anleitung):

az extension add -n azure-cli-ml
az group create -n myazml -l northeurope
az ml workspace create -w myworkspace -g myazml

Ein Arbeitsbereich kann auch mit einigen Rechenressourcen (Compute). Sobald Sie ein Skript zum Trainieren des Modells erstellt haben, können Sie das Experiment zur Ausführung im Arbeitsbereich senden und das compute target angeben — das Skript wird dann verpackt, in der gewünschten Rechenumgebung ausgeführt und alle Ergebnisse des Experiments werden im Arbeitsbereich zur weiteren Analyse und Nutzung gespeichert.

Trainingsskript für MNIST

Betrachten wir die klassische Aufgabe der Erkennung handgeschriebener Ziffern mit dem MNIST-Datensatz. In Zukunft können Sie auch Ihre eigenen Trainingsscripte ausführen.

In unserem Repository gibt es ein Skript train_local.py, das ein einfaches Modell der linearen Regression mit der SkLearn-Bibliothek trainiert. Natürlich verstehe ich, dass dies nicht der beste Weg ist, das Problem zu lösen – wir verwenden es als Beispiel, das einfachste.

Das Skript lädt zunächst die MNIST-Daten von OpenML herunter und verwendet dann die Klasse LogisticRegression zum Trainieren des Modells und gibt anschließend die erhaltene Genauigkeit aus:

mnist = fetch_openml('mnist_784')
mnist['target'] = np.array([int(x) for x in mnist['target']])

shuffle_index = np.random.permutation(len(mnist['data']))
X, y = mnist['data'][shuffle_index], mnist['target'][shuffle_index]

X_train, X_test, y_train, y_test = 
  train_test_split(X, y, test_size = 0.3, random_state = 42)

lr = LogisticRegression()
lr.fit(X_train, y_train)
y_hat = lr.predict(X_test)
acc = np.average(np.int32(y_hat == y_test))

print('Gesamtgenauigkeit:', acc)

Sie können das Skript auf Ihrem Computer ausführen und erhalten nach ein paar Sekunden ein Ergebnis.

Skript in Azure ML ausführen

Wenn wir jedoch das Skript zum Training über Azure ML ausführen, haben wir zwei wesentliche Vorteile:

  • Wir können das Training auf beliebigen Rechenressourcen ausführen, die in der Regel leistungsfähiger sind als der lokale Computer. Azure ML kümmert sich außerdem darum, unser Skript mit allen Dateien aus dem aktuellen Verzeichnis in einen Docker-Container zu verpacken, die erforderlichen Abhängigkeiten zu installieren und es zur Ausführung zu senden.
  • Aufzeichnung der Ergebnisse in einem einheitlichen Register innerhalb des Azure ML-Arbeitsbereichs. Um diese Möglichkeit zu nutzen, müssen wir ein paar Codezeilen zu unserem Skript hinzufügen, um die resultierende Genauigkeit aufzuzeichnen:

from azureml.core.run import Run
...
try:    
    run = Run.get_submitted_run()
    run.log('accuracy', acc)
except:
    pass

Die entsprechende Version des Skripts heißt train_universal.py (es ist etwas raffinierter als oben beschrieben, aber nicht viel). Dieses Skript kann sowohl lokal als auch auf einer entfernten Rechenressource ausgeführt werden.

Um es in Azure ML aus VS Code zu starten, müssen Sie Folgendes tun:

  1. Stellen Sie sicher, dass die Azure-Erweiterung mit Ihrem Abonnement verbunden ist. Wählen Sie das Azure-Symbol im linken Menü aus. Wenn Sie nicht verbunden sind, wird in der unteren rechten Ecke eine Benachrichtigung angezeigt (so etwas), durch Klicken darauf können Sie sich über den Browser anmelden. Sie können auch drücken Ctrl-Shift-P um die Befehlszeile in VS Code aufzurufen und geben Sie ein Azure Sign In.

  2. Danach finden Sie im Azure-Bereich (links das Symbol) den Abschnitt MASCHINENLERNEN:

Wie man Angst überwindet und Azure Machine Learning zu nutzen beginnt
Hier sollten Sie verschiedene Gruppen von Objekten im Arbeitsbereich sehen: Rechenressourcen, Experimente usw.

  1. Gehen Sie zur Dateiliste, klicken Sie mit der rechten Maustaste auf das Skript train_universal.py und wählen Sie Azure ML: Als Experiment in Azure ausführen.

Wie man Angst überwindet und Azure Machine Learning zu nutzen beginnt

  1. Darauf folgt eine Reihe von Dialogen im VS Code-Terminal: Bestätigen Sie das verwendete Abonnement und den Azure ML-Arbeitsbereich und wählen Sie aus Neues Experiment erstellen:

Wie man Angst überwindet und Azure Machine Learning zu nutzen beginnt
Wie man Angst überwindet und Azure Machine Learning zu nutzen beginnt
Wie man Angst überwindet und Azure Machine Learning zu nutzen beginnt

  1. Wählen Sie die Erstellung einer neuen Rechenressource aus Neue Rechenressource erstellen:

    • Compute definiert die Rechenressource, auf der das Training stattfinden wird. Sie können einen lokalen Computer oder einen AmlCompute-Cluster in der Cloud wählen. Ich empfehle, einen skalierbaren Maschinencluster zu erstellen STANDARD_DS3_v2, mit einer minimalen Anzahl von Maschinen 0 (und maximal 1 oder mehr, je nach Ihren Anforderungen). Dies kann über die VS Code-Oberfläche oder im Voraus über ML Portal.

    Wie man Angst überwindet und Azure Machine Learning zu nutzen beginnt

  2. Anschließend müssen Sie die Konfiguration wählen Rechenkonfiguration, die die Parameter des für das Training erstellten Containers definiert, insbesondere alle erforderlichen Bibliotheken. In unserem Fall wählen wir, da wir Scikit Learn verwenden, SkLearn, und bestätigen dann einfach die vorgeschlagene Liste der Bibliotheken mit der Eingabetaste. Wenn Sie zusätzliche Bibliotheken verwenden, müssen Sie diese hier angeben.

    Wie man Angst überwindet und Azure Machine Learning zu nutzen beginnt
    Wie man Angst überwindet und Azure Machine Learning zu nutzen beginnt

  3. Danach öffnet sich ein Fenster mit einer JSON-Datei, die das Experiment beschreibt. Dort können einige Parameter geändert werden, z.B. der Name des Experiments. Klicken Sie danach auf den Link Experiment einreichen direkt innerhalb dieser Datei:

Wie man Angst überwindet und Azure Machine Learning zu nutzen beginnt

  1. Nach erfolgreicher Einreichung des Experiments über VS Code sehen Sie rechts im Benachrichtigungsbereich einen Link zu Azure ML Portal, wo Sie den Status und die Ergebnisse des Experiments verfolgen können.

Wie man Angst überwindet und Azure Machine Learning zu nutzen beginnt
Später können Sie es immer im Abschnitt Experimente Azure ML Portal, oder im Abschnitt Azure Machine Learning in der Liste der Experimente finden:

Wie man Angst überwindet und Azure Machine Learning zu nutzen beginnt

  1. Wenn Sie danach Änderungen am Code vorgenommen oder Parameter geändert haben, ist der erneute Start des Experiments viel schneller und einfacher. Klicken Sie mit der rechten Maustaste auf die Datei, werden Sie einen neuen Menüpunkt sehen Letzten Lauf wiederholen — wählen Sie ihn einfach aus, und das Experiment wird sofort gestartet:

Wie man Angst überwindet und Azure Machine Learning zu nutzen beginnt
Die Ergebnisse der Metriken aller Läufe finden Sie jederzeit im Azure ML Portal, es ist nicht notwendig, sie aufzuschreiben.

Jetzt wissen Sie, dass es einfach und schmerzlos ist, Experimente mit Azure ML auszuführen, und Sie dabei eine Reihe von angenehmen Vorteilen erhalten.

Sie konnten jedoch auch die Mängel bemerken. Zum Beispiel benötigte es wesentlich mehr Zeit, um das Skript auszuführen. Natürlich dauert es Zeit, das Skript in einen Container zu packen und auf dem Server bereitzustellen. Wenn der Cluster dabei auf 0 Knoten reduziert wurde, benötigt das Starten der virtuellen Maschine noch mehr Zeit, und dies wird besonders offensichtlich, wenn wir mit einfachen Aufgaben wie MNIST experimentieren, die in wenigen Sekunden gelöst werden. In der realen Welt, wo das Training Stunden, Tage oder sogar Wochen dauern kann, wird diese zusätzliche Zeit jedoch irrelevant, insbesondere im Angesicht der deutlich höheren Leistung, die ein Rechencluster bieten kann.

Was folgt jetzt?

Ich hoffe, dass Sie nach dem Lesen dieses Artikels Azure ML in Ihrer Arbeit nutzen können, um Skripte auszuführen, Rechenressourcen zu verwalten und Ergebnisse zentral zu speichern. Darüber hinaus kann Azure ML Ihnen noch mehr Vorteile bieten!

Innerhalb des Arbeitsbereichs können Sie Daten speichern und so ein zentrales Repository für alle Ihre Aufgaben schaffen, auf das Sie leicht zugreifen können. Außerdem können Sie Experimente nicht aus Visual Studio Code, sondern über die API ausführen – das kann besonders nützlich sein, wenn Sie Hyperparameter optimieren müssen und das Skript mehrfach mit unterschiedlichen Parametern ausführen möchten. Darüber hinaus ist in Azure ML eine spezielle Technologie integriert, Hyperdrive, die eine effizientere Suche und Optimierung von Hyperparametern ermöglicht. Über diese Möglichkeiten werde ich in meinem nächsten Beitrag sprechen.

Nützliche Ressourcen

Für eine detailliertere Auseinandersetzung mit Azure ML könnten die folgenden Microsoft Learn-Kurse für Sie von Nutzen sein:

Quelle: habr.com

60GB SSD 8Gb DDR4