Freigeben über


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:

Überwachen der Ausführungsleistung

  • Starten einer Ausführung und deren Protokollierungsprozess

    GILT FÜR: Python SDK azureml v1

    1. 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")
      
    2. 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.parentist 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

  1. Wählen Sie im Azure-Portal auf der linken Navigationsleiste die Registerkarte Überwachen aus.

  2. Wählen Sie Diagnoseeinstellungen und dann + Diagnoseeinstellung hinzufügen aus.

    Screenshot: Diagnoseeinstellungen für die E-Mail-Benachrichtigung

  3. Führen Sie für die Diagnoseeinstellung Folgendes aus:

    1. Wählen Sie unter Kategoriedetails das AmlRunStatusChangedEvent aus.
    2. 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.

    Screenshot: Konfiguration der E-Mail-Benachrichtigung

  4. Fügen Sie auf der Registerkarte Protokolle eine Neue Warnungsregel hinzu.

    Screeenshot: Neue Warnungsregel

  5. 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:

Nächste Schritte