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
undipykernel ~=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
Erstellen Sie im Studio-Portal über den linken Navigationsbereich einen neuen Auftrag.
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.
Befolgen Sie den Assistenten, um die Umgebung auszuwählen, in der Sie den Auftrag starten möchten.
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.
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).
- 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.
- Ü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.
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.
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.
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.
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.
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.
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.
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.
- 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).
Nachdem der Auftrag übermittelt wurde, stellen Sie eine Verbindung mit VS Code her, und wählen Sie den integrierten Debugger aus.
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.
Legen Sie Breakpoints fest, und durchlaufen Sie die Auftragsausführung wie bei Ihrem Workflow für lokales Debuggen.
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
- Lernen Sie, wie und wo Sie Modelle bereitstellen können.