Delen via


Problemen met batch-eindpunten oplossen

VAN TOEPASSING OP:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

Dit artikel bevat richtlijnen voor het oplossen van veelvoorkomende fouten bij het gebruik van batcheindpunten voor batchscores in Azure Machine Learning. In de volgende secties wordt beschreven hoe u batchgewijs scorelogboeken analyseert om mogelijke problemen en niet-ondersteunde scenario's te identificeren. U kunt ook aanbevolen oplossingen bekijken om veelvoorkomende fouten op te lossen.

Logboeken ophalen voor batchscoretaken

Nadat u een batch-eindpunt hebt aangeroepen met behulp van de Azure CLI of de REST API, wordt de batchscoretaak asynchroon uitgevoerd. Er zijn twee opties om de logboeken voor een batchscoretaak op te halen:

  • Optie 1: Stream taaklogboeken naar een lokale console. Alleen logboeken in de map azureml-logs worden gestreamd.

    Voer de volgende opdracht uit om door het systeem gegenereerde logboeken naar uw console te streamen. Vervang de <job_name> parameter door de naam van uw batchscoretaak:

    az ml job stream --name <job_name>
    
  • Optie 2: Taaklogboeken weergeven in Azure Machine Learning-studio.

    Voer de volgende opdracht uit om de taakkoppeling op te halen die in de studio moet worden gebruikt. Vervang de <job_name> parameter door de naam van uw batchscoretaak:

    az ml job show --name <job_name> --query services.Studio.endpoint -o tsv
    
    1. Open de taakkoppeling in de studio.

    2. Selecteer de batchscoringsstap in de grafiek van de taak.

    3. Selecteer op het tabblad Uitvoer en logboeken een of meer logboeken die u wilt bekijken.

Logboekbestanden controleren

Azure Machine Learning biedt verschillende typen logboekbestanden en andere gegevensbestanden die u kunt gebruiken om problemen met uw batchscoretaak op te lossen.

De twee mappen op het hoogste niveau voor batchgewijs scorelogboeken zijn azureml-logboeken en logboeken. Informatie van de controller waarmee het scorescript wordt gestart, wordt opgeslagen in het bestand ~/azureml-logs/70_driver_log.txt .

Informatie op hoog niveau onderzoeken

De gedistribueerde aard van batchscoretaken resulteert in logboeken van verschillende bronnen, maar twee gecombineerde bestanden bieden informatie op hoog niveau:

Bestand Beschrijving
~/logs/job_progress_overview.txt Biedt informatie op hoog niveau over het huidige aantal minibatches (ook wel taken genoemd) dat is gemaakt en het huidige aantal verwerkte minibatches. Omdat de verwerking voor minibatches tot een einde komt, worden de resultaten van de taak vastgelegd in het logboek. Als de taak mislukt, wordt in het logboek het foutbericht weergegeven en waar de probleemoplossing moet worden gestart.
~/logs/sys/master_role.txt Biedt de principal-knooppuntweergave (ook wel orchestrator genoemd) van de actieve taak. Dit logboek bevat informatie over het maken van taken, voortgangsbewaking en het taakresultaat.

Stacktraceringsgegevens controleren op fouten

Andere bestanden bevatten informatie over mogelijke fouten in uw script:

Bestand Beschrijving
~/logs/user/error.txt Geeft een overzicht van fouten in uw script.
~/logs/user/error/* Biedt de volledige stacktraceringen van uitzonderingen die zijn opgetreden tijdens het laden en uitvoeren van het invoerscript.

Proceslogboeken per knooppunt onderzoeken

Bekijk de afzonderlijke proceslogboeken voor elk knooppunt voor elk knooppunt voor een volledig inzicht in hoe elk knooppunt uw scorescript uitvoert. De proceslogboeken worden opgeslagen in de map ~/logs/sys/node en gegroepeerd op werkknooppunten.

De map bevat een ip_address/submap met een< process_name>.txt-bestand met gedetailleerde informatie over elke minibatch.>< De inhoud van de map wordt bijgewerkt wanneer een werkrol de minibatch selecteert of voltooit. Voor elke minibatch bevat het logboekbestand het volgende:

  • Het IP-adres en de proces-id (PID) van het werkproces.
  • Het totale aantal items, het aantal verwerkte items en het aantal mislukte items.
  • De begintijd, duur, procestijd en uitvoeringstijd.

Periodieke controles per knooppunt onderzoeken

U kunt ook de resultaten bekijken van periodieke controles van het resourcegebruik voor elk knooppunt. De logboekbestanden en installatiebestanden worden opgeslagen in de map ~/logs/perf .

Gebruik de --resource_monitor_interval parameter om het controle-interval in seconden te wijzigen:

  • Standaard gebruiken: het standaardinterval is 600 seconden (ongeveer 10 minuten).
  • Stopcontroles: stel de waarde in op 0 om te stoppen met het uitvoeren van controles op het knooppunt.

De map bevat een <ip_address>/ submap over elke minibatch. De inhoud van de map wordt bijgewerkt wanneer een werkrol de minibatch selecteert of voltooit. Voor elke minibatch bevat de map de volgende items:

Bestand of map Beschrijving
besturingssysteem/ Slaat informatie op over alle actieve processen in het knooppunt. Met één controle wordt een besturingssysteemopdracht uitgevoerd en wordt het resultaat opgeslagen in een bestand. In Linux is psde opdracht . De map bevat de volgende items:
- %Y%m%d%H: submap die een of meer procescontrolebestanden bevat. De naam van de submap is de aanmaakdatum en -tijd van de controle (Jaar, Maand, Dag, Uur).
processes_%M: Bestand in de submap. Het bestand bevat details over de procescontrole. De bestandsnaam eindigt met de controletijd (minuut) ten opzichte van de aanmaaktijd van de controle.
node_disk_usage.csv Geeft het gedetailleerde schijfgebruik van het knooppunt weer.
node_resource_usage.csv Hiermee wordt het overzicht van het resourcegebruik van het knooppunt geleverd.
processes_resource_usage.csv Biedt een overzicht van het resourcegebruik van elk proces.

Logboekregistratie toevoegen aan scorescript

U kunt Python-logboekregistratie gebruiken in uw scorescript. Deze logboeken worden opgeslagen in de logboeken/gebruiker/stdout/<node_id>/procesnummer><.stdout.txt bestand.

De volgende code laat zien hoe u logboekregistratie toevoegt in uw script:

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

Veelvoorkomende problemen oplossen

In de volgende secties worden veelvoorkomende fouten beschreven die kunnen optreden tijdens het ontwikkelen en verbruik van batcheindpunten en de stappen voor oplossing.

Geen module met de naam azureml

Azure Machine Learning-batchimplementatie vereist het azureml-core-pakket in de installatie.

Bericht geregistreerd: 'Geen module met de naam azureml'.

Reden: Het azureml-core pakket ontbreekt in de installatie.

Oplossing: Voeg het pakket toe aan het azureml-core conda-afhankelijkhedenbestand.

Geen uitvoer in voorspellingsbestand

Batch-implementatie verwacht dat een lege map het predictions.csv-bestand opslaat. Wanneer de implementatie een bestaand bestand in de opgegeven map tegenkomt, vervangt het proces de bestandsinhoud niet door de nieuwe uitvoer of maakt u een nieuw bestand met de resultaten.

Bericht dat is geregistreerd: geen specifiek geregistreerd bericht.

Reden: Batch-implementatie kan een bestaand predictions.csv bestand niet overschrijven.

Oplossing: Als het proces een locatie voor de uitvoermap voor de voorspellingen opgeeft, moet u ervoor zorgen dat de map geen bestaand predictions.csv bestand bevat.

Time-out van batchproces

Batch-implementatie gebruikt een timeout waarde om te bepalen hoe lang de implementatie moet wachten tot elk batchproces is voltooid. Wanneer de uitvoering van een batch de opgegeven time-out overschrijdt, wordt het proces door batchimplementatie afgebroken.

Afgebroken processen worden opnieuw geprobeerd tot het maximum aantal pogingen dat is opgegeven in de max_retries waarde. Als de time-outfout optreedt bij elke nieuwe poging, mislukt de implementatietaak.

U kunt de timeout en max_retries eigenschappen voor elke implementatie configureren met de retry_settings parameter.

Bericht geregistreerd: "Geen voortgangsupdate in [getal] seconden. Er is geen voortgangsupdate in deze controle. Wacht [getal] seconden sinds de laatste update."

Reden: Batch-uitvoering overschrijdt de opgegeven time-out en het maximum aantal nieuwe pogingen. Deze actie komt overeen met het mislukken van de run() functie in het invoerscript.

Oplossing: Verhoog de timeout waarde voor uw implementatie. De waarde is standaard timeout 30 en de max_retries waarde is 3. Als u een geschikte timeout waarde voor uw implementatie wilt bepalen, moet u rekening houden met het aantal bestanden dat voor elke batch en de bestandsgrootte moet worden verwerkt. U kunt het aantal bestanden dat moet worden verwerkt en minibatches van kleinere grootte genereren. Deze aanpak resulteert in een snellere uitvoering.

Uitzondering in ScriptExecution.StreamAccess.Authentication

Voor een geslaagde batchimplementatie moet de beheerde identiteit voor het rekencluster gemachtigd zijn om de opslag van gegevensassets te koppelen. Wanneer de beheerde identiteit onvoldoende machtigingen heeft, veroorzaakt het script een uitzondering. Deze fout kan er ook toe leiden dat de opslag van gegevensassets niet wordt gekoppeld.

Bericht vastgelegd: 'ScriptExecutionException is veroorzaakt door StreamAccessException. StreamAccessException is veroorzaakt door AuthenticationException.

Reden: Het rekencluster waarop de implementatie wordt uitgevoerd, kan de opslag waar de gegevensasset zich bevindt, niet koppelen. De beheerde identiteit van de berekening heeft geen machtigingen om de koppeling uit te voeren.

Oplossing: Zorg ervoor dat de beheerde identiteit die is gekoppeld aan het rekencluster waarop uw implementatie wordt uitgevoerd, ten minste toegang heeft tot opslagblobgegevenslezer voor het opslagaccount. Alleen eigenaren van Azure Storage-accounts kunnen het toegangsniveau in Azure Portal wijzigen.

Initialisatie van gegevensset is mislukt, kan gegevensset niet koppelen

Voor het batchimplementatieproces is gekoppelde opslag voor de gegevensasset vereist. Wanneer de opslag niet wordt bevestigd, kan de gegevensset niet worden geïnitialiseerd.

Bericht vastgelegd: 'Initialisatie van gegevensset is mislukt: UserErrorException: Message: Can't mount Dataset(ID='xxxxxx-xxxx-xxxx-xxxxxxxxxxxx', name='None', version=None). De bron van de gegevensset is niet toegankelijk of bevat geen gegevens.

Reden: Het rekencluster waarop de implementatie wordt uitgevoerd, kan de opslag waar de gegevensasset zich bevindt, niet koppelen. De beheerde identiteit van de berekening heeft geen machtigingen om de koppeling uit te voeren.

Oplossing: Zorg ervoor dat de beheerde identiteit die is gekoppeld aan het rekencluster waarop uw implementatie wordt uitgevoerd, ten minste toegang heeft tot opslagblobgegevenslezer voor het opslagaccount. Alleen eigenaren van Azure Storage-accounts kunnen het toegangsniveau in Azure Portal wijzigen.

dataset_param heeft geen opgegeven waarde of standaardwaarde

Tijdens de batchimplementatie verwijst het gegevenssetknooppunt naar de dataset_param parameter. Om door te gaan met de implementatie, moet de parameter een toegewezen waarde of een opgegeven standaardwaarde hebben.

Bericht vastgelegd: 'Gegevenssetknooppunt [code] verwijst naar parameter dataset_param, die geen opgegeven waarde of een standaardwaarde heeft.'

Reden: de invoergegevensasset die aan het batch-eindpunt wordt verstrekt, wordt niet ondersteund.

Oplossing: Zorg ervoor dat het implementatiescript een gegevensinvoer biedt die wordt ondersteund voor batch-eindpunten.

Gebruikersprogramma mislukt, uitvoering mislukt

Als tijdens de uitvoering van het script voor batchimplementatie een init() run() fout optreedt, kan het gebruikersprogramma of de uitvoering mislukken. U kunt de foutdetails bekijken in een gegenereerd logboekbestand.

Bericht vastgelegd: 'Gebruikersprogramma is mislukt met uitzondering: Uitvoeren is mislukt. Controleer de logboeken voor meer informatie. U kunt logboeken/readme.txt controleren op de indeling van logboeken.

Reden: De init() of run() functie produceert een fout tijdens het uitvoeren van het scorescript.

Oplossing: Volg deze stappen om details over de functiefouten te vinden:

  1. Ga in Azure Machine Learning-studio naar de uitvoering van de mislukte batchimplementatietaak en selecteer het tabblad Uitvoer en logboeken.

  2. Open het bestand registreert>gebruikersfout>><node_identifier>>procesnummer<>.txt.

  3. Zoek het foutbericht dat is gegenereerd door de init() of run() functie.

ValueError: Geen objecten die moeten worden samengevoegd

Voor een geslaagde batchimplementatie moet elk bestand in een minibatch geldig zijn en een ondersteund bestandstype implementeren. Houd er rekening mee dat MLflow-modellen alleen een subset van bestandstypen ondersteunen. Zie Overwegingen bij het implementeren van batchdeductie voor meer informatie.

Bericht vastgelegd: 'ValueError: Geen objecten die moeten worden samengevoegd'.

Reden: Alle bestanden in de gegenereerde minibatch zijn beschadigd of niet-ondersteunde bestandstypen.

Oplossing: Volg deze stappen om details over de mislukte bestanden te vinden:

  1. Ga in Azure Machine Learning-studio naar de uitvoering van de mislukte batchimplementatietaak en selecteer het tabblad Uitvoer en logboeken.

  2. Open het bestand logboeken>stdout>><node_identifier>>procesnummer<>.txt.

  3. Zoek naar vermeldingen die de fout met bestandsinvoer beschrijven, zoals 'ERROR:azureml:Error processing input file'.

Als het bestandstype niet wordt ondersteund, bekijkt u de lijst met ondersteunde bestanden. Mogelijk moet u het bestandstype van de invoergegevens wijzigen of de implementatie aanpassen door een scorescript op te geven. Raadpleeg MLflow-modellen gebruiken met een scorescript voor meer informatie.

Geen geslaagde minibatch

Voor het batchimplementatieproces moeten batcheindpunten gegevens leveren in de indeling die door de run() functie wordt verwacht. Als invoerbestanden beschadigde bestanden zijn of niet compatibel zijn met de modelhandtekening, kan de run() functie geen geslaagde minibatch retourneren.

Bericht vastgelegd: 'Er is geen minibatchitem geretourneerd vanuit run(). Controleer 'response: run()' in https://aka.ms/batch-inference-documentation.'

Reden: Het batch-eindpunt kan geen gegevens in de verwachte indeling aan de run() functie leveren. Dit probleem kan het gevolg zijn van beschadigde bestanden die worden gelezen of incompatibiliteit van de invoergegevens met de handtekening van het model (MLflow).

Oplossing: Volg deze stappen om details te vinden over de mislukte minibatch:

  1. Ga in Azure Machine Learning-studio naar de uitvoering van de mislukte batchimplementatietaak en selecteer het tabblad Uitvoer en logboeken.

  2. Open het bestand logboeken>stdout>><node_identifier>>procesnummer<>.txt.

  3. Zoek naar vermeldingen die de fout in het invoerbestand voor de minibatch beschrijven, zoals 'Invoerbestand voor foutverwerking'. De details moeten beschrijven waarom het invoerbestand niet correct kan worden gelezen.

Doelgroep of service is niet toegestaan

Microsoft Entra-tokens worden uitgegeven voor specifieke acties waarmee de toegestane gebruikers (doelgroep), service en resources worden geïdentificeerd. Het verificatietoken voor de REST API van het Batch-eindpunt moet de resource parameter instellen op https://ml.azure.com.

Bericht dat is geregistreerd: geen specifiek geregistreerd bericht.

Reden: u probeert de REST API aan te roepen voor het batch-eindpunt en de implementatie met een token dat is uitgegeven voor een andere doelgroep of service.

Oplossing: Volg deze stappen om dit verificatieprobleem op te lossen:

  1. Wanneer u een verificatietoken genereert voor de REST API van het Batch-eindpunt, stelt u de resource parameter in op https://ml.azure.com.

    U ziet dat deze resource verschilt van de resource die u gebruikt om het eindpunt te beheren vanuit de REST API. Alle Azure-resources (inclusief batcheindpunten) gebruiken de resource https://management.azure.com voor beheer.

  2. Wanneer u de REST API aanroept voor een batch-eindpunt en -implementatie, moet u voorzichtig zijn met het gebruik van het token dat is uitgegeven voor de REST API voor Batch-eindpunten en niet een token dat is uitgegeven voor een andere doelgroep of service. Controleer in elk geval of u de juiste resource-URI gebruikt.

Als u de beheer-API en de aanroep-API voor taken tegelijk wilt gebruiken, hebt u twee tokens nodig. Zie Verificatie op batch-eindpunten (REST) voor meer informatie.

Geen geldige implementaties om te routeren

Voor een geslaagde batchimplementatie moet het batch-eindpunt ten minste één geldige implementatieroute hebben. De standaardmethode is het definiëren van de standaard batchimplementatie met behulp van de defaults.deployment_name parameter.

Bericht vastgelegd: 'Geen geldige implementaties om naar te routeren. Controleer of het eindpunt ten minste één implementatie heeft met positieve gewichtswaarden of gebruik een implementatiespecifieke header om te routeren.

Reden: de standaardbatchimplementatie is niet juist ingesteld.

Oplossing: Gebruik een van de volgende methoden om het routeringsprobleem op te lossen:

  • Controleer of de defaults.deployment_name parameter de juiste standaard batchimplementatie definieert. Zie De standaardbatchimplementatie bijwerken voor meer informatie.

  • Definieer de route met een implementatiespecifieke header.

Beperkingen en niet-ondersteunde scenario's

Wanneer u machine learning-implementatieoplossingen ontwerpt die afhankelijk zijn van batch-eindpunten, moet u er rekening mee houden dat sommige configuraties en scenario's niet worden ondersteund. In de volgende secties worden niet-ondersteunde werkruimten en rekenresources en ongeldige typen voor invoerbestanden geïdentificeerd.

Niet-ondersteunde werkruimteconfiguraties

De volgende werkruimteconfiguraties worden niet ondersteund voor batchimplementatie:

  • Werkruimten die zijn geconfigureerd met een Azure ContainerRegistries waarvoor quarantainefunctie is ingeschakeld
  • Werkruimten met door de klant beheerde sleutels

Niet-ondersteunde rekenconfiguraties

De volgende rekenconfiguraties worden niet ondersteund voor batchimplementatie:

  • Azure ARC Kubernetes-clusters
  • Gedetailleerde resourceaanvraag (geheugen, vCPU, GPU) voor Azure Kubernetes-clusters (alleen het aantal exemplaren kan worden aangevraagd)

Niet-ondersteunde invoerbestandstypen

De volgende invoerbestandstypen worden niet ondersteund voor batchimplementatie:

  • Tabellaire gegevenssets (V1)
  • Mappen en bestandsgegevenssets (V1)
  • MLtable (V2)