Trainieren eines Modells mithilfe eines benutzerdefinierten Docker-Images

GILT FÜR: Python SDK azureml v1

In diesem Artikel erfahren Sie, wie Sie ein benutzerdefiniertes Docker-Image zum Trainieren von Modellen mit Azure Machine Learning verwenden. Mit den Beispielskripts in diesem Artikel klassifizieren Sie Bilder von Haustieren durch Erstellen eines Convolutional Neural Network.

Azure Machine Learning bietet ein standardmäßig verwendetes Docker-Basisimage. Sie können jedoch auch Azure Machine Learning-Umgebungen verwenden, um ein anderes Basisimage anzugeben, z. B. eines der verwalteten Azure Machine Learning-Basisimages oder Ihr eigenes benutzerdefiniertes Image. Mit benutzerdefinierten Basisimages können Sie Abhängigkeiten umfassend verwalten und die Komponentenversionen beim Ausführen von Trainingsaufträgen genauer steuern.

Voraussetzungen

Führen Sie den Code in einer der folgenden Umgebungen aus:

Einrichten eines Trainingsexperiments

In diesem Abschnitt richten Sie Ihr Trainingsexperiment ein, indem Sie einen Arbeitsbereich initialisieren, Ihre Umgebung definieren und ein Computeziel konfigurieren.

Initialisieren eines Arbeitsbereichs

Der Azure Machine Learning-Arbeitsbereich ist die Ressource der obersten Ebene für den Dienst. Er stellt einen zentralen Ort für die Arbeit mit allen von Ihnen erstellten Artefakten dar. Im Python SDK können Sie auf die Arbeitsbereichsartefakte zugreifen, indem Sie ein Workspace-Objekt erstellen.

Erstellen Sie aus der Datei „config.json“, die Sie im Abschnitt Voraussetzungen erstellt haben, ein Workspace-Objekt.

from azureml.core import Workspace

ws = Workspace.from_config()

Definieren der Umgebung

Erstellen Sie ein Environment-Objekt.

from azureml.core import Environment

fastai_env = Environment("fastai2")

Das Basisimage im folgenden Code unterstützt die Bibliothek „fast.ai“, die Funktionen für verteiltes Deep Learning ermöglicht. Weitere Informationen finden Sie im Docker Hub-Repository für „fast.ai“.

Wenn Sie Ihr benutzerdefiniertes Docker-Image verwenden, ist Ihre Python-Umgebung möglicherweise bereits ordnungsgemäß eingerichtet. Legen Sie in diesem Fall das Flag user_managed_dependencies auf True fest, um die integrierte Python-Umgebung Ihres benutzerdefinierten Images zu verwenden. Standardmäßig erstellt Azure Machine Learning eine Conda-Umgebung mit den von Ihnen angegebenen Abhängigkeiten. Der Dienst führt das Skript in dieser Umgebung aus, statt die im Basisimage ggf. installierten Python-Bibliotheken zu verwenden.

fastai_env.docker.base_image = "fastdotai/fastai2:latest"
fastai_env.python.user_managed_dependencies = True

Verwenden einer privaten Containerregistrierung (optional)

Wenn Sie ein Image aus einer privaten Containerregistrierung verwenden möchten, die sich nicht in Ihrem Arbeitsbereich befindet, müssen Sie mit docker.base_image_registry die Adresse des Repositorys sowie einen Benutzernamen und ein Kennwort angeben:

# Set the container registry information.
fastai_env.docker.base_image_registry.address = "myregistry.azurecr.io"
fastai_env.docker.base_image_registry.username = "username"
fastai_env.docker.base_image_registry.password = "password"

Verwenden eines benutzerdefinierten Dockerfiles (optional)

Sie können auch ein benutzerdefiniertes Dockerfile verwenden. Verwenden Sie diesen Ansatz, wenn Sie Nicht-Python-Pakete als Abhängigkeiten installieren müssen. Denken Sie daran, das Basisimage auf None festzulegen.

# Specify Docker steps as a string. 
dockerfile = r"""
FROM mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210615.v1
RUN echo "Hello from custom container!"
"""

# Set the base image to None, because the image is defined by Dockerfile.
fastai_env.docker.base_image = None
fastai_env.docker.base_dockerfile = dockerfile

# Alternatively, load the string from a file.
fastai_env.docker.base_image = None
fastai_env.docker.base_dockerfile = "./Dockerfile"

Wichtig

Azure Machine Learning unterstützt nur Docker-Images, die die folgende Software enthalten:

  • Ubuntu 18.04 oder höher.
  • Conda 4.7.# oder höher.
  • Python 3.7 oder höher.
  • Eine unter „/bin/sh“ verfügbare POSIX-kompatible Shell ist in jedem Containerimage erforderlich, das für das Training verwendet wird.

Weitere Informationen zum Erstellen und Verwalten von Azure Machine Learning-Umgebungen finden Sie unter Erstellen und Verwenden von Softwareumgebungen in Azure Machine Learning.

Erstellen oder Anfügen eines Computeziels

Sie müssen zum Trainieren des Modells ein Computeziel erstellen. In diesem Tutorial erstellen Sie AmlCompute als Trainingscomputeressource.

Das Erstellen von AmlCompute dauert einige Minuten. Wenn sich die AmlCompute-Ressource bereits in Ihrem Arbeitsbereich befindet, überspringt der Code den Erstellungsprozess.

Wie bei anderen Azure-Diensten gelten für bestimmte Ressourcen (z. B. AmlCompute) in Verbindung mit Azure Machine Learning Service Grenzwerte. Weitere Informationen finden Sie unter Verwalten und Erhöhen der Kontingente für Ressourcen mit Azure Machine Learning.

from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException

# Choose a name for your cluster.
cluster_name = "gpu-cluster"

try:
    compute_target = ComputeTarget(workspace=ws, name=cluster_name)
    print('Found existing compute target.')
except ComputeTargetException:
    print('Creating a new compute target...')
    compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_NC6',
                                                           max_nodes=4)

    # Create the cluster.
    compute_target = ComputeTarget.create(ws, cluster_name, compute_config)

    compute_target.wait_for_completion(show_output=True)

# Use get_status() to get a detailed status for the current AmlCompute.
print(compute_target.get_status().serialize())

Wichtig

Verwenden Sie CPU-SKUs für jeden Imagebuild auf der Computeressource.

Konfigurieren Ihres Trainingsauftrags

Verwenden Sie für dieses Tutorial das auf GitHub verfügbare Trainingsskript train.py. In der Praxis können Sie jedes benutzerdefinierte Trainingsskript verwenden und so, wie es ist, mit Azure Machine Learning ausführen.

Erstellen Sie eine ScriptRunConfig-Ressource, um den Auftrag für die Ausführung auf dem gewünschten Computeziel zu konfigurieren.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory='fastai-example',
                      script='train.py',
                      compute_target=compute_target,
                      environment=fastai_env)

Übermitteln Ihres Trainingsauftrags

Wenn Sie eine Trainingsausführung mithilfe eines ScriptRunConfig-Objekts übermitteln, gibt die submit-Methode ein Objekt vom Typ ScriptRun zurück. Das zurückgegebene ScriptRun-Objekt ermöglicht den programmgesteuerten Zugriff auf Informationen zur Trainingsausführung.

from azureml.core import Experiment

run = Experiment(ws,'Tutorial-fastai').submit(src)
run.wait_for_completion(show_output=True)

Warnung

Zum Ausführen von Trainingsskripts wird von Azure Machine Learning das gesamte Quellverzeichnis kopiert. Sind vertrauliche Daten vorhanden, die nicht hochgeladen werden sollen, verwenden Sie für diese eine IGNORE-Datei, oder legen Sie sie nicht im Quellverzeichnis ab. Greifen Sie stattdessen über einen Datenspeicher auf Ihre Daten zu.

Nächste Schritte

In diesem Artikel haben Sie ein Modell mit einem benutzerdefinierten Docker-Image trainiert. Weitere Informationen zu Azure Machine Learning finden Sie in den folgenden Artikeln: