Ausführungsverlauf starten, überwachen und verfolgen
GILT FÜR: Python SDK azureml v1
GILT FÜR: Azure CLI-ML-Erweiterung v1
Das Azure Machine Learning SDK für Python v1 und die Machine Learning-CLI bieten verschiedene Methoden zum Überwachen, Organisieren und Nachverfolgen Ihrer Ausführungen für Training und Experimentieren. Ihr ML-Ausführungsverlauf ist ein wichtiger Bestandteil eines erklärbaren und wiederholbaren ML-Entwicklungsprozesses.
Tipp
Informationen zur Verwendung von Studio finden Sie unter Nachverfolgen, Überwachen und Analysieren von Ausführungen mit Studio.
Wenn Sie Azure Machine Learning SDK v2 verwenden, lesen Sie die folgenden Artikel:
In diesem Artikel wird gezeigt, wie Sie die folgenden Aufgaben ausführen:
- Überwachen der Ausführungsleistung
- Markieren und Suchen von Ausführungen
- Führen Sie die Suche über Ihren Ausführungsverlauf aus.
- Abbrechen oder Fehler von Ausführungen
- Erstellen untergeordneter Ausführungen
- Überwachen des Ausführungsstatus per E-Mail-Benachrichtigung
Tipp
Informationen zur Überwachung des Azure Machine Learning-Diensts und der zugehörigen Azure-Dienste finden Sie unter Überwachen von Azure Machine Learning. Informationen zur Überwachung von Modellen, die als Webdienste bereitgestellt werden, finden Sie unter Sammeln von Daten von Modellen in der Produktion sowie unter Überwachen und Erfassen von Daten von ML-Webdienst-Endpunkten.
Voraussetzungen
Sie benötige folgende Elemente:
Ein Azure-Abonnement. 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 (Version 1.0.21 oder höher). Wie Sie die neueste Version des SDK installieren oder auf diese aktualisieren, erfahren Sie unter Installieren des Azure Machine Learning SDK für Python.
Um Ihre Version des Azure Machine Learning SDK zu überprüfen, verwenden Sie den folgenden Code:
print(azureml.core.VERSION)
Die Azure CLI und die CLI-Erweiterung für Azure Machine Learning.
Wichtig
Einige Azure CLI-Befehle in diesem Artikel verwenden die Erweiterung
azure-cli-ml
oder v1 für Azure Machine Learning. Der Support für die v1-Erweiterung endet am 30. September 2025. Sie können die v1-Erweiterung bis zu diesem Datum installieren und verwenden.Es wird empfohlen, vor dem 30. September 2025 zur
ml
- oder v2-Erweiterung zu wechseln. Weitere Informationen zur v2-Erweiterung finden Sie unter Was sind die Azure Machine Learning CLI und das Python SDK v2?.
Überwachen der Ausführungsleistung
Starten einer Ausführung und deren Protokollierungsprozess
GILT FÜR: Python SDK azureml v1
Richten Sie Ihr Experiment durch Importieren der Klassen Workspace, Experiment, Run und ScriptRunConfig aus dem azureml.core-Paket ein.
import azureml.core from azureml.core import Workspace, Experiment, Run from azureml.core import ScriptRunConfig ws = Workspace.from_config() exp = Experiment(workspace=ws, name="explore-runs")
Starten Sie eine Ausführung und ihren Protokollierungsprozess mit der
start_logging()
-Methode.notebook_run = exp.start_logging() notebook_run.log(name="message", value="Hello from run!")
Überwachen des Status einer Ausführung
GILT FÜR: Python SDK azureml v1
Rufen Sie den Status einer Ausführung mit der
get_status()
-Methode ab.print(notebook_run.get_status())
Um die Ausführungs-ID, die Ausführungszeit und andere Details über die Ausführung abzurufen, verwenden Sie die
get_details()
Methode.print(notebook_run.get_details())
Wenn die Ausführung erfolgreich abgeschlossen wurde, verwenden Sie die
complete()
-Methode, um sie als abgeschlossen zu markieren.notebook_run.complete() print(notebook_run.get_status())
Wenn Sie das Python-Entwurfsmuster
with...as
verwenden, markiert sich die Ausführung automatisch selbst als abgeschlossen, wenn sie außerhalb des Bereichs liegt. Sie müssen die Ausführung nicht manuell als abgeschlossen markieren.with exp.start_logging() as notebook_run: notebook_run.log(name="message", value="Hello from run!") print(notebook_run.get_status()) print(notebook_run.get_status())
Markieren und Suchen von Ausführungen
In Azure Machine Learning können Sie Eigenschaften und Tags zum Organisieren und Abfragen wichtiger Informationen Ihrer Ausführungen verwenden.
Hinzufügen von Eigenschaften und Tags
GILT FÜR: Python SDK azureml v1
Um Ihren Ausführungen durchsuchbare Metadaten hinzuzufügen, verwenden Sie die
add_properties()
-Methode. Der folgende Code fügt der Ausführung z. B. die"author"
-Eigenschaft hinzu:local_run.add_properties({"author":"azureml-user"}) print(local_run.get_properties())
Eigenschaften sind unveränderlich, sodass sie eine permanente Aufzeichnung zu Überwachungszwecken erstellen. Das folgende Codebeispiel führt zu einem Fehler, weil
"azureml-user"
im vorstehenden Code bereits als Wert der"author"
-Eigenschaft hinzugefügt wurde:try: local_run.add_properties({"author":"different-user"}) except Exception as e: print(e)
Im Gegensatz zu Eigenschaften können Tags geändert werden. Um durchsuchbare und aussagekräftige Informationen für Consumer Ihres Experiments hinzuzufügen, verwenden Sie die
tag()
-Methode.local_run.tag("quality", "great run") print(local_run.get_tags()) local_run.tag("quality", "fantastic run") print(local_run.get_tags())
Sie können auch einfache Zeichenfolgentags hinzufügen. Wenn diese Tags in das Tag-Wörterbuch als Schlüssel aufgenommen wurden, haben sie den Wert
None
.local_run.tag("worth another look") print(local_run.get_tags())
Abfragen von Eigenschaften und Tags
Sie können Ausführungen in einem Experiment abfragen, um eine Liste der Ausführungen zurückzugeben, die mit bestimmten Eigenschaften und Tags übereinstimmen.
GILT FÜR: Python SDK azureml v1
list(exp.get_runs(properties={"author":"azureml-user"},tags={"quality":"fantastic run"})) list(exp.get_runs(properties={"author":"azureml-user"},tags="worth another look"))
Abbrechen oder Fehler von Ausführungen
Wenn Sie einen Fehler bemerken oder die Ausführung zu lange dauert, können Sie die Ausführung abbrechen.
GILT FÜR: Python SDK azureml v1
Verwenden Sie zum Abbrechen einer Ausführung mit dem SDK die cancel()
-Methode:
src = ScriptRunConfig(source_directory='.', script='hello_with_delay.py')
local_run = exp.submit(src)
print(local_run.get_status())
local_run.cancel()
print(local_run.get_status())
Wenn Ihre Ausführung abgeschlossen ist, aber Fehler enthält (etwa weil ein falsches Trainingsskript verwendet wurde), können Sie sie mit der fail()
-Methode als fehlerhaft markieren.
local_run = exp.submit(src)
local_run.fail()
print(local_run.get_status())
Erstellen untergeordneter Ausführungen
GILT FÜR: Python SDK azureml v1
Erstellen Sie untergeordnete Ausführungen, um verwandte Ausführungen zu gruppieren, wie etwa für unterschiedliche Iterationen zum Optimieren von Hyperparametern.
Hinweis
Untergeordnete Ausführungen können nur mit dem SDK erstellt werden.
Dieses Codebeispiel verwendet das hello_with_children.py
-Skript, um einen Batch von fünf untergeordneten Ausführungen aus einer übermittelten Ausführung mithilfe der child_run()
-Methode zu erstellen:
!more hello_with_children.py
src = ScriptRunConfig(source_directory='.', script='hello_with_children.py')
local_run = exp.submit(src)
local_run.wait_for_completion(show_output=True)
print(local_run.get_status())
with exp.start_logging() as parent_run:
for c,count in enumerate(range(5)):
with parent_run.child_run() as child:
child.log(name="Hello from child run", value=c)
Hinweis
Sobald sie den gültigen Bereich verlassen haben, werden untergeordnete Ausführungen automatisch als abgeschlossen markiert.
Um viele untergeordnete Ausführungen effizient zu erstellen, verwenden Sie die create_children()
-Methode. Weil jeder Erstellungsvorgang zu einem Netzwerkaufruf führt, ist das Erstellen eines Ausführungsbatches effizienter als ein jeweils einzelnes Erstellen der Ausführungen.
Senden untergeordneter Ausführungen
Untergeordnete Ausführungen können auch aus einer übergeordneten Ausführung gesendet werden. So können Sie Hierarchien aus übergeordneten und untergeordneten Ausführungen erstellen. Sie können keine elternlose Child-Ausführung erstellen: Auch wenn die Parent-Ausführung nichts anderes tut, als Child-Ausführungen zu starten, ist es trotzdem notwendig, die Hierarchie zu erstellen. Der Status aller Ausführungen ist unabhängig: Eine übergeordnete Ausführung kann den Erfolgsstatus "Completed"
aufweisen, auch wenn eine untergeordnete Ausführung abgebrochen wurde oder zu einem Fehler führte.
Möglicherweise möchten Sie, dass untergeordnete Ausführungen eine andere Ausführungskonfiguration verwenden als die übergeordnete Ausführung. Sie könnten beispielsweise eine weniger leistungsfähige CPU-basierte Konfiguration für die übergeordnete Ausführung und GPU-basierte Konfigurationen für die untergeordneten Ausführungen verwenden. Ein weiterer häufiger Wunsch ist es, jeder Child-Ausführung unterschiedliche Argumente und Daten zu übergeben. Erstellen Sie zum Anpassen einer untergeordneten Ausführung ein Objekt vom Typ ScriptRunConfig
für die untergeordnete Ausführung.
Wichtig
Um eine untergeordnete Ausführung von einer übergeordneten Ausführung auf einem Remotecomputer zu übermitteln, müssen Sie sich zuerst im übergeordneten Ausführungscode beim Arbeitsbereich anmelden. Standardmäßig verfügt das Ausführungskontextobjekt in einer Remoteversion nicht über Anmeldeinformationen zum Übermitteln untergeordneter Ausführungen. Verwenden Sie die Anmeldeinformationen für einen Dienstprinzipal oder eine verwaltete Identität. Weitere Informationen zur Authentifizierung finden Sie unter Einrichten der Authentifizierung.
Der folgende Code:
- Ruft eine benannte
"gpu-cluster"
Computerressource aus dem Arbeitsbereichws
ab - Es durchläuft verschiedene Argumentwerte, die an die untergeordneten
ScriptRunConfig
-Objekte übergeben werden sollen. - Es erstellt und übermittelt eine neue untergeordnete Ausführung und verwendet dabei benutzerdefinierte Computeressourcen und Argumente.
- Es blockiert die weitere Ausführung, bis alle untergeordneten Ausführungen beendet sind.
# parent.py
# This script controls the launching of child scripts
from azureml.core import Run, ScriptRunConfig
compute_target = ws.compute_targets["gpu-cluster"]
run = Run.get_context()
child_args = ['Apple', 'Banana', 'Orange']
for arg in child_args:
run.log('Status', f'Launching {arg}')
child_config = ScriptRunConfig(source_directory=".", script='child.py', arguments=['--fruit', arg], compute_target=compute_target)
# Starts the run asynchronously
run.submit_child(child_config)
# Experiment will "complete" successfully at this point.
# Instead of returning immediately, block until child runs complete
for child in run.get_children():
child.wait_for_completion()
Um auf effiziente Weise mehrere untergeordnete Ausführungen mit identischen Konfigurationen, Argumenten und Eingaben zu erstellen, verwenden Sie die create_children()
-Methode. Weil jeder Erstellungsvorgang zu einem Netzwerkaufruf führt, ist das Erstellen eines Ausführungsbatches effizienter als ein jeweils einzelnes Erstellen der Ausführungen.
In einer untergeordneten Ausführung können Sie die ID der übergeordneten Ausführung anzeigen:
## In child run script
child_run = Run.get_context()
child_run.parent.id
Abfragen von untergeordneten Ausführungen
Um die untergeordneten Ausführungen eines bestimmten übergeordneten Elements abzufragen, verwenden Sie die get_children()
-Methode.
Über das Argument recursive = True
können Sie eine geschachtelte Struktur aus untergeordneten Elementen und Enkelelementen abfragen.
print(parent_run.get_children())
Protokollieren in einer übergeordneten oder der Stammausführung
Sie können über das Feld Run.parent
auf die Ausführung zugreifen, die die aktuelle untergeordnete Ausführung gestartet hat. Ein häufiger Anwendungsfall für Run.parent
ist die Zusammenfassung von Protokollergebnissen an einer einzigen Stelle. Untergeordnete Ausführungen werden asynchron ausgeführt, und es gibt keine Garantie für die Reihenfolge oder Synchronisation, abgesehen von der Fähigkeit der übergeordneten Ausführung, auf die Fertigstellung ihrer untergeordneten Ausführungen zu warten.
# in child (or even grandchild) run
def root_run(self : Run) -> Run :
if self.parent is None :
return self
return root_run(self.parent)
current_child_run = Run.get_context()
root_run(current_child_run).log("MyMetric", f"Data from child run {current_child_run.id}")
Überwachen des Ausführungsstatus per E-Mail-Benachrichtigung
Wählen Sie im Azure-Portal auf der linken Navigationsleiste die Registerkarte Überwachen aus.
Wählen Sie Diagnoseeinstellungen und dann + Diagnoseeinstellung hinzufügen aus.
Führen Sie für die Diagnoseeinstellung Folgendes aus:
- Wählen Sie unter Kategoriedetails das AmlRunStatusChangedEvent aus.
- Wählen Sie in den Zieldetails die Option An Log Analytics-Arbeitsbereich senden aus, und geben Sie das Abonnement und den Log Analytics-Arbeitsbereich an.
Hinweis
Der Azure Log Analytics-Arbeitsbereich ist ein anderer Typ von Azure-Ressource als der Azure Machine Learning Service-Arbeitsbereich. Wenn diese Liste keine Optionen enthält, können Sie einen Log Analytics-Arbeitsbereich erstellen.
Fügen Sie auf der Registerkarte Protokolle eine Neue Warnungsregel hinzu.
Weitere Informationen finden Sie unter Erstellen, Anzeigen und Verwalten von Protokollwarnungen mithilfe von Azure Monitor.
Beispielnotebooks
Die folgenden Notebooks veranschaulichen die Konzepte in diesem Artikel:
Weitere Informationen zu den Protokollierungs-APIs finden Sie im Protokollierungs-API-Notebook.
Weitere Informationen zum Verwalten von Ausführungen mit dem Azure Machine Learning-SDK finden Sie in dem Beitrag zum Verwalten von Notebooks von Ausführungen.
Nächste Schritte
- Informationen zum Protokollieren von Metriken für Ihre Experimente finden Sie unter Protokollieren von Metriken während Trainingsausführungen.
- Informationen zum Überwachen von Ressourcen und Protokollen aus Azure Machine Learning finden Sie unter Überwachen von Azure Machine Learning.