Was sind Azure Machine Learning-Umgebungen?

Azure Machine Learning-Umgebungen sind eine Kapselung der Umgebung, in der Ihr Training für das maschinelle Lernen stattfindet. 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.

Diagram of an environment in machine learning workflow

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. 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- (Bring Your Own Container) oder Docker Build Context-basiert sein, der die Imagematerialisierung an AzureML delegiert.

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 aus Clients wie dem Azure Machine Learning Python SDK, der Azure Machine Learning CLI, der Seite „Umgebungen“ in Azure Machine Learning Studio sowie einer 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 werden nicht aufgeführt, können aber nach 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 AzureML das Ziel für die Imageerstellung auf dem verfügbaren Serverless Computing-Kontingent für den Arbeitsbereich, wenn für den Arbeitsbereich keine dedizierte Compute-Menge festgelegt wurde.

Hinweis

Für alle Netzwerkeinschränkungen im AzureML-Arbeitsbereich ist möglicherweise ein dedizierter vom Benutzer verwaltetes Imagebuild-Computesetup erforderlich. 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 AzureML-Registrierung zwischengespeichert. Zu Beginn des Auftrags wird das Image vom Computeziel von der relevanten Containerregistrierung abgerufen.

Erstellen von Umgebungen als Docker-Images

Wenn das Image für eine bestimmte Umgebungsdefinition noch nicht in der Containerregistrierungsinstanz vorhanden ist, die AzureML Workspace zugeordnet ist, wird ein neues Image erstellt. Für vom System verwaltete Umgebungen besteht der Imagebuild aus zwei Schritten:

  1. Herunterladen eines Basisimages und Ausführen beliebiger Docker-Schritte
  2. 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 und vergleicht ihn mit den Hashwerten vorhandener Umgebungen. Der Hash dient als eindeutiger Bezeichner für eine Umgebung und basiert auf den Umgebungsdefinitionen:

  • Base image
  • Benutzerdefinierte Docker-Schritte
  • Python-Pakete

Der Hashwert wird vom Umgebungsnamen oder der Version nicht beeinflusst. 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. Das Ändern der Reihenfolge von Abhängigkeiten oder Kanälen in einer Umgebung ändert auch den Hash und erfordert einen neuen Imagebuild. 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 denen in der Arbeitsbereichscontainerregistrierung 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.

Diagram of environment caching and Docker images

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 zu numpy==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 des latest-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:

Nächste Schritte