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:
- Organisieren der Protokolle eines Batchbewertungsauftrags
- Beheben allgemeiner Fehler
- Ermitteln nicht unterstützter Szenarien in Batchendpunkten und ihrer Einschränkungen
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
- Öffnen Sie den Auftrag in Studio mit dem Wert, der vom obigen Befehl zurückgegeben wird.
- Wählen Sie die Option für die Batchbewertung (batchscoring) aus.
- Öffnen Sie die Registerkarte Ausgaben + Protokolle.
- 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 ist600
(ungefähr 10 Minuten). Um die Überwachung zu beenden, legen Sie den Wert auf0
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 Befehlps
.%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 timeout
s 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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Einreichen und Feedback anzeigen für