Problembehandlung für Batchendpunkte

GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)Python SDK azure-ai-ml v2 (aktuell)

In diesem Artikel wird beschrieben, wie Sie die Problembehandlung durchführen und häufige Fehler beheben, die bei der Verwendung von Batchendpunkten für die Batchbewertung auftreten können. In diesem Artikel wird Folgendes behandelt:

Grundlegendes zu Protokollen eines Batchbewertungsauftrags

Abrufen von Protokollen

Nachdem Sie einen Batchendpunkt mit der Azure CLI oder per REST aufgerufen haben, wird der Batchbewertungsauftrag asynchron ausgeführt. Es gibt zwei Optionen, um die Protokolle für einen Batchbewertungsauftrag abzurufen.

1\. Option: Streamen von Protokollen an die lokale Konsole

Sie können den folgenden Befehl ausführen, um systemseitig generierte Protokolle an Ihre Konsole zu streamen. Nur Protokolle im Ordner azureml-logs werden gestreamt.

az ml job stream --name <job_name>

2\. Option: Anzeigen von Protokollen in Studio

Führen Sie Folgendes aus, um den Link für die Ausführung in Studio abzurufen:

az ml job show --name <job_name> --query services.Studio.endpoint -o tsv
  1. Öffnen Sie den Auftrag in Studio mit dem Wert, der vom obigen Befehl zurückgegeben wird.
  2. Wählen Sie die Option für die Batchbewertung (batchscoring) aus.
  3. Öffnen Sie die Registerkarte Ausgaben + Protokolle.
  4. Wählen Sie ein oder mehrere Protokolle aus, die Sie überprüfen möchten.

Grundlegendes zur Protokollstruktur

Es gibt zwei Protokollordner der obersten Ebene: azureml-logs und logs.

Die Datei ~/azureml-logs/70_driver_log.txt enthält Informationen des Controllers, von dem das Bewertungsskript gestartet wird.

Aufgrund der verteilten Struktur von Batchbewertungsaufträgen sind Protokolle aus unterschiedlichen Quellen vorhanden. Es werden aber zwei kombinierte Dateien mit allgemeinen Informationen erstellt:

  • ~/logs/job_progress_overview.txt: Diese Datei enthält allgemeine Informationen zur Anzahl von bisher erstellten und bisher verarbeiteten Minibatches (auch als „Aufgaben“ bezeichnet). Wenn die Verarbeitung der Minibatches abgeschlossen ist, werden die Ergebnisse des Auftrags im Protokoll aufgezeichnet. Wenn bei dem Auftrag ein Fehler aufgetreten ist, wird die Fehlermeldung angezeigt, und es wird beschrieben, wo mit der Problembehandlung begonnen werden sollte.

  • ~/logs/sys/master_role.txt: Diese Datei stellt die Prinzipalknotenansicht (auch als Orchestrator bezeichnet) des laufenden Auftrags bereit. Dieses Protokoll enthält Informationen zur Aufgabenerstellung, zur Statusüberwachung und zum Auftragsergebnis.

Für ein präzises Verständnis von Fehlern in Ihrem Skript gibt es Folgendes:

  • ~/logs/user/error.txt: Diese Datei wird versuchen, die Fehler in Ihrem Skript zusammenzufassen.

Weitere Informationen zu Fehlern in Ihrem Skript finden Sie hier:

  • ~/logs/user/error/: Diese Datei enthält vollständige Stapelüberwachungen von Ausnahmen, die beim Laden und Ausführen des Eingabeskripts ausgelöst werden.

Wenn Sie detailliert erfahren möchten, wie die einzelnen Knoten das Bewertungsskript ausgeführt haben, sehen Sie sich die jeweiligen Prozessprotokolle für jeden Knoten an. Die Prozessprotokolle befinden sich im Ordner sys/node, gruppiert nach Workerknoten:

  • ~/logs/sys/node/<ip_address>/<process_name>.txt: Diese Datei enthält ausführliche Informationen zu den einzelnen Minibatches, die von einem Worker abgerufen oder abgeschlossen werden. Für jeden Minibatch umfasst diese Datei Folgendes:

    • Die IP-Adresse und die PID des Workerprozesses.
    • Die Gesamtzahl der Elemente, die Anzahl von erfolgreich verarbeiteten Elementen und die Anzahl von Elementen mit Fehlern.
    • Die Startzeit, Dauer, Verarbeitungszeit und die Zeit der run-Methode.

Sie können für jeden Knoten auch die Ergebnisse regelmäßiger Überprüfungen der Ressourcennutzung anzeigen. Die Protokoll- und Setupdateien befinden sich in diesem Ordner:

  • ~/logs/perf: Legen Sie --resource_monitor_interval fest, um das Prüfintervall in Sekunden zu ändern. Das Standardintervall ist 600 (ungefähr 10 Minuten). Um die Überwachung zu beenden, legen Sie den Wert auf 0 fest. Jeder Ordner <ip_address> enthält Folgendes:

    • os/: Informationen zu allen laufenden Prozessen im Knoten. Bei einer Prüfung wird ein Betriebssystembefehl ausgeführt und das Ergebnis in einer Datei gespeichert. Unter Linux ist der Befehl ps.
      • %Y%m%d%H: Der Name des Unterordners ist die Uhrzeit zur vollen Stunde.
        • processes_%M: Die Datei endet mit der Minute der Prüfzeit.
    • node_disk_usage.csv: Detaillierte Datenträgernutzung des Knotens.
    • node_resource_usage.csv: Übersicht über die Ressourcennutzung des Knotens.
    • processes_resource_usage.csv: Übersicht über die Ressourcennutzung der einzelnen Prozesse.

Protokollieren im Bewertungsskript

Sie können in Ihrem Bewertungsskript die Python-Protokollierung verwenden. Die Protokolle werden unter logs/user/stdout/<node_id>/processNNN.stdout.txt gespeichert.

import argparse
import logging

# Get logging_level
arg_parser = argparse.ArgumentParser(description="Argument parser.")
arg_parser.add_argument("--logging_level", type=str, help="logging level")
args, unknown_args = arg_parser.parse_known_args()
print(args.logging_level)

# Initialize Python logger
logger = logging.getLogger(__name__)
logger.setLevel(args.logging_level.upper())
logger.info("Info log statement")
logger.debug("Debug log statement")

Häufige Probleme

Der folgende Abschnitt enthält Informationen zu häufigen Problemen und den zugehörigen Lösungen, die die Entwicklung und Nutzung von Batchendpunkten betreffen.

Kein Modul mit dem Namen „azureml“

Meldung protokolliert: No module named 'azureml'

Grund: Für Azure Machine Learning-Batchbereitstellungen muss das Paket azureml-core installiert werden.

Lösung: Fügen Sie azureml-core zu Ihrer Conda-Abhängigkeitsdatei hinzu.

Die Ausgabe ist bereits vorhanden

Grund: Die Azure Machine Learning-Batchbereitstellung kann die von der Ausgabe generierte Datei predictions.csv nicht überschreiben.

Lösung: Wenn Ihnen ein Ausgabespeicherort für die Vorhersagen angegeben wird, stellen Sie sicher, dass der Pfad nicht zu einer schon vorhandenen Datei führt.

Bei der Funktion „run()“ im Einstiegsskript wurde [Zahl]-mal die Zeit überschritten

Meldung protokolliert: No progress update in [number] seconds. No progress update in this check. Wait [number] seconds since last update.

Grund: Batchbereitstellungen können mit einem timeout-Wert konfiguriert werden, der angibt, wie lange mit der Bereitstellung auf einen einzelnen zu verarbeitenden Batch gewartet werden soll. Wenn die Ausführung des Batches länger dauert, wird der Vorgang abgebrochen. Vorgänge, die abgebrochen werden, können bis zu einer maximalen, ebenfalls konfigurierbaren Anzahl an Versuchen erneut ausgeführt werden. Wenn die timeout bei jeder Wiederholung auftritt, schlägt der Bereitstellungsauftrag fehl. Diese Eigenschaften können für jede Bereitstellung konfiguriert werden.

Lösung: Erhöhen Sie den timemout-Wert der Bereitstellung, indem Sie die Bereitstellung aktualisieren. Diese Eigenschaften werden im Parameter retry_settings konfiguriert. Standardmäßig werden eine timeout=30 und retries=3 konfiguriert. Bei der Entscheidung über den Wert für die timeouts berücksichtigen Sie die Anzahl der Dateien, die in jedem Batch verarbeitet werden und die Größe jeder dieser Dateien. Sie können sie auch verringern, um mehr Batches zu berücksichtigen, die kleiner und daher schneller auszuführen sind.

ScriptExecution.StreamAccess.Authentication

Protokollierte Meldung: ScriptExecutionException wurde durch StreamAccessException verursacht. StreamAccessException wurde durch AuthenticationException verursacht.

Grund: Der Computecluster, in dem die Bereitstellung ausgeführt wird, kann den Speicher nicht bereitstellen, an dem sich die Datenressource befindet. Die verwaltete Identität des Compute hat keine Berechtigung zum Ausführen der Einbindung.

Lösungen: Stellen Sie sicher, dass die Identität, die dem Computecluster zugeordnet ist, in dem Ihre Bereitstellung ausgeführt wird, mindestens über Zugriff per Speicherblob-Datenleser verfügt. Nur Speicherkontobesitzer können Ihre Zugriffsebene über das Azure-Portal ändern.

Fehler bei der Initialisierung des Datasets

Meldung protokolliert: Fehler bei der Initialisierung des Datasets: UserErrorException: Meldung: Einbinden eines Datasets nicht möglich(id='xx-xx', name='None', version=None). Quelle des Datasets entweder nicht zugänglich oder enthält keine Daten.

Grund: Der Computecluster, in dem die Bereitstellung ausgeführt wird, kann den Speicher nicht bereitstellen, an dem sich die Datenressource befindet. Die verwaltete Identität des Compute hat keine Berechtigung zum Ausführen der Einbindung.

Lösungen: Stellen Sie sicher, dass die Identität, die dem Computecluster zugeordnet ist, in dem Ihre Bereitstellung ausgeführt wird, mindestens über Zugriff per Speicherblob-Datenleser verfügt. Nur Speicherkontobesitzer können Ihre Zugriffsebene über das Azure-Portal ändern.

Datasetknoten [Code] verweist auf den Parameter dataset_param, der keinen angegebenen Wert oder Standardwert aufweist

Meldung protokolliert: Datasetknoten [Code] verweist auf den Parameter dataset_param, der keinen angegebenen Wert oder Standardwert aufweist.

Grund: Die für den Batchendpunkt bereitgestellte Eingabedatenressource wird nicht unterstützt.

Lösung: Stellen Sie sicher, dass Sie eine Dateneingabe bereitstellen, die für Batchendpunkte unterstützt wird.

Fehler beim Benutzerprogramm mit Ausnahme: Fehler beim Ausführen, überprüfen Sie die Protokolle auf Details

Message logged: Fehler beim Benutzerprogramm mit Ausnahme: Fehler beim Ausführen, überprüfen Sie die Protokolle auf Details. Sie können Protokolle/readme.txt auf das Layout von Protokollen überprüfen.

Grund: Beim Ausführen der Funktion init() oder run() des Bewertungsskripts ist ein Fehler aufgetreten.

Lösung: Wechseln Sie zu Ausgaben + Protokolle, und öffnen Sie die Datei unter logs > user > error > 10.0.0.X > process000.txt. Es wird die mit der Methode init() oder run() generierte Fehlermeldung angezeigt.

ValueError: Keine zu verkettenden Objekte

Protokollierte Meldung: ValueError: Keine zu verkettenden Objekte

Grund: Alle Dateien im generierten Minibatch sind entweder beschädigt oder nicht unterstützte Dateitypen. Denken Sie daran, dass MLflow-Modelle eine Teilmenge von Dateitypen unterstützen, wie unter Überlegungen beim Bereitstellen für Batchrückschlüsse dokumentiert.

Lösung: Gehen Sie zur Datei logs/usr/stdout/<process-number>/process000.stdout.txt, und suchen Sie nach Einträgen wie ERROR:azureml:Error processing input file. Wenn der Dateityp nicht unterstützt wird, sehen Sie sich die Liste der unterstützten Dateien an. Möglicherweise müssen Sie den Dateityp der Eingabedaten ändern oder die Bereitstellung anpassen, indem Sie ein Bewertungsskript bereitstellen, wie unter Verwenden von MLflow-Modellen mit einem Bewertungsskript angegeben.

Run() hat kein erfolgreiches Minibatchelement zurückgegeben

Message logged: Run() hat kein erfolgreiches Minibatchelement zurückgegeben. Überprüfen Sie „response: run()“ in der https://aka.ms/batch-inference-documentation.

Grund: Der Batchendpunkt konnte keine Daten im erwarteten Format für die run()-Methode bereitstellen. Das kann darauf zurückzuführen sein, dass beschädigte Dateien gelesen wurden, oder dass die Eingabedaten nicht mit der Signatur des Modells (MLflow) kompatibel sind.

Lösung: Um zu verstehen, was passieren kann, wechseln Sie zu Ausgaben + Protokolle, und öffnen Sie die Datei unter logs > user > stdout > 10.0.0.X > process000.stdout.txt. Suchen Sie nach Fehlereinträgen wie Error processing input file. Details dazu, warum die Eingabedatei nicht richtig gelesen werden kann, finden Sie dort.

Zielgruppen in JWT sind nicht zulässig.

Kontext: Beim Aufrufen eines Batchendpunkts mithilfe der zugehörigen REST-APIs

Ursache: Das Zugriffstoken, das zum Aufrufen der REST-API für den Endpunkt bzw. die Bereitstellung verwendet wird, gibt ein Token an, das für eine andere Zielgruppe bzw. einen anderen Dienst ausgestellt wird. Microsoft Entra-Token werden für bestimmte Aktionen ausgegeben.

Lösung: Stellen Sie beim Generieren eines Authentifizierungstokens für die Verwendung mit der Batch-Endpunkt-REST-API sicher, dass der resource-Parameter auf https://ml.azure.com festgelegt ist. Beachten Sie, dass sich diese Ressource von der Ressource unterscheidet, die Sie angeben müssen, um den Endpunkt mithilfe der REST-API zu verwalten. Alle Azure-Ressourcen (einschließlich Batchendpunkte) verwenden die Ressource https://management.azure.com für deren Verwaltung. Stellen Sie sicher, dass Sie in jedem Fall den richtigen Ressourcen-URI verwenden. Wenn Sie die Verwaltungs-API und die Auftragsaufruf-API gleichzeitig verwenden möchten, benötigen Sie zwei Token. Weitere Informationen finden Sie unter Authentifizierung an Batchendpunkten (REST).

Keine gültigen Bereitstellungen, die an sie weitergeleitet werden sollen. Überprüfen Sie, ob der Endpunkt mindestens eine Bereitstellung mit positiven Gewichtungswerten aufweist, oder verwenden Sie einen bereitstellungsspezifischen Header zum Weiterleiten.

Grund: Die standardmäßige Batchbereitstellung ist nicht ordnungsgemäß festgelegt.

Lösung: Stellen Sie sicher, dass die standardmäßige Batchbereitstellung ordnungsgemäß festgelegt ist. Möglicherweise müssen Sie die standardmäßige Batchbereitstellung aktualisieren. Ausführliche Informationen finden Sie unter: Aktualisieren der standardmäßigen Batchbereitstellung

Einschränkungen und nicht unterstützte Szenarien

Beim Entwerfen von Machine Learning-Lösungen, die auf Batchendpunkten basieren, werden einige Konfigurationen und Szenarien möglicherweise nicht unterstützt.

Die folgenden Arbeitsbereichskonfigurationen werden nicht unterstützt:

  • Arbeitsbereiche, die mit Azure Container Registry-Instanzen mit aktivierter Quarantänefunktion konfiguriert sind
  • Arbeitsbereiche mit kundenseitig verwalteten Schlüsseln (Customer Managed Keys, CMK)

Die folgenden Computekonfigurationen werden nicht unterstützt:

  • Azure Arc Kubernetes-Cluster
  • Granulare Ressourcenanforderung (Arbeitsspeicher, vCPU, GPU) für Azure Kubernetes-Cluster. Es kann nur die Anzahl der Instanzen angefordert werden.

Die folgenden Eingabetypen werden nicht unterstützt:

  • Tabellarische Datasets (V1)
  • Ordner und Dateidatasets (V1)
  • MLtable (V2)

Nächste Schritte