Optimieren von Hyperparametern für Machine Learning-Modelle in Python

Blob Storage
Container Registry
Machine Learning
Storage
Data Science Virtual Machines

Diese Referenzarchitektur veranschaulicht bewährte Methoden für die Optimierung der Hyperparameter von Python-Modellen. Hyperparameter sind anpassbare Parameter, mit denen Sie den Modelltrainingsprozess steuern können. Mit Azure Machine Learning können Sie die Hyperparameteroptimierung automatisieren und parallel Experimente durchführen, um Hyperparameter effizient zu optimieren.

Zwei Szenarien werden in dieser Referenzarchitektur behandelt: Hyperparameteroptimierung von scikit-learn-Modellen und von Deep Learning-Modellen mit GPUs. Auf GitHub sind zwei Referenzimplementierungen für diese Architektur verfügbar – eine für das Training von scikit-learn-Modellen auf Azure-Modellen und eine für das Training von Deep Learning-Modellen auf Azure-Modellen.

Architecture diagram: tuning hyperparameters for Python models on Azure

Szenario: Abgleich von Stack Overflow FAQ

Hier wird der Abgleich von häufig gestellten Fragen (FAQs) behandelt. In diesem Szenario wird eine Teilmenge der Stack Overflow-Fragedaten verwendet, die die ursprünglichen Fragen (als JavaScript markiert), die zugehörigen doppelten Fragen und Antworten umfasst. Das Szenario dient zum Optimieren einer scikit-learn-Pipeline für die Vorhersage der Wahrscheinlichkeit, dass eine doppelte Frage einer der ursprünglichen Fragen entspricht.

Die Verarbeitung in diesem Szenario einer Azure Machine Learning-Pipeline umfasst die folgenden Schritte:

  1. Das Python-Trainingsskript wird an Azure Machine Learning übermittelt.

  2. Das Skript wird in Docker-Containern ausgeführt, die auf den einzelnen Knoten erstellt werden.

  3. Dieses Skript ruft Trainings- und Testdaten aus Azure Storage ab.

  4. Das Skript trainiert ein Modell anhand der Trainingsdaten, indem die entsprechende Kombination aus Trainingsparametern verwendet wird.

  5. Die Leistung des Modells wird anhand der Testdaten ermittelt und in Azure Storage geschrieben.

  6. Das Modell mit der besten Leistung wird bei Azure Machine Learning registriert.

Szenario: Fehlmengenerkennung

In diesem Szenario wird veranschaulicht, wie Sie ein Mask RCNN-Modell für die Objekterkennung optimieren, das als Webdienst bereitgestellt werden kann, um Vorhersagen für freie Plätze in Lagerregalen zu treffen. Bilder, die mit Produkten in einem Einzelhandelsgeschäft gefüllten Regalen ähneln, werden verwendet, um freie Plätze vorherzusagen, um nicht lieferbare Produkte zu erkennen, indem diese Vorhersagen potenziell mit anderen Informationsquellen wie Planogrammen und Datenbanken kombiniert werden. In diesem Szenario wird nur die Vorhersage freier Regalplätze behandelt. Das verwendete Dataset wird unter der CC-BY 4.0-Lizenz verteilt.

Die Verarbeitung dieses Szenarios umfasst folgende Schritte:

  1. Das Python-Trainingsskript wird an Azure Machine Learning übermittelt.

  2. Das Skript wird in Docker-Containern ausgeführt, die auf jedem Knoten erstellt werden, indem ein benutzerdefiniertes Bild abgerufen wird, das in Azure Container Registry gespeichert ist.

  3. Das Skript trainiert ein Modell anhand der Trainingsdaten, die in Azure Storage gespeichert wurden, indem die entsprechende Kombination aus Trainingsparametern verwendet wird.

  4. Die Leistung des Modells wird anhand der Testdaten ermittelt und in Azure Storage geschrieben.

  5. Das Modell mit der besten Leistung wird bei Azure Machine Learning registriert.

Weitere Überlegungen zum verteilten Trainieren von Deep Learning-Modellen mit GPUs finden Sie unter Verteiltes Trainieren von Deep Learning-Modellen in Azure.

Aufbau

Diese Architektur besteht aus mehreren Azure-Clouddiensten, die Ressourcen nach Bedarf skalieren. Im Anschluss werden die Dienste und ihre Rollen in dieser Lösung beschrieben.

Microsoft Data Science Virtual Machine (DSVM) ist ein VM-Image, das mit Tools für die Datenanalyse und für maschinelles Lernen konfiguriert ist. Es sind sowohl Windows Server- als auch Linux-Versionen verfügbar. In dieser Referenzimplementierung werden die Linux-Editionen von DSVM unter Ubuntu verwendet.

Azure Machine Learning dient zum Trainieren, Bereitstellen, Automatisieren und Verwalten von Machine Learning-Modellen in der Cloud. Der Dienst wird in dieser Architektur verwendet, um die Zuordnung und Verwendung der weiter unten beschriebenen Azure-Ressourcen zu verwalten.

Die Ressource Azure Machine Learning Compute wird verwendet, um Machine Learning- und KI-Modelle in Azure bedarfsabhängig zu trainieren und zu testen. Das Computeziel ist in diesem Szenario ein Cluster mit Knoten, die nach Bedarf auf der Grundlage einer automatischen Skalierungsoption zugeordnet werden. Jeder Knoten ist ein virtueller Computer, der einen Trainingsauftrag für bestimmte Hyperparameter ausführt.

Azure Container Registry speichert Images für alle Arten von Docker-Containerbereitstellungen. Diese Container werden auf jedem Knoten erstellt und zum Ausführen des Python-Trainingsskripts verwendet. Das im Machine Learning Compute-Cluster verwendete Image wird von Machine Learning in den Notebooks für die lokale Ausführung und die Hyperparameteroptimierung erstellt und anschließend an Container Registry gepusht.

Azure Blob Storage empfängt die vom Python-Trainingsskript verwendeten Trainings- und Testdatasets von Machine Learning. Storage wird als virtuelles Laufwerk auf jedem Knoten eines Machine Learning Compute-Clusters eingebunden.

Überlegungen zur Leistung

Die einzelnen Gruppen von Hyperparametern werden jeweils auf einem Knoten des Machine Learning-Computeziels ausgeführt. In Szenario 1 ist jeder Knoten ein virtueller Computer vom Typ „Standard D4 v2“, der über vier Kerne verfügt. Dieses Szenario verwendet einen LightGBM-Klassifizierer für Machine Learning, ein Gradient Boosting-Framework. Diese Software kann parallel auf allen vier Kernen ausgeführt werden und somit jede Ausführung um das bis zu Vierfache beschleunigen. Verglichen mit der Ausführung auf einem Machine Learning-Computeziel mit virtuellen Computern vom Typ „Standard D1 v2“, die jeweils nur über einen einzelnen Kern verfügen, lässt sich dadurch die Gesamtdauer der Hyperparameteroptimierung auf bis zu ein Viertel der Zeit verkürzen. In Szenario 2 ist jeder Knoten vom Typ „Standard NC6“ mit einer GPU, und jeder Hyperparameter-Optimierungslauf verwendet die einzelne GPU auf jedem Knoten.

Die maximale Anzahl von Machine Learning Compute-Knoten wirkt sich auf die Gesamtlaufzeit aus. Die empfohlene Mindestanzahl für die Knoten ist Null. Bei Verwendung dieser Einstellung beinhaltet die Zeit, die bis zum Start eines Auftrags vergeht, einige Minuten für die automatische Skalierung auf mindestens einen Knoten im Cluster. Wenn die Hyperparameteroptimierung allerdings nicht lange dauert, erhöht sich durch zentrales Hochskalieren des Auftrags der Mehraufwand. So kann es beispielsweise sein, dass ein Auftrag in unter fünf Minuten ausgeführt wird, das zentrale Hochskalieren auf einen Knoten jedoch weitere fünf Minuten dauert. In diesem Fall ist es schneller, das Minimum auf einen einzelnen Knoten festzulegen. Dadurch fallen allerdings höhere Kosten an.

Überlegungen zur Überwachung und Protokollierung

Übermitteln Sie eine HyperDrive-Laufzeitkonfiguration, um ein Ausführungsobjekt zur Überwachung des Ausführungsfortschritts zurückzugeben. Überwachen Sie den Fortschritt mit dem Jupyter-Widget „RunDetails“ oder über das Azure-Portal.

Jupyter-Widget „RunDetails“

Verwenden Sie das Ausführungsobjekt mit dem Jupyter-Widget „RunDetails“, um beim Hinzufügen zur Warteschlange sowie beim Ausführen der entsprechenden untergeordneten Aufträge bequem den Fortschritt überwachen zu können. Das Widget zeigt auch die in Echtzeit protokollierten Werte der primären Statistik an.

Azure-Portal

Geben Sie ein Ausführungsobjekt aus, um einen Link zur Seite der Ausführung im Azure-Portal anzuzeigen:

Run object used to display a link to the run information in Azure portal

Auf dieser Seite können Sie den Status der Ausführung und der dazugehörigen untergeordneten Ausführungen überwachen. Jede untergeordnete Ausführung verfügt über ein Treiberprotokoll mit der Ausgabe des ausgeführten Trainingsskripts.

Kostenbetrachtung

Die Kosten für die Ausführung einer Hyperparameteroptimierung hängen direkt davon ab, welche VM-Größe für Machine Learning Compute gewählt wurde, ob Knoten mit niedriger Priorität verwendet werden und wie viele Knoten im Cluster maximal zulässig sind.

Die laufenden Kosten während der Nichtverwendung des Clusters hängen davon ab, wie viele Knoten der Cluster mindestens benötigt. Bei der automatischen Skalierung von Clustern fügt das System automatisch Knoten zum Cluster hinzu (bis zur maximal zulässigen Anzahl) bis ihre Zahl mit der Auftragsanzahl übereinstimmt. Wenn Knoten nicht länger benötigt werden, können sie entsprechend entfernt werden (bis die angeforderte Mindestanzahl übrig ist). Falls der Cluster auf null Knoten herunterskaliert werden kann, fallen für den Cluster keinerlei Kosten an, wenn er nicht verwendet wird.

Weitere Informationen zu Azure Machine Learning und den damit verbundenen Kosten finden Sie unter Planen der Kostenverwaltung für Azure Machine Learning.

Sicherheitshinweise

Beschränken des Zugriffs auf Azure Blob Storage

In dieser Architektur werden Speicherkontoschlüssel für den Zugriff auf Blob Storage verwendet. Für noch mehr Kontrolle und Schutz sollten Sie stattdessen Shared Access Signatur (SAS) verwenden. Dadurch wird der Zugriff auf die gespeicherten Objekte eingeschränkt, ohne dass die Kontoschlüssel hartcodiert oder als Klartext gespeichert werden müssen. Mit SAS können Sie außerdem sicherstellen, dass das Speicherkonto über eine ordnungsgemäße Governance verfügt und der Zugriff nur ausgewählten Personen gewährt wird.

Stellen Sie in Szenarien mit sensibleren Daten sicher, dass alle Ihre Speicherschlüssel geschützt sind, weil diese Schlüssel den Vollzugriff auf alle Ein- und Ausgabedaten der Workload ermöglichen.

Verschlüsseln von ruhenden und übertragenen Daten

In Szenarien mit vertraulichen Daten müssen ruhende Daten (Daten im Speicher) verschlüsselt werden. Bei Datenübertragungen müssen die Daten mithilfe von Transport Layer Security (TLS) geschützt werden. Weitere Informationen finden Sie im Azure Storage-Sicherheitsleitfaden.

Schützen von Daten in einem virtuellen Netzwerk

Bei Produktionsbereitstellungen empfiehlt es sich ggf., den Cluster in einem Subnetz eines von Ihnen angegebenen virtuellen Netzwerks bereitzustellen. Über das Subnetz können die Computeknoten im Cluster sicher mit anderen virtuellen Computern oder mit einem lokalen Netzwerk kommunizieren. Sie können auch Dienstendpunkte mit Blob Storage verwenden, um den Zugriff über ein virtuelles Netzwerk zu ermöglichen, oder ein NFS mit einem einzelnen Knoten innerhalb des virtuellen Netzwerks mit Azure Machine Learning einsetzen.

Bereitstellung

Führen Sie die in den GitHub-Repositorys beschriebenen Schritte aus, um die Referenzimplementierung für diese Architektur bereitzustellen:

Nächste Schritte

Ähnliche Azure Architecture Center-Artikel:

Weitere Informationen über das Trainieren: