Freigeben über


Konfigurieren und Übermitteln von Trainingsaufträgen

GILT FÜR: Python SDK azureml v1

In diesem Artikel erfahren Sie, wie Sie Azure Machine Learning-Aufträge konfigurieren und übermitteln, um Ihre Modelle zu trainieren. Codeausschnitte erklären die wichtigsten Teile der Konfiguration und Übermittlung eines Trainingsskripts. Verwenden Sie dann eines der Beispielnotebooks, um die vollständigen End-to-End-Arbeitsbeispiele zu finden.

Beim Training ist es üblich, auf dem lokalen Computer zu starten und später auf einen cloudbasierten Cluster horizontal hochzuskalieren. Mit Azure Machine Learning können Sie Ihr Skript auf unterschiedlichen Computezielen ausführen, ohne das Trainingsskript zu ändern.

Sie müssen lediglich die Umgebung für jedes einzelne Computeziel in einer Skriptauftragskonfiguration definieren. Wenn Sie Ihr Trainingsexperiment auf einem anderen Computeziel ausführen möchten, geben Sie die Auftragskonfiguration für diese Computeressource an.

Voraussetzungen

Was ist eine Skriptlaufzeitkonfiguration?

Eine ScriptRunConfig wird zum Konfigurieren der Informationen verwendet, die zum Übermitteln eines Trainingsauftrags im Rahmen eines Experiments benötigt werden.

Sie übermitteln Ihr Trainingsexperiment mit einem ScriptRunConfig-Objekt. Dieses Objekt enthält Folgendes:

  • source_directory: Das Quellverzeichnis mit Ihrem Trainingsskript
  • script: Das Trainingsskript, das ausgeführt werden soll
  • compute_target: Das Computeziel für die Ausführung
  • environment: Die Umgebung für die Ausführung des Skripts
  • Und einige zusätzliche konfigurierbare Optionen. (Weitere Informationen finden Sie in der Referenzdokumentation.)

Trainieren Ihres Modells

Das Codemuster für die Übermittlung eines Trainingsauftrags ist für alle Arten von Computezielen gleich:

  1. Erstellen eines Experiments zum Ausführen
  2. Erstellen einer Umgebung zum Ausführen des Skripts
  3. Erstellen einer ScriptRunConfig-Datei, die das Computeziel und die Umgebung angibt
  4. Übermitteln des Auftrags
  5. Warten auf den Abschluss des Auftrags

Alternative:

Erstellen eines Experiments

Erstellen Sie ein Experiment in Ihrem Arbeitsbereich. Ein Experiment ist ein einfacher Container, mit dem Sie Auftragsübermittlungen organisieren und Code nachverfolgen können.

GILT FÜR: Python SDK azureml v1

from azureml.core import Experiment

experiment_name = 'my_experiment'
experiment = Experiment(workspace=ws, name=experiment_name)

Auswählen eines Computeziels

Wählen Sie das Computeziel aus, auf dem das Trainingsskript ausgeführt werden soll. Wenn in der ScriptRunConfig-Datei kein Computeziel angegeben ist oder compute_target='local' verwendet wird, führt Azure Machine Learning das Skript lokal aus.

Im Beispielcode in diesem Artikel wird davon ausgegangen, dass Sie bereits ein my_compute_target-Computeziel im Abschnitt „Voraussetzungen“ erstellt haben.

Hinweis

  • Azure Databricks wird nicht als Computeziel für das Modelltraining unterstützt. Sie können Azure Databricks für Datenvorbereitungs- und Bereitstellungsaufgaben verwenden.
  • Informationen zum Erstellen und Anfügen eines Computeziels für das Training auf einem Kubernetes-Cluster mit Azure Arc-Unterstützung finden Sie unter Konfigurieren des maschinellen Lernens mit Azure Arc-Unterstützung.

Erstellen einer Umgebung

Azure Machine Learning-Umgebungen sind eine Kapselung der Umgebung, in der Ihr Training für das maschinelle Lernen stattfindet. Sie geben die Python-Pakete, ein Docker-Image, Umgebungsvariablen und Softwareeinstellungen für die Trainings- und Bewertungsskripts an. Sie geben auch Laufzeiten an (Python, Spark oder Docker).

Sie können entweder Ihre eigene Umgebung definieren oder eine kuratierte Azure Machine Learning-Umgebung verwenden. Zusammengestellte Umgebungen sind vordefinierte Umgebungen, die standardmäßig in Ihrem Arbeitsbereich verfügbar sind. Diese Umgebungen werden durch zwischengespeicherte Docker-Images unterstützt, wodurch die Kosten für die Auftragsvorbereitung reduziert werden. Die vollständige Liste der verfügbaren zusammengestellten Umgebungen finden Sie unter Azure Machine Learning – zusammengestellte Umgebungen.

Für ein Remotecomputeziel können Sie zunächst eine dieser beliebten zusammengestellten Umgebungen verwenden:

GILT FÜR: Python SDK azureml v1

from azureml.core import Workspace, Environment

ws = Workspace.from_config()
myenv = Environment.get(workspace=ws, name="AzureML-Minimal")

Weitere Informationen und Details zu Umgebungen finden Sie unter Erstellen und Verwenden von Softwareumgebungen in Azure Machine Learning.

Lokales Computeziel

Wenn Ihr Computeziel Ihr lokaler Computer ist, sind Sie dafür verantwortlich, dass alle notwendigen Pakete in der Python-Umgebung, in der das Skript ausgeführt wird, verfügbar sind. Verwenden Sie python.user_managed_dependencies, um Ihre aktuelle Python-Umgebung (oder das Python in dem von Ihnen angegebenen Pfad) zu verwenden.

GILT FÜR: Python SDK azureml v1

from azureml.core import Environment

myenv = Environment("user-managed-env")
myenv.python.user_managed_dependencies = True

# You can choose a specific Python environment by pointing to a Python path 
# myenv.python.interpreter_path = '/home/johndoe/miniconda3/envs/myenv/bin/python'

Erstellen der Skriptauftragskonfiguration

Nachdem Sie nun über ein Computeziel (my_compute_target, siehe Voraussetzungen) und über eine Umgebung (myenv, siehe Erstellen einer Umgebung) verfügen, können Sie eine Skriptauftragskonfiguration erstellen, die Ihr Trainingsskript (train.py) im Verzeichnis project_folder ausführt:

GILT FÜR: Python SDK azureml v1

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory=project_folder,
                      script='train.py',
                      compute_target=my_compute_target,
                      environment=myenv)

Wenn Sie keine Umgebung angeben, wird eine Standardumgebung für Sie erstellt.

Wenn Sie Befehlszeilenargumente an das Trainingsskript übergeben möchten, können Sie diese über den arguments-Parameter des ScriptRunConfig-Konstruktors angeben (z. B. arguments=['--arg1', arg1_val, '--arg2', arg2_val]).

Wenn Sie die für den Auftrag maximal zulässige Standardzeit überschreiben möchten, können Sie dies über den max_run_duration_seconds-Parameter tun. Das System versucht, den Auftrag automatisch abzubrechen, wenn er länger dauert als dieser Wert angibt.

Festlegen einer Konfigurieren für verteilte Aufträge

Wenn Sie einen verteilten Trainingsauftrag ausführen möchten, geben Sie die für den verteilten Auftrag spezifische Konfiguration für den distributed_job_config-Parameter an. Zu den unterstützten Konfigurationstypen zählen MpiConfiguration, TensorflowConfiguration und PyTorchConfiguration.

Weitere Informationen und Beispiele zum Ausführen verteilter Horovod-, TensorFlow- und PyTorch-Aufträge finden Sie hier:

Übermitteln des Experiments

GILT FÜR: Python SDK azureml v1

run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)

Wichtig

Wenn Sie einen Trainingsauftrag übermitteln, wird eine Momentaufnahme des Verzeichnisses, das Ihre Trainingsskripts enthält, erstellt und an das Computeziel gesendet. Sie wird auch als Teil des Experiments in Ihrem Arbeitsbereich gespeichert. Wenn Sie Dateien ändern und den Auftrag erneut übermitteln, werden nur die geänderten Dateien hochgeladen.

Um zu verhindern, dass nicht benötigte Dateien in die Momentaufnahme eingeschlossen werden, erstellen Sie im Verzeichnis eine Ignore-Datei (.gitignore oder .amlignore). Fügen Sie dieser Datei die Dateien und Verzeichnisse hinzu, die ignoriert werden sollen. Weitere Informationen zur Syntax, die in dieser Datei zu verwenden ist, finden Sie unter Syntax und Muster für .gitignore. Die .amlignore-Datei verwendet die gleiche Syntax. Wenn beide Dateien vorhanden sind, wird die Datei .amlignore verwendet, und die Datei .gitignore wird nicht verwendet.

Weitere Informationen zu Momentaufnahmen finden Sie unter Momentaufnahmen.

Wichtig

Spezielle Ordner Zwei Ordner, outputs und logs, erhalten eine besondere Behandlung durch Azure Machine Learning. Wenn Sie während des Trainings Dateien in die Ordner outputs und logs schreiben, die zum Stammverzeichnis relativ sind (./outputs und ./logs), werden diese Dateien automatisch in Ihren Auftragsverlauf hochgeladen, damit Sie Zugriff darauf haben, wenn der Auftrag abgeschlossen ist.

Um während des Trainings Artefakte zu erstellen (z.B. Modelldateien, Prüfpunkte, Datendateien oder gezeichnete Bilder), schreiben Sie diese in den ./outputs-Ordner.

Auf ähnliche Weise können Sie alle Protokolle aus Ihrem Trainingsauftrag in den ./logs-Ordner schreiben. Um die TensorBoard-Integration in Azure Machine Learning zu nutzen, stellen Sie sicher, dass Sie Ihre TensorBoard-Protokolle in diesen Ordner schreiben. Während der Ausführung Ihres Auftrags können Sie TensorBoard starten und diese Protokolle streamen. Später können Sie auch die Protokolle aus Ihren vorherigen Aufträgen wiederherstellen.

So laden Sie beispielsweise eine Datei herunter, die nach Ihrem Remotetrainingsauftrag in den outputs-Ordner auf Ihrem lokalen Computer geschrieben wurde: run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')

Git-Nachverfolgung und -Integration

Wenn Sie einen Trainingsauftrag starten, bei dem das Quellverzeichnis ein lokales Git-Repository ist, werden Informationen über das Repository im Auftragsverlauf gespeichert. Weitere Informationen finden Sie unter Git-Integration für Azure Machine Learning.

Notebook-Beispiele

In diesen Notebooks finden Sie Beispiele für die Konfiguration von Aufträgen für verschiedene Trainingsszenarios:

Informationen zum Ausführen von Notebooks finden Sie im Artikel Verwenden von Jupyter-Notebooks zum Erkunden des Azure Machine Learning-Diensts.

Problembehandlung

  • AttributeError: Das 'RoundTripLoader'-Objekt verfügt nicht über das Attribut 'comment_handling': Dieser Fehler stammt aus der neuen Version (v0.17.5) von ruamel-yaml, einer Abhängigkeit von azureml-core, die einen Breaking Change für azureml-core einführt. Um diesen Fehler zu beheben, deinstallieren Sie ruamel-yaml, indem Sie pip uninstall ruamel-yaml ausführen und eine andere Version von ruamel-yaml installieren. Es werden die Versionen v0.15.35 bis v0.17.4 (einschließlich) unterstützt. Sie können dazu pip install "ruamel-yaml>=0.15.35,<0.17.5" ausführen.

  • Der Auftrag führt zum Fehler jwt.exceptions.DecodeError: Die genaue Fehlermeldung lautet: jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode().

    Sie sollten ein Upgrade auf die neueste Version von azureml-core in Erwägung ziehen: pip install -U azureml-core.

    If (Wenn). dieses Problem bei lokalen Aufträgen auftritt, überprüfen Sie die Version von PyJWT, die in Ihrer Umgebung installiert ist, in der Sie die Aufträge starten. Versionen von PyJWT < 2.0.0< werden unterstützt. Deinstallieren Sie PyJWT aus der Umgebung, wenn die Version >= 2.0.0 ist. Gehen Sie wie folgt vor, um die Version von PyJWT zu überprüfen und ggf. PyJWT zu deinstallieren und die richtige Version zu installieren:

    1. Starten Sie eine Befehlsshell, und aktivieren Sie die Conda-Umgebung, in der azureml-core installiert ist.
    2. Geben Sie pip freeze ein, und suchen Sie nach PyJWT. Die aufgelistete Version sollte < 2.0.0 sein.
    3. Wenn die aufgelistete Version keine unterstützte Version ist, geben Sie in der Befehlsshell pip uninstall PyJWT ein, und bestätigen Sie den Befehl mit „y“.
    4. Installation mithilfe von pip install 'PyJWT<2.0.0'

    If (Wenn). Sie eine benutzerseitig erstellte Umgebung mit Ihrem Auftrag übermitteln, sollten Sie die neueste Version von azureml-core in dieser Umgebung verwenden. >Versionen >= 1.18.0 von azureml-core verwenden bereits PyJWT < 2.0.0.< Wenn Sie eine Version von azureml-core << 1.18.0 in der von Ihnen übermittelten Umgebung verwenden müssen, stellen Sie sicher, dass Sie PyJWT < 2.0.0< in Ihren PIP-Abhängigkeiten angeben.

  • ModuleErrors (Kein Modul benannt): Wenn beim Übermitteln von Experimenten in Azure Machine Learning Modulfehler (ModuleErrors) auftreten, erwartet das Trainingsskript die Installation eines Pakets, aber es wird nicht hinzugefügt. Sobald Sie den Paketnamen angeben, installiert Azure Machine Learning das Paket in der für Ihren Trainingsauftrag verwendeten Umgebung.

    If (Wenn). Sie Estimators verwenden, um Experimente zu übermitteln, können Sie einen Paketnamen über den Parameter pip_packages oder conda_packages im Estimator auf der Grundlage angeben, aus welcher Quelle Sie das Paket installieren möchten. Sie können auch eine YML-Datei mit allen Ihren Abhängigkeiten mit conda_dependencies_file angeben oder alle Ihre pip-Anforderungen in einer TXT-Datei mit dem Parameter pip_requirements_file auflisten. Wenn Sie mit Ihrem eigenen Azure Machine Learning-Umgebungsobjekt arbeiten, mit dem das vom Schätzer verwendete Standardimage außer Kraft gesetzt werden soll, können Sie diese Umgebung über den environment-Parameter des Schätzerkonstruktors angeben.

    Von Azure Machine Learning verwaltete Docker-Images und deren Inhalte können in Azure Machine Learning-Containern angezeigt werden. Frameworkspezifische Abhängigkeiten sind in der jeweiligen Dokumentation des Frameworks aufgeführt:

    Hinweis

    Wenn Sie der Meinung sind, dass ein bestimmtes Paket gängig genug ist, um in von Azure Machine Learning verwalteten Images und Umgebungen hinzugefügt zu werden, erstellen Sie ein GitHub-Issue unter Azure Machine Learning-Container.

  • NameError (Name nicht definiert), AttributeError (Objekt besitzt kein Attribut) : Diese Ausnahme sollte von Ihren Trainingsskripts stammen. Sie können sich die Protokolldateien des Azure-Portals ansehen, um weitere Informationen über den nicht definierten Namen oder den Attributfehler zu erhalten. Aus dem SDK können Sie run.get_details() verwenden, um die Fehlermeldung anzuzeigen. Dadurch werden auch alle für Ihren Auftrag generierten Protokolldateien aufgelistet. Werfen Sie unbedingt einen Blick auf das Trainingsskript, und beheben Sie den Fehler, bevor Sie Ihren Auftrag erneut übermitteln.

  • Löschen von Aufträgen oder Experimenten: Experimente können mit der Methode Experiment.archive oder über die Registerkartenansicht „Experiment“ im Azure Machine Learning Studio-Client über die Schaltfläche „Experiment archivieren“ archiviert werden. Durch diese Aktion wird das Experiment aus Abfragelisten und Ansichten ausgeblendet, aber nicht gelöscht.

    Das endgültige Löschen einzelner Experimente oder Aufträge wird derzeit nicht unterstützt. Weitere Informationen zum Löschen von Arbeitsbereichsressourcen finden Sie unter Exportieren oder Löschen Ihrer Arbeitsbereichsdaten im Machine Learning-Dienst.

  • Metrikdokument ist zu groß: Azure Machine Learning weist interne Beschränkungen der Größe von Metrikobjekten auf, die gleichzeitig aus einem Trainingningsauftrag protokolliert werden können. Wenn bei der Protokollierung einer Metrik mit Listenwert der Fehler „Metrikdokument ist zu groß“ angezeigt wird, versuchen Sie, die Liste in kleinere Blöcke aufzuteilen, z. B.:

    run.log_list("my metric name", my_metric[:N])
    run.log_list("my metric name", my_metric[N:])
    

    Intern verkettet Azure Machine Learning die Blöcke mit demselben Metriknamen zu einer zusammenhängenden Liste.

  • Start des Computeziels dauert sehr lange: Die Docker-Images für Computeziele werden aus Azure Container Registry (ACR) geladen. Standardmäßig erstellt Azure Machine Learning eine ACR-Instanz mit der Dienstebene Basic. Wenn Sie die ACR-Instanz für Ihren Arbeitsbereich auf den Tarif „Standard“ oder „Premium“ umstellen, kann dies die Zeit zum Erstellen und Laden von Images verringern. Weitere Informationen finden Sie unter Azure Container Registry-Tarife.

Nächste Schritte