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:
- Azure Machine Learning-Compute-Instanz (weder Download noch Installation erforderlich):
- Führen Sie das Tutorial Erstellen von Ressourcen für die ersten Schritte durch, um einen dedizierten Notebookserver zu erstellen, auf dem das SDK und das Beispielrepository vorinstalliert sind.
- Auf Ihrem eigenen Jupyter Notebook-Server:
- Erstellen Sie eine Konfigurationsdatei für den Arbeitsbereich.
- Installieren Sie das Azure Machine Learning SDK.
- Erstellen Sie eine Azure Container Registry-Instanz oder eine andere Docker-Registrierung, auf die über das Internet zugegriffen werden kann.
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:
- Erfassen von Ausführungsmetriken während des Trainings
- Bereitstellen eines Modells mithilfe eines benutzerdefinierten Docker-Images