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
- Wenn Sie nicht über ein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen. Probieren Sie die kostenlose oder kostenpflichtige Version von Azure Machine Learning noch heute aus.
- Das Azure Machine Learning SDK für Python (v1) (>= 1.13.0)
- Ein Azure Machine Learning-Arbeitsbereich,
ws
- Ein Computeziel,
my_compute_target
Erstellen eines Computeziels
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:
- Erstellen eines Experiments zum Ausführen
- Erstellen einer Umgebung zum Ausführen des Skripts
- Erstellen einer ScriptRunConfig-Datei, die das Computeziel und die Umgebung angibt
- Übermitteln des Auftrags
- Warten auf den Abschluss des Auftrags
Alternative:
- Übermitteln Sie eine HyperDrive-Ausführung für die Hyperparameteroptimierung.
- Übermitteln Sie ein Experiment über die VS Code-Erweiterung.
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:
- Training auf verschiedenen Computezielen
- Training mit ML-Frameworks
- tutorials/img-classification-part1-training.ipynb
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 vonazureml-core
, die einen Breaking Change fürazureml-core
einführt. Um diesen Fehler zu beheben, deinstallieren Sieruamel-yaml
, indem Siepip uninstall ruamel-yaml
ausführen und eine andere Version vonruamel-yaml
installieren. Es werden die Versionen v0.15.35 bis v0.17.4 (einschließlich) unterstützt. Sie können dazupip 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:
- Starten Sie eine Befehlsshell, und aktivieren Sie die Conda-Umgebung, in der azureml-core installiert ist.
- Geben Sie
pip freeze
ein, und suchen Sie nachPyJWT
. Die aufgelistete Version sollte < 2.0.0 sein. - 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“. - 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
oderconda_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 mitconda_dependencies_file
angeben oder alle Ihre pip-Anforderungen in einer TXT-Datei mit dem Parameterpip_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 denenvironment
-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
- Tutorial: Trainieren und Bereitstellen eines Modells verwendet ein verwaltetes Computeziel zum Trainieren eines Modells.
- Erfahren Sie, wie Modelle mit spezifischen ML-Frameworks wie Scikit-learn, TensorFlow und PyTorch trainiert werden können.
- Erfahren Sie, wie Hyperparameter optimiert werden, um bessere Modelle zu erstellen.
- Erfahren Sie nach der Erstellung eines trainierten Modells, wie und wo Modelle bereitgestellt werden.
- Zeigen Sie die SDK-Referenz der ScriptRunConfig-Klasse an.
- Verwenden von Azure Machine Learning mit virtuellen Azure-Netzwerken