Freigeben über


Debuggen von Aufträgen und Überwachen des Trainingsfortschritts

Das Training des Machine Learning-Modells ist ein iterativer Prozess und erfordert umfangreiches Experimentieren. Mit der interaktiven Azure Machine Learning-Auftragsumgebung können wissenschaftliche Fachkräfte für Daten das Azure Machine Learning Python SDK, die Azure Machine Learning CLI oder das Azure Studio verwenden, um auf den Container zuzugreifen, in dem ihr Auftrag ausgeführt wird. Sobald auf den Auftragscontainer zugegriffen wird, können Benutzer Trainingsskripts durchlaufen, den Trainingsfortschritt überwachen oder den Auftrag remote debuggen, wie es normalerweise auf ihren lokalen Computern der Fall wäre. Mit Aufträgen kann über verschiedene Trainingsanwendungen wie JupyterLab, TensorBoard, VS Code oder über eine direkte Verbindung mit dem Auftragscontainer über SSH interagiert werden.

Interaktive Trainings werden für Azure Machine Learning-Computecluster und Kubernetes-Cluster mit Azure Arc-Unterstützung unterstützt.

Voraussetzungen

  • Sehen Sie sich die ersten Schritte beim Training in Azure Machine Learning an.
  • Weitere Informationen finden Sie unter diesem Link für VS Code zum Einrichten der Azure Machine Learning-Erweiterung.
  • Stellen Sie sicher, dass in Ihrer Auftragsumgebung die Pakete openssh-server und ipykernel ~=6.0 installiert sind (in allen von Azure Machine Learning kuratierten Trainingsumgebungen sind diese Pakete standardmäßig installiert).
  • Interaktive Anwendungen können nur in verteilten Trainingsausführungen aktiviert werden, in denen der Verteilungstyp „PyTorch“, „TensorFlow“ oder „MPI“ lautet. Ein benutzerdefiniertes verteiltes Trainingssetup (Konfigurieren von Training mit mehreren Knoten, ohne das oben genannte Verteilungsframework zu verwenden) wird derzeit nicht unterstützt.
  • Um SSH verwenden zu können, benötigen Sie ein SSH-Schlüsselpaar. Mit dem Befehl ssh-keygen -f "<filepath>" können Sie Dateien mit öffentlichen und privaten SSH-Schlüsseln generieren.

Interagieren mit Ihrem Auftragscontainer

Wenn Sie interaktive Anwendungen bei der Auftragserstellung angeben, können Sie eine direkte Verbindung mit dem Container auf dem Computeknoten herstellen, auf dem Ihr Auftrag ausgeführt wird. Sobald Sie Zugriff auf den Auftragscontainer haben, können Sie Ihren Auftrag in der gleichen Umgebung testen oder debuggen, in der er ausgeführt werden würde. Sie können auch VS Code für das Anfügen an den aktiven Prozess verwenden und so debuggen, wie Sie es lokal vornehmen würden.

Aktivieren während der Auftragsübermittlung

  1. Erstellen Sie im Studio-Portal über den linken Navigationsbereich einen neuen Auftrag.

  2. Wählen Sie Computecluster oder Angefügtes Compute (Kubernetes) als Computetyp und das Computeziel aus. Geben Sie anschließend an, wie viele Knoten Sie in Instance count benötigen.

Screenshot: Auswahl eines Computestandorts für einen Auftrag

  1. Befolgen Sie den Assistenten, um die Umgebung auszuwählen, in der Sie den Auftrag starten möchten.

  2. Fügen Sie in Schritt Trainingsskript Ihren Trainingscode (und Eingabe-/Ausgabedaten) hinzu, und verweisen Sie in Ihrem Befehl darauf, um sicherzustellen, dass er in Ihren Auftrag eingebunden ist.

Screenshot: Überprüfen eines Auftragsentwurfs und Abschluss der Erstellung

Sie können am Ende Ihres Befehls sleep <specific time> festlegen, um anzugeben, wie lange Sie die Computeressource reservieren möchten. Das Format ist wie folgt:

  • sleep 1s
  • sleep 1m
  • sleep 1h
  • sleep 1d

Sie können auch den Befehl sleep infinity verwenden, mit dem der Auftrag auf unbestimmte Zeit aktiv bleibt.

Hinweis

Wenn Sie sleep infinity verwenden, müssen Sie den Auftrag manuell abbrechen, um die Computeressource freizugeben (und die Abrechnung zu beenden).

  1. Erweitern Sie in den Einstellungen für Compute die Option für Trainingsanwendungen. Wählen Sie mindestens eine Trainingsanwendung aus, die Sie für die Interaktion mit dem Auftrag verwenden möchten. Wenn Sie keine Anwendung auswählen, ist das Debuggen-Feature nicht verfügbar.

Screenshot: Auswählen einer Trainingsanwendung, die der Benutzer für einen Auftrag verwenden soll

  1. Überprüfen und erstellen Sie den Auftrag.

Herstellen einer Verbindung mit Endpunkten

Um mit dem Auftrag, der gerade ausgeführt wird, interagieren zu können, klicken Sie auf der Auftragsdetailseite auf die Schaltfläche Debuggen und Überwachen.

Screenshot: Position des Bereichs „Debuggen und Überwachen“ für interaktive Aufträge

Wenn Sie im Bereich auf die Anwendungen klicken, wird eine neue Registerkarte für die Anwendungen geöffnet. Sie können nur auf die Anwendungen zugreifen, wenn sie sich im Status Wird ausgeführt befinden. Zudem ist nur der Auftragsbesitzer für den Zugriff auf die Anwendungen autorisiert. Wenn Sie auf mehreren Knoten trainieren, können Sie den bestimmten Knoten auswählen, mit dem Sie interagieren möchten.

Screenshot: Informationen zu interaktiven Aufträgen im rechten Bereich. Der Informationsinhalt variiert je nach Benutzerdaten.

Es kann einige Minuten dauern, bis der Auftrag und die während der Auftragserstellung angegebenen Trainingsanwendungen gestartet wurden.

Interagieren mit den Anwendungen

Wenn Sie Endpunkte auswählen, um mit Ihrem Auftrag zu interagieren, werden Sie zum Benutzercontainer unter Ihrem Arbeitsverzeichnis weitergeleitet, wo Sie auf Ihren Code, Ihre Eingaben, Ausgaben und Protokolle zugreifen können. Wenn beim Herstellen einer Verbindung mit den Anwendungen Probleme auftreten, finden Sie die interaktiven Funktions- und Anwendungsprotokolle in system_logs->interactive_capability unter der Registerkarte Ausgaben und Protokolle.

Screenshot: Speicherort des interaktiven Protokollbereichs für interaktive Aufträge

  • Sie können ein Terminal über Jupyter Lab öffnen und mit der Interaktion innerhalb des Auftragscontainers beginnen. Sie können Ihr Trainingsskript auch direkt mit Jupyter Lab durchlaufen.

    Screenshot: Inhaltsbereich „Jupyter Lab“ für interaktive Aufträge

  • Sie können auch mit dem Auftragscontainer in VS Code interagieren. Navigieren Sie hierher, um während der Auftragsübermittlung einen Debugger an einen Auftrag anzufügen und die Ausführung anzuhalten.

    Hinweis

    Private Link-fähige Arbeitsbereiche werden bei Interaktionen mit dem Auftragscontainer mit VS Code derzeit nicht unterstützt.

    Screenshot: Bereich „VS Code“ für interaktive Aufträge beim ersten Öffnen. Dies zeigt die Python-Beispieldatei, die zum Ausgeben von zwei Zeilen erstellt wurde.

  • Wenn Sie Tensorflow-Ereignisse für Ihren Auftrag protokolliert haben, können Sie TensorBoard verwenden, um die Metriken zu überwachen, wenn Ihr Auftrag ausgeführt wird.

    Screenshot: Bereich „TensorBoard“ für interaktive Aufträge beim ersten Öffnen. Diese Informationen variieren je nach Kundendaten.

Beenden des Auftrags

Sobald Sie das interaktive Training abgeschlossen haben, können Sie zur Auftragsdetailseite wechseln, um den Auftrag abzubrechen, wodurch die Computeressource freigegeben wird. Alternativ können Sie az ml job cancel -n <your job name> in der CLI oder ml_client.job.cancel("<job name>") im SDK verwenden.

Screenshot: Option „Auftrag abbrechen“ für interaktive Aufträge und deren Position für die Benutzerauswahl

Anfügen eines Debuggers an einen Auftrag

Um einen Auftrag mit einem angefügten Debugger und bei angehaltener Ausführung zu übermitteln, können Sie den Befehl „debugpy“ und VS Code verwenden (debugpy muss in Ihrer Auftragsumgebung installiert sein).

Hinweis

Private Link-fähige Arbeitsbereiche werden derzeit nicht unterstützt, wenn ein Debugger an einen Auftrag in VS Code angefügt wird.

  1. Verwenden Sie während der Auftragsübermittlung (entweder über die Benutzeroberfläche, die CLI oder das SDK) den Befehl „debugpy“, um Ihr Python-Skript auszuführen. Der folgende Screenshot zeigt z. B. einen Beispielbefehl, der „debugpy“ zum Anfügen des Debuggers für ein Tensorflow-Skript verwendet (tfevents.py kann durch den Namen Ihres Trainingsskripts ersetzt werden).

Screenshot: Konfiguration von „debugpy“ für interaktive Aufträge

  1. Nachdem der Auftrag übermittelt wurde, stellen Sie eine Verbindung mit VS Code her, und wählen Sie den integrierten Debugger aus.

    Screenshot: Speicherort des geöffneten Debuggers im linken Bereich für interaktive Aufträge

  2. Verwenden Sie die Debugkonfiguration für „Remoteanfügung“, um an den übermittelten Auftrag anzufügen, und übergeben Sie den Pfad und Port, den Sie in Ihrem Befehl zur Auftragsübermittlung konfiguriert haben. Diese Informationen finden Sie auch auf der Seite mit den Auftragsdetails.

    Screenshot: Abgeschlossene interaktive Aufträge

    Screenshot: Hinzufügen einer Schaltfläche für Remoteanfügung für interaktive Aufträge

  3. Legen Sie Breakpoints fest, und durchlaufen Sie die Auftragsausführung wie bei Ihrem Workflow für lokales Debuggen.

    Screenshot: Position eines Beispiel-Breakpoints, der im Visual Studio Code-Editor festgelegt ist

Hinweis

Wenn Sie „debugpy“ verwenden, um Ihren Auftrag zu starten, wird Ihr Auftrag nur ausgeführt, wenn Sie den Debugger in VS Code anfügen und das Skript ausführen. Wenn dies nicht geschieht, wird die Compute-Instanz reserviert, bis der Auftrag abgebrochen wird.

Nächste Schritte