Teilen über


Problembehandlung für Batchendpunkte

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

Dieser Artikel enthält Anleitungen zur Behandlung häufiger Fehler bei der Verwendung von Batchendpunkten für die Batchbewertung in Azure Machine Learning. In den folgenden Abschnitten wird beschrieben, wie Batchbewertungsprotokolle analysiert werden, um mögliche Probleme und nicht unterstützte Szenarien zu identifizieren. Sie können auch empfohlene Lösungen anzeigen, um häufige Fehler zu beheben.

Abrufen von Protokollen für Batchbewertungsaufträge

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

  • Option 1: Streamen von Auftragsprotokollen an eine lokale Konsole. Nur Protokolle im Ordner azureml-logs werden gestreamt.

    Führen Sie den folgenden Befehl aus, um systemseitig generierte Protokolle an Ihre Konsole zu streamen. Ersetzen Sie den Parameter <job_name> durch den Namen Ihres Batchbewertungsauftrags:

    az ml job stream --name <job_name>
    
  • Option 2: Anzeigen der Auftragsprotokolle in Azure Machine Learning Studio.

    Führen Sie den folgenden Befehl aus, um den in Studio zu verwendenden Auftragslink abzurufen. Ersetzen Sie den Parameter <job_name> durch den Namen Ihres Batchbewertungsauftrags:

    az ml job show --name <job_name> --query services.Studio.endpoint -o tsv
    
    1. Öffnen Sie den Auftragslink in Studio.

    2. Wählen Sie im Auftragsgraph den Schritt batchscoring aus.

    3. Wählen Sie auf der Registerkarte Ausgabe + Protokolle ein oder mehrere zu überprüfende Protokolle aus.

Überprüfen der Protokolldateien

Azure Machine Learning bietet mehrere Arten von Protokolldateien und andere Datendateien, die Sie verwenden können, um die Problembehandlung Ihres Batchbewertungsauftrags zu unterstützen.

Die beiden Ordner auf oberster Ebene für Batchbewertungsprotokolle sind azureml-logs und logs. Informationen vom Controller, der das Bewertungsskript startet, werden in der Datei ~/azureml-logs/70_driver_log.txt gespeichert.

Untersuchen von allgemeinen Informationen

Die verteilte Struktur von Batchbewertungsaufträgen führt zu Protokollen aus verschiedenen Quellen, aber zwei kombinierte Dateien bieten allgemeine Informationen:

Datei Beschreibung
~/logs/job_progress_overview.txt Enthält allgemeine Informationen zur aktuellen Anzahl von bisher erstellten und bisher verarbeiteten Minibatches (auch als Aufgaben bezeichnet). Wenn die Verarbeitung der Minibatches abgeschlossen wird, werden die Ergebnisse des Auftrags im Protokoll aufgezeichnet. Wenn bei dem Auftrag ein Fehler aufgetreten ist, wird im Protokoll die Fehlermeldung angezeigt, und es wird beschrieben, wo mit der Problembehandlung begonnen werden sollte.
~/logs/sys/master_role.txt Stellt die Ansicht des Prinzipalknotens (auch als Orchestrator bezeichnet) des laufenden Auftrags bereit. Dieses Protokoll enthält Informationen zur Aufgabenerstellung, zur Statusüberwachung und zum Auftragsergebnis.

Untersuchen von Stapelüberwachungsdaten auf Fehler

Andere Dateien enthalten Informationen zu möglichen Fehlern in Ihrem Skript:

Datei Beschreibung
~/logs/user/error.txt Bietet eine Zusammenfassung der Fehler in Ihrem Skript.
~/logs/user/error/* Bietet die vollständigen Stapelüberwachungen von Ausnahmen, die beim Laden und Ausführen des Einstiegsskripts ausgelöst wurden.

Untersuchen von Prozessprotokollen pro Knoten

Wenn Sie genau wissen möchten, wie die einzelnen Knoten das Bewertungsskript ausführen, untersuchen Sie die jeweiligen Prozessprotokolle für jeden Knoten. Die Prozessprotokolle werden im Ordner ~/logs/sys/node gespeichert und nach Workerknoten gruppiert.

Der Ordner enthält den Unterordner <IP_Adresse>/, der die Datei <Prozessname>.txt mit detaillierten Informationen zu jedem Minibatch enthält. Der Ordnerinhalt wird aktualisiert, wenn ein Worker den Minibatch auswählt oder abschließt. Für jeden Minibatch enthält die Protokolldatei Folgendes:

  • Die IP-Adresse und die Prozess-ID (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.

Untersuchen regelmäßiger Prüfungen pro Knoten

Sie können für jeden Knoten auch die Ergebnisse regelmäßiger Überprüfungen der Ressourcennutzung anzeigen. Die Protokolldateien und Setupdateien werden im Ordner ~/logs/perf gespeichert.

Verwenden Sie den Parameter --resource_monitor_interval, um das Prüfintervall in Sekunden zu ändern:

  • Standard verwenden: Das Standardintervall beträgt 600 Sekunden (ungefähr 10 Minuten).
  • Überprüfungen stoppen: Legen Sie den Wert auf 0 fest, um die Ausführung der Prüfungen auf dem Knoten zu beenden.

Der Ordner enthält einen Unterordner <IP_Adresse>/ für jeden Minibatch. Der Ordnerinhalt wird aktualisiert, wenn ein Worker den Minibatch auswählt oder abschließt. Für jeden Minibatch enthält der Ordner die folgenden Elemente:

Datei oder Ordner Beschreibung
os/ Speichert 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. Der Ordner enthält die folgenden Elemente:
- %Y%m%d%H: Unterordner, der eine oder mehrere Prozessüberprüfungsdateien enthält. Der Name des Unterordners besteht aus dem Zeitpunkt (Datum und Uhrzeit), zu dem die Überprüfung erstellt wurde (Jahr, Monat, Tag, Stunde).
processes_%M: Datei im Unterordner. Die Datei zeigt Details zur Prozessüberprüfung an. Der Dateiname endet mit der Überprüfungszeit (Minute) relativ zur Erstellungszeit der Überprüfung.
node_disk_usage.csv Zeigt Details zur Datenträgernutzung des Knotens.
node_resource_usage.csv Bietet eine Übersicht über die Ressourcennutzung des Knotens.
processes_resource_usage.csv Bietet eine Übersicht über die Ressourcennutzung der einzelnen Prozesse.

Hinzufügen der Protokollierung für das Bewertungsskript

Sie können in Ihrem Bewertungsskript die Python-Protokollierung verwenden. Diese Protokolle werden in der Datei logs/user/stdout/<Knoten_ID>/Prozess<Nummer>.stdout.txt gespeichert.

Der folgende Code veranschaulicht das Hinzufügen der Protokollierung in Ihrem Skript:

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")

Beheben allgemeiner Fehler

In den folgenden Abschnitten werden häufige Fehler beschrieben, die bei Entwicklung und Verbrauch von Batchendpunkten auftreten können. Außerdem werden Lösungsschritte empfohlen.

Kein Modul mit dem Namen „azureml“

Die Azure Machine Learning-Batchbereitstellung erfordert das azureml-core-Paket in der Installation.

Protokollierte Meldung: „Kein Modul mit dem Namen azureml.“

Grund: Anscheinend fehlt das azureml-core-Paket in der Installation.

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

Keine Ausgabe in der Prognosedatei

Bei der Batchbereitstellung wird erwartet, dass die Datei predictions.csv in einem leeren Ordner gespeichert wird. Wenn bei der Bereitstellung eine Datei im angegebenen Ordner enthalten ist, wird der Dateiinhalt nicht durch die neue Ausgabe ersetzt und es wird keine neue Datei mit den Ergebnissen erstellt.

Protokollierte Meldung: Keine bestimmte protokollierte Meldung.

Grund: Die Batchbereitstellung kann eine vorhandene Datei predictions.csv nicht überschreiben.

Lösung: Wenn der Prozess einen Ausgabeordnerspeicherort für die Vorhersagen angibt, stellen Sie sicher, dass der Ordner keine Datei predictions.csv enthält.

Zeitüberschreitung beim Batchbewertungsprozess

Bei der Batchbereitstellung wird ein Wert für timeout verwendet, um zu bestimmen, wie lange die Bereitstellung auf den Abschluss jedes Batchbewertungsprozesses warten soll. Wenn die Ausführung eines Batches den angegebenen Zeitüberschreitungswert überschreitet, bricht die Batchbereitstellung den Prozess ab.

Abgebrochene Prozesse werden bis zur maximalen Anzahl der Versuche, die im Wert max_retries angegeben ist, erneut versucht. Wenn der Zeitüberschreitungsfehler bei jedem Wiederholungsversuch auftritt, schlägt der Bereitstellungsauftrag fehl.

Sie können die Eigenschaften timeout und max_retries für jede Bereitstellung mit dem Parameter retry_settings konfigurieren.

Protokollierte Meldung: „Keine Statusaktualisierung in [Anzahl] Sekunden. Keine Statusaktualisierung in dieser Überprüfung. Warten Sie [Anzahl] Sekunden seit der letzten Aktualisierung.“

Grund: Die Batchausführung überschreitet die angegebene Zeitüberschreitung und die maximale Anzahl von Wiederholungsversuchen. Diese Aktion entspricht einem Fehlschlagen der run()-Funktion im Einstiegsskript.

Lösung: Erhöhen Sie den Wert timeout für Ihre Bereitstellung. Standardmäßig hat timeout den Wert 30 und max_retries den Wert 3. Um einen geeigneten Wert für timeout für Ihre Bereitstellung zu ermitteln, berücksichtigen Sie die Anzahl der zu verarbeitenden Dateien für jeden Batch und die Dateigrößen. Sie können die Anzahl der zu verarbeitenden Dateien verringern und kleinere Minibatches generieren. Dieser Ansatz führt zu einer schnelleren Ausführung.

Ausnahme in ScriptExecution.StreamAccess.Authentication

Damit die Batchbereitstellung erfolgreich ist, muss die verwaltete Identität für den Computecluster über die Berechtigung zum Einbinden des Speichers für Datenressourcen verfügen. Wenn die verwaltete Identität über unzureichende Berechtigungen verfügt, verursacht das Skript eine Ausnahme. Dieser Fehler kann auch dazu führen, dass der Datenressourcenspeicher nicht eingebunden wird.

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 der Computeinstanz hat keine Berechtigung zum Ausführen der Einbindung.

Lösung: Stellen Sie sicher, dass die verwaltete Identität, die dem Computecluster zugeordnet ist, in dem Ihre Bereitstellung ausgeführt wird, über Zugriff per Speicherblob-Datenleser auf das Speicherkonto verfügt. Nur Besitzer von Azure Storage-Speicherkonten können die Zugriffsebene im Azure-Portal ändern.

Fehler bei der Datasetinitialisierung, das Dataset kann nicht eingebunden werden

Für den Batchbereitstellungsprozess ist ein eingebundener Speicher für die Datenressource erforderlich. Wenn der Speicher nicht eingebunden wird, kann das Dataset nicht initialisiert werden.

Protokollierte Meldung: „Fehler bei der Initialisierung des Datasets: UserErrorException: Meldung: Dataset kann nicht eingebunden werden (ID='xx-xx', name='None', version=None). Die Quelle des Datasets ist 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 der Computeinstanz hat keine Berechtigung zum Ausführen der Einbindung.

Lösung: Stellen Sie sicher, dass die verwaltete Identität, die dem Computecluster zugeordnet ist, in dem Ihre Bereitstellung ausgeführt wird, über Zugriff per Speicherblob-Datenleser auf das Speicherkonto verfügt. Nur Besitzer von Azure Storage-Speicherkonten können die Zugriffsebene im Azure-Portal ändern.

dataset_param hat keinen angegebenen Wert oder Standardwert

Während der Batchbereitstellung verweist der Datasetknoten auf den dataset_param-Parameter. Damit die Bereitstellung fortgesetzt werden kann, muss der Parameter über einen zugewiesenen Wert oder einen angegebenen Standardwert verfügen.

Protokollierte Meldung: „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 das Bereitstellungsskript eine für Batchendpunkte unterstützte Dateneingabe bereitstellt.

Fehler des Benutzerprogramms, Ausführung schlägt fehl

Wenn während der Skriptausführung für die Batchbereitstellung ein Fehler bei der Funktion init() oder run() auftritt, kann das Benutzerprogramm oder die Ausführung fehlschlagen. Sie können die Fehlerdetails in einer generierten Protokolldatei überprüfen.

Protokollierte Meldung: „Benutzerprogramm fehlgeschlagen mit Ausnahme: Ausführung fehlgeschlagen. Details finden Sie in den Protokollen. Das Layout der Protokolle finden Sie in den Protokollen/in der readme.txt-Datei.“

Grund: Die Funktion init() oder run() führt bei der Ausführung des Bewertungsskripts zu einem Fehler.

Lösung: Führen Sie die folgenden Schritte aus, um Details zu den Funktionsfehlern zu finden:

  1. Wechseln Sie in Azure Machine Learning Studio zur fehlgeschlagenen Ausführung des Batchbereitstellungsauftrags, und wählen Sie die Registerkarte Ausgabe + Protokolle aus.

  2. Öffnen Sie die Datei logs>user>error><Knoten_ID>>Prozess<Nummer>.txt.

  3. Suchen Sie die Fehlermeldung, die von der Funktion init() oder run() generiert wurde.

ValueError: Keine zu verkettenden Objekte

Damit die Batchbereitstellung erfolgreich ist, muss jede Datei in einem Minibatch gültig sein und einen unterstützten Dateityp implementieren. Beachten Sie, dass MLflow-Modelle nur eine Teilmenge von Dateitypen unterstützen. Weitere Informationen finden Sie unter Überlegungen beim Bereitstellen für Batchrückschlüsse.

Protokollierte Meldung: „ValueError: Keine zu verkettenden Objekte.“

Grund: Alle Dateien im generierten Minibatch sind entweder beschädigt oder haben nicht unterstützte Dateitypen.

Lösung: Führen Sie die folgenden Schritte aus, um Details zu den fehlgeschlagenen Dateien zu finden:

  1. Wechseln Sie in Azure Machine Learning Studio zur fehlgeschlagenen Ausführung des Batchbereitstellungsauftrags, und wählen Sie die Registerkarte Ausgabe + Protokolle aus.

  2. Öffnen Sie die Datei logs>user>stdout><Knoten-ID>>Prozess<Nummer>.txt.

  3. Suchen Sie nach Einträgen, die den Dateieingabefehler beschreiben, z. B. „FEHLER:azureml:Fehler beim Verarbeiten der Eingabedatei.“

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. Weitere Informationen finden Sie unter Verwenden von MLflow-Modellen mit einem Bewertungsskript.

Kein erfolgreicher Minibatch

Der Batchbereitstellungsprozess erfordert Batchendpunkte, um Daten in dem Format bereitzustellen, das von der run()-Funktion erwartet wird. Wenn Eingabedateien beschädigt sind oder nicht mit der Modellsignatur kompatibel sind, gibt die run()-Funktion keinen erfolgreichen Minibatch zurück.

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

Grund: Der Batchendpunkt konnte keine Daten im erwarteten Format für die run()-Funktion bereitstellen. Dies 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: Führen Sie die folgenden Schritte aus, um Details zum fehlgeschlagenen Minibatch zu finden:

  1. Wechseln Sie in Azure Machine Learning Studio zur fehlgeschlagenen Ausführung des Batchbereitstellungsauftrags, und wählen Sie die Registerkarte Ausgabe + Protokolle aus.

  2. Öffnen Sie die Datei logs>user>stdout><Knoten-ID>>Prozess<Nummer>.txt.

  3. Suchen Sie nach Einträgen, die den Eingabedateifehler für den Minibatch beschreiben, z. B. „Fehler beim Verarbeiten der Eingabedatei“. Die Details sollten beschreiben, warum die Eingabedatei nicht richtig gelesen werden kann.

Zielgruppe oder Dienst nicht zulässig

Microsoft Entra-Token werden für bestimmte Aktionen ausgegeben, die die zulässigen Benutzer (Zielgruppe), den zulässigen Dienst und die zulässigen Ressourcen identifizieren. Das Authentifizierungstoken für die Batchendpunkt-REST-API muss den Parameter resource auf https://ml.azure.com festlegen.

Protokollierte Meldung: Keine bestimmte protokollierte Meldung.

Grund: Sie versuchen, die REST-API für den Batchendpunkt und die Bereitstellung mit einem Token aufzurufen, das für eine andere Zielgruppe oder einen anderen Dienst ausgegeben wurde.

Lösung: Führen Sie diese Schritte aus, um diesen Authentifizierungsfehler zu beheben:

  1. Wenn Sie ein Authentifizierungstoken für die Batchendpunkt-REST-API generieren, legen Sie den Parameter resource auf https://ml.azure.com fest.

    Beachten Sie, dass sich diese Ressource von der Ressource unterscheidet, mit der Sie den Endpunkt über die REST-API verwalten. Alle Azure-Ressourcen (einschließlich der Batchendpunkte) verwenden die Ressource https://management.azure.com für die Verwaltung.

  2. Wenn Sie die REST-API für einen Batchendpunkt und eine Bereitstellung aufrufen, verwenden Sie unbedingt das Token, das für die REST-API des Batchendpunkts ausgestellt wurde, und kein Token, das für eine andere Zielgruppe oder einen anderen Dienst ausgestellt wurde. Bestätigen Sie in jedem Fall, dass Sie den richtigen Ressourcen-URI verwenden.

Wenn Sie die Verwaltungs-API und die Auftragsaufruf-API gleichzeitig verwenden möchten, benötigen Sie zwei Tokens. Weitere Informationen finden Sie unter Authentifizierung für Batchendpunkte (REST).

Keine gültigen Bereitstellungen für die Weiterleitung

Damit die Batchbereitstellung erfolgreich ist, muss der Batchendpunkt über mindestens eine gültige Bereitstellungsroute verfügen. Die Standardmethode besteht darin, die standardmäßige Batchbereitstellung mithilfe des defaults.deployment_name-Parameters zu definieren.

Protokollierte Meldung: „Keine gültigen Bereitstellungen für die Weiterleitung. Ü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: Verwenden Sie eine der folgenden Methoden, um das Weiterleitungsproblem zu beheben:

  • Vergewissern Sie sich, dass der Parameter defaults.deployment_name die richtige Standardbatchbereitstellung definiert. Weitere Informationen finden Sie unter Aktualisieren der Standardbatchbereitstellung.

  • Definieren Sie die Route mit einem bereitstellungsspezifischen Header.

Einschränkungen und nicht unterstützte Szenarien

Beachten Sie beim Entwerfen von Machine Learning-Bereitstellungslösungen, die auf Batchendpunkten basieren, dass einige Konfigurationen und Szenarien nicht unterstützt werden. In den folgenden Abschnitten werden nicht unterstützte Arbeitsbereiche und Computeressourcen sowie ungültige Typen für Eingabedateien identifiziert.

Nicht unterstützte Arbeitsbereichskonfigurationen

Die folgenden Arbeitsbereichskonfigurationen werden für die Batchbereitstellung nicht unterstützt:

  • Arbeitsbereiche, die mit Azure Container Registry-Instanzen mit aktivierter Quarantänefunktion konfiguriert sind
  • Arbeitsbereiche mit kundenseitig verwalteten Schlüsseln

Nicht unterstützte Computekonfigurationen

Die folgenden Computekonfigurationen werden für die Batchbereitstellung nicht unterstützt:

  • Azure ARC Kubernetes-Cluster
  • Granulare Ressourcenanforderung (Arbeitsspeicher, vCPU, GPU) für Azure Kubernetes-Cluster (nur Instanzenanzahl kann angefordert werden)

Nicht unterstützte Eingabedateitypen

Die folgenden Eingabedateitypen werden für die Batchbereitstellung nicht unterstützt:

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