Erstellen und Verwenden von benutzerdefinierten Umgebungen

Abgeschlossen

Wenn Sie selbst eine Umgebung in Azure Machine Learning erstellen müssen, um alle erforderlichen Pakete, Bibliotheken und Abhängigkeiten zum Ausführen Ihrer Skripts auflisten zu können, können Sie benutzerdefinierte Umgebungen erstellen.

Sie können eine Umgebung auf der Grundlage eines Docker-Images, eines Docker-Buildkontexts und einer Conda-Spezifikation mit Docker-Image definieren.

Erstellen einer benutzerdefinierten Umgebung aus einem Docker-Image

Der einfachste Ansatz ist wahrscheinlich, eine Umgebung aus einem Docker-Image zu erstellen. Docker-Images können in einer öffentlichen Registrierung wie Docker Hub gehostet oder privat in einer Azure Container Registry-Instanz gespeichert werden.

Viele Open-Source-Frameworks sind in öffentlichen Images gekapselt, die auf Docker Hub zu finden sind. Beispielsweise finden Sie dort ein öffentliches Docker-Image, das alle erforderlichen Pakete zum Trainieren eines Deep-Learning-Modells mit PyTorch enthält.

Zum Erstellen einer Umgebung aus einem Docker-Image können Sie das Python SDK verwenden:

from azure.ai.ml.entities import Environment

env_docker_image = Environment(
    image="pytorch/pytorch:latest",
    name="public-docker-image-example",
    description="Environment created from a public Docker image.",
)
ml_client.environments.create_or_update(env_docker_image)

Sie können auch die Azure Machine Learning-Basisimages (die den von kuratierten Umgebungen verwendeten Images ähneln) verwenden, um eine Umgebung zu erstellen:

from azure.ai.ml.entities import Environment

env_docker_image = Environment(
    image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
    name="aml-docker-image-example",
    description="Environment created from a Azure ML Docker image.",
)
ml_client.environments.create_or_update(env_docker_image)

Erstellen einer benutzerdefinierten Umgebung mit einer Conda-Spezifikationsdatei

Obwohl Docker-Images alle erforderlichen Pakete für die Arbeit mit einem bestimmten Framework enthalten, müssen Sie möglicherweise andere Pakete einschließen, um Ihren Code auszuführen.

Beispielsweise können Sie ein Modell mit PyTorch trainieren und es mit MLflow nachverfolgen.

Wenn Sie andere Pakete oder Bibliotheken in Ihre Umgebung einschließen müssen, können Sie beim Erstellen der Umgebung eine Conda-Spezifikationsdatei zu einem Docker-Image hinzufügen.

Eine Conda-Spezifikationsdatei ist eine YAML-Datei, die die Pakete auflistet, die mithilfe von conda oder pip installiert werden müssen. Eine solche YAML-Datei kann wie folgt aussehen:

name: basic-env-cpu
channels:
  - conda-forge
dependencies:
  - python=3.7
  - scikit-learn
  - pandas
  - numpy
  - matplotlib

Tipp

Informationen zum Standardformat für Conda-Dateien finden Sie in der Conda-Dokumentation zum manuellen Erstellen einer Umgebung.

Um eine Umgebung aus einem Docker-Basisimage und einer Conda-Spezifikationsdatei zu erstellen, können Sie den folgenden Code verwenden:

from azure.ai.ml.entities import Environment

env_docker_conda = Environment(
    image="mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04",
    conda_file="./conda-env.yml",
    name="docker-image-plus-conda-example",
    description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env_docker_conda)

Hinweis

Da allen kuratierten Umgebungen das Präfix AzureML vorangestellt ist, können Sie keine Umgebung mit diesem Präfix erstellen.

Verwenden einer Umgebung

Am häufigsten verwenden Sie Umgebungen, wenn Sie ein Skript als Auftrag (Befehl) ausführen möchten.

Um anzugeben, in welcher Umgebung Ihr Skript ausgeführt werden soll, referenzieren Sie eine Umgebung mithilfe der Syntax <curated-environment-name>:<version> oder <curated-environment-name>@latest.

Der folgende Code zeigt beispielsweise, wie Sie einen Befehlsauftrag mit dem Python SDK konfigurieren, bei dem eine kuratierte Umgebung mit scikit-learn verwendet wird:

from azure.ai.ml import command

# configure job
job = command(
    code="./src",
    command="python train.py",
    environment="docker-image-plus-conda-example:1",
    compute="aml-cluster",
    display_name="train-custom-env",
    experiment_name="train-custom-env"
)

# submit job
returned_job = ml_client.create_or_update(job)

Wenn Sie den Auftrag übermitteln, wird die Umgebung erstellt. Wenn Sie eine Umgebung zum ersten Mal verwenden, kann die Erstellung 10 bis 15 Minuten dauern. Sie können sich die Protokolle der Umgebungserstellung in den Protokollen des Auftrags ansehen.

Wenn Azure Machine Learning eine neue Umgebung erstellt, wird sie der Liste der benutzerdefinierten Umgebungen im Arbeitsbereich hinzugefügt. Das Image der Umgebung wird in der Azure Container Registry-Instanz gehostet, die dem Arbeitsbereich zugeordnet ist. Wenn Sie dieselbe Umgebung für einen anderen Auftrag (und ein anderes Skript) verwenden, ist sie direkt einsatzbereit und muss nicht erneut erstellt werden.