Was sind Azure Machine Learning-Umgebungen?
Azure Machine Learning-Umgebungen sind eine Kapselung der Umgebung, in der Ihr Training für das maschinelle Lernen oder der Rückschluss stattfinden. Sie geben die Python-Pakete und die Softwareeinstellungen für Ihre Trainings- und Bewertungsskripts an. Die Umgebungen sind verwaltete und versionsverwaltete Entitäten innerhalb Ihres Machine Learning-Arbeitsbereichs, die reproduzierbare, überprüfbare und portierbare Machine Learning-Workflows über verschiedene Computeziele hinweg ermöglichen. Sie können ein Environment
-Objekt für folgende Zwecke verwenden:
- Entwickeln Sie Ihr Trainingsskript.
- Verwenden Sie dieselbe Umgebung in Azure Machine Learning Compute für das skalierte Modelltraining wieder.
- Stellen Sie Ihr Modell in derselben Umgebung bereit.
- Überprüfen Sie die Umgebung, in der ein bestehendes Modell trainiert wurde.
Das folgende Diagramm veranschaulicht, wie Sie ein einzelnes Environment
-Objekt sowohl in Ihrer Auftragskonfiguration (für Trainingszwecke) als auch in Ihrer Rückschluss- und Bereitstellungskonfiguration (für Webdienstbereitstellungen) verwenden können.
Die Umgebung, das Computeziel und das Trainingsskript bilden zusammen die Auftragskonfiguration: die vollständige Spezifikation eines Trainingsauftrags.
Typen von Umgebungen
Umgebungen lassen sich weitgehend in drei Kategorien unterteilen: zusammengestellt, benutzerverwaltet und systemverwaltet.
Zusammengestellte Umgebungen werden von Azure Machine Learning bereitgestellt und sind standardmäßig in Ihrem Arbeitsbereich verfügbar. Sie sind zur sofortigen Verwendung gedacht und enthalten Sammlungen von Python-Paketen und -Einstellungen, die Ihnen den Einstieg in die verschiedenen Machine Learning-Frameworks erleichtern sollen. Diese vorab erstellten Umgebungen ermöglichen auch eine schnellere Bereitstellung. Kuratierte Umgebungen werden in der AzureML-Registrierung gehostet, einer Machine Learning-Registrierung, die von Microsoft gehostet wird. Eine vollständige Liste finden Sie unter Umgebungen in der AzureML-Registrierung.
In benutzerverwalteten Umgebungen sind Sie für die Einrichtung Ihrer Umgebung und die Installation aller Pakete, die Ihr Trainingsskript auf dem Computeziel benötigt, verantwortlich. Stellen Sie außerdem sicher, dass Sie alle Abhängigkeiten einschließen, die für die Modellbereitstellung erforderlich sind. Die vom Benutzer verwaltete Umgebung kann BYOC-basiert (Bring Your Own Container) sein oder auf dem Docker-Buildkontext basieren, der die Imagematerialisierung an Azure Machine Learning delegiert. Ähnlich wie kuratierte Umgebungen können Sie vom Benutzer verwaltete Umgebungen über Arbeitsbereiche hinweg freigeben, indem Sie eine Machine Learning-Registrierung verwenden, die Sie erstellen und verwalten.
Sie verwenden systemverwaltete Umgebungen, wenn Sie möchten, dass Conda die Python-Umgebung für Sie verwalten soll. Eine neue Conda-Umgebung wird aus Ihrer Conda-Spezifikation auf Grundlage eines Docker-Basisimages materialisiert.
Erstellen und Verwalten von Umgebungen
Sie können Umgebungen mit dem Python SDK für Azure Machine Learning, der Azure Machine Learning-CLI (Command Line Interface, Befehlszeilenschnittstelle), Azure Machine Learning Studio und der VS Code-Erweiterung erstellen. Mit jedem Client können Sie das Basisimage, die Dockerfile-Ebene und die Python-Ebene bei Bedarf anpassen.
Bestimmte Codebeispiele finden Sie im Abschnitt „Erstellen einer Umgebung“ unter Verwenden von Umgebungen.
Umgebungen können auch problemlos über Ihren Arbeitsbereich verwaltet werden. So können Sie Folgendes tun:
- Registrieren von Umgebungen
- Abrufen von Umgebungen aus Ihrem Arbeitsbereich, die für das Training oder die Bereitstellung verwendet werden sollen
- Erstellen einer neuen Instanz einer Umgebung, indem Sie eine vorhandene bearbeiten
- Betrachten von Änderungen an Ihren Umgebungen im Laufe der Zeit, was die Reproduzierbarkeit sicherstellt
- Automatisches Erstellen von Docker-Images aus Ihren Umgebungen
„Anonyme“ Umgebungen werden beim Übermitteln eines Experiments automatisch bei Ihrem Arbeitsbereich registriert. Sie sind nicht aufgelistet, können aber anhand der Version abgerufen werden.
Codebeispiele finden Sie im Abschnitt „Verwalten von Umgebungen“ unter Verwenden von Umgebungen.
Erstellen, Zwischenspeichern und Wiederverwenden von Umgebungen
Azure Machine Learning erstellt Umgebungsdefinitionen für Docker-Images. Außerdem werden die Umgebungen zwischengespeichert, sodass sie bei späteren Trainingsaufträgen und Bereitstellungen von Dienstendpunkten wiederverwendet werden können. Die Remoteausführung eines Trainingsskripts erfordert die Erstellung eines Docker-Images. Standardmäßig verwaltet Azure Machine Learning das Ziel für die Imageerstellung mit dem verfügbaren Kontingent für serverloses Computing des Arbeitsbereichs, wenn für den Arbeitsbereich keine dedizierte Computeressource festgelegt ist.
Hinweis
Netzwerkeinschränkungen im Azure Machine Learning-Arbeitsbereich können ein dediziertes vom Benutzer verwaltetes Computesetup für die Imageerstellung erfordern. Führen Sie die Schritte aus, um Arbeitsbereichressourcen zu sichern.
Übermitteln eines Auftrags mithilfe einer Umgebung
Wenn Sie einen Remoteauftrag zuerst mithilfe einer Umgebung übermitteln oder eine Umgebungsinstanz manuell erstellen, erstellt Azure Machine Learning ein Image für die bereitgestellte Spezifikation. Das Ergebnisbild wird in der Containerregistrierungsinstanz zwischengespeichert, die dem Arbeitsbereich zugeordnet ist. Kuratierte Umgebungen werden bereits in der Azure Machine Learning-Registrierung zwischengespeichert. Zu Beginn der Auftragsausführung ruft das Computeziel das Image aus der relevanten Containerregistrierung ab.
Erstellen von Umgebungen als Docker-Images
Wenn das Image für eine bestimmte Umgebungsdefinition noch nicht in der Containerregistrierungsinstanz vorhanden ist, die dem Azure Machine Learning-Arbeitsbereich zugeordnet ist, wird ein neues Image erstellt. Für vom System verwaltete Umgebungen besteht der Imagebuild aus zwei Schritten:
- Herunterladen eines Basisimages und Ausführen beliebiger Docker-Schritte
- Erstellen einer Conda-Umgebung gemäß den in der Umgebungsdefinition angegebenen Conda-Abhängigkeiten.
Für vom Benutzer verwaltete Umgebungen wird der Docker-Kontext ohne Änderungen erstellt. In diesem Fall sind Sie für die Installation von Python-Paketen verantwortlich, indem Sie diese in Ihr Basisimage einbeziehen oder benutzerdefinierte Docker-Schritte festlegen.
Zwischenspeicherung und Wiederverwendung von Images
Wenn Sie dieselbe Umgebungsdefinition für einen weiteren Auftrag verwenden, verwendet Azure Machine Learning das zwischengespeicherte Image aus der Containerregistrierung, die Ihrem Arbeitsbereich zugeordnet ist.
Um die Details eines zwischengespeicherten Images anzuzeigen, besuchen Sie die Seite „Umgebungen“ in Azure Machine Learning Studio, oder verwenden Sie MLClient.environments
zum Abrufen und Überprüfen der Umgebung.
Um zu bestimmen, ob ein zwischengespeichertes Image wiederverwendet oder ein neues Image erstellt werden soll, berechnet Azure Machine Learning einen Hashwert aus der Umgebungsdefinition. Anschließend wird der Hash mit den Hashes vorhandener Umgebungen verglichen. Der Hash dient als eindeutiger Bezeichner für eine Umgebung und basiert auf den Umgebungsdefinitionen:
- Base image
- Benutzerdefinierte Docker-Schritte
- Python-Pakete
Der Name und die Version der Umgebung haben keine Auswirkungen auf den Hash. Wenn Sie Ihre Umgebung umbenennen oder eine neue Umgebung mit den gleichen Einstellungen und Paketen wie eine andere Umgebung erstellen, bleibt der Hashwert unverändert. Änderungen der Umgebungsdefinition, z. B. das Hinzufügen oder Entfernen eines Python-Pakets oder die Änderung der Paketversion, ändern jedoch den entstehenden Hashwert. Wenn die Reihenfolge von Abhängigkeiten oder Kanälen in einer Umgebung geändert wird, ändert sich der Hash, und es muss ein neues Image erstellt werden. Ebenso führt jede Änderung an einer zusammengestellten Umgebung zur Erstellung einer benutzerdefinierten Umgebung.
Hinweis
Sie können keine lokalen Änderungen an eine zusammengestellte Umgebung übermitteln, ohne den Namen der Umgebung zu ändern. Die Präfixe „AzureML-“ und „Microsoft“ sind ausschließlich für zusammengestellte Umgebungen reserviert, und Ihre Auftragsübermittlung schlägt fehl, wenn der Name mit einem der beiden beginnt.
Der berechnete Hashwert der Umgebung wird mit den Hashes in der Containerregistrierung für den Arbeitsbereich verglichen. Wenn es eine Übereinstimmung gibt, wird das zwischengespeicherte Image gepullt und verwendet, andernfalls wird eine Imageerstellung ausgelöst.
Das folgende Diagramm zeigt drei Umgebungsdefinitionen. Zwei davon haben unterschiedliche Namen und Versionen, aber identische Basisimages und Python-Pakete, was zu demselben Hash und dem entsprechenden zwischengespeicherten Image führt. Die dritte Umgebung weist verschiedene Python-Pakete und -Versionen auf und führt daher zu einem anderen Hash und zwischengespeicherten Image.
Tatsächliche zwischengespeicherte Images in Ihrer Containerregistrierung für den Arbeitsbereich haben Namen wie azureml/azureml_e9607b2514b066c851012848913ba19f
mit dem Hash, der am Ende angezeigt wird.
Wichtig
Wenn Sie eine Umgebung mit einer getrennten Paketabhängigkeit erstellen – z. B.
numpy
–, verwendet die Umgebung die Paketversion, die beim Erstellen der Umgebung verfügbar war. Jede zukünftige Umgebung, die eine entsprechende Definition verwendet, nutzt die ursprüngliche Version.Geben Sie zum Aktualisieren des Pakets eine Versionsnummer an, um eine Neuerstellung des Images zu erzwingen. Ein Beispiel dafür ist die Änderung von
numpy
zunumpy==1.18.1
. Neue Abhängigkeiten, einschließlich geschachtelter Abhängigkeiten, werden installiert, und können ein zuvor funktionierendes Szenario unterbrechen.Wenn Sie ein getrenntes Basisimage wie
mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04
in Ihrer Umgebungsdefinition verwenden, kann das dazu führen, dass das Image bei jeder Aktualisierung deslatest
-Tags neu erstellt wird. Dadurch erhält das Image die neuesten Patches und Systemupdates.
Patchen von Images
Microsoft ist für das Patchen der Basisimages für bekannte Sicherheitsrisiken verantwortlich. Updates für unterstützte Images werden alle zwei Wochen veröffentlicht, wobei in der jeweils neuesten Version des Images keine nicht gepatchten Sicherheitsrisiken enthalten sind, die älter als 30 Tage sind. Gepatchte Images werden mit einem neuen unveränderlichen Tag veröffentlicht, und das :latest
-Tag wird auf die neueste Version des gepatchten Images aktualisiert.
Sie müssen die zugeordneten Azure Machine Learning-Ressourcen aktualisieren, um das neu gepatchte Image zu verwenden. Wenn Sie beispielsweise mit einem verwalteten Onlineendpunkt arbeiten, müssen Sie Ihren Endpunkt erneut bereitstellen, um das gepatchte Image zu verwenden.
Wenn Sie Ihre eigenen Images bereitstellen, sind Sie für deren Aktualisierung und die Aktualisierung der Azure Machine Learning-Ressourcen verantwortlich, von denen sie verwendet werden.
Weitere Informationen zu den Basisimages finden Sie unter den folgenden Links:
- Azure Machine Learning Basisimages GitHub Repository
- Verwenden eines benutzerdefinierten Containers zum Bereitstellen eines Modells in einem Onlineendpunkt
- Verwalten von Umgebungen und Containerimages
Zugehöriger Inhalt
- Erfahren Sie, wie Sie Umgebungen in Azure Machine Learning erstellen und verwenden.
- Die Umgebungsklasse finden Sie in der Referenzdokumentation des Python SDK.