Delen via


Problemen met batch-eindpunten oplossen

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

Meer informatie over het oplossen van veelvoorkomende fouten die u kunt tegenkomen bij het gebruik van batcheindpunten voor batchscores. In dit artikel leert u het volgende:

Logboeken van een batchscoretaak begrijpen

Logboeken ophalen

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

Optie 1: Logboeken streamen naar lokale console

U kunt de volgende opdracht uitvoeren om door het systeem gegenereerde logboeken naar uw console te streamen. Alleen logboeken in de azureml-logs map worden gestreamd.

az ml job stream --name <job_name>

Optie 2: Logboeken weergeven in Studio

Als u de koppeling naar de uitvoering in Studio wilt ophalen, voert u het volgende uit:

az ml job show --name <job_name> --query services.Studio.endpoint -o tsv
  1. Open de taak in studio met behulp van de waarde die wordt geretourneerd door de bovenstaande opdracht.
  2. Batchscoring kiezen
  3. Het tabblad Uitvoer en logboeken openen
  4. Kies een of meer logboeken die u wilt bekijken

Inzicht in logboekstructuur

Er zijn twee logboekmappen op het hoogste niveau en azureml-logslogs.

Het bestand ~/azureml-logs/70_driver_log.txt bevat informatie van de controller waarmee het scorescript wordt gestart.

Vanwege de gedistribueerde aard van batchscoretaken zijn er logboeken uit verschillende bronnen. Er worden echter twee gecombineerde bestanden gemaakt die informatie op hoog niveau bieden:

  • ~/logs/job_progress_overview.txt: Dit bestand bevat informatie op hoog niveau over het aantal minibatches (ook wel taken genoemd) dat tot nu toe is gemaakt en het aantal minibatches dat tot nu toe is verwerkt. Als de minibatches eindigen, worden in het logboek de resultaten van de taak vastgelegd. Als de taak is mislukt, wordt het foutbericht weergegeven en waar u de probleemoplossing kunt starten.

  • ~/logs/sys/master_role.txt: Dit bestand biedt de principal-knooppuntweergave (ook wel orchestrator genoemd) van de actieve taak. Dit logboek bevat informatie over het maken van taken, voortgangsbewaking, het taakresultaat.

Voor een beknopt begrip van fouten in uw script is er:

  • ~/logs/user/error.txt: dit bestand probeert de fouten in uw script samen te vatten.

Voor meer informatie over fouten in uw script is het volgende mogelijk:

  • ~/logs/user/error/: Dit bestand bevat volledige stacktraceringen van uitzonderingen die zijn opgetreden tijdens het laden en uitvoeren van het invoerscript.

Wanneer u een volledig inzicht nodig hebt in hoe elk knooppunt het scorescript heeft uitgevoerd, bekijkt u de afzonderlijke proceslogboeken voor elk knooppunt. De proceslogboeken vindt u in de sys/node map, gegroepeerd op werkknooppunten:

  • ~/logs/sys/node/<ip_address>/<process_name>.txt: Dit bestand bevat gedetailleerde informatie over elke minibatch terwijl het wordt opgehaald of voltooid door een werkrol. Voor elke minibatch bevat dit bestand het volgende:

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

U kunt ook de resultaten bekijken van periodieke controles van het resourcegebruik voor elk knooppunt. De logboekbestanden en installatiebestanden bevinden zich in deze map:

  • ~/logs/perf: Ingesteld --resource_monitor_interval om het controle-interval in seconden te wijzigen. Het standaardinterval is 600, wat ongeveer 10 minuten is. Als u de bewaking wilt stoppen, stelt u de waarde in op 0. Elke <ip_address> map bevat:

    • os/: Informatie 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 .
      • %Y%m%d%H: De naam van de submap is de tijd tot uur.
        • processes_%M: Het bestand eindigt met de minuut van de controletijd.
    • node_disk_usage.csv: Gedetailleerd schijfgebruik van het knooppunt.
    • node_resource_usage.csv: Overzicht van resourcegebruik van het knooppunt.
    • processes_resource_usage.csv: Overzicht van resourcegebruik van elk proces.

Scorescript aanmelden

U kunt Python-logboekregistratie gebruiken in uw scorescript. Logboeken worden opgeslagen in logs/user/stdout/<node_id>/processNNN.stdout.txt.

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

Algemene problemen

De volgende sectie bevat veelvoorkomende problemen en oplossingen die u kunt zien tijdens het ontwikkelen en verbruik van batcheindpunten.

Geen module met de naam 'azureml'

Bericht geregistreerd: No module named 'azureml'.

Reden: Voor Azure Machine Learning Batch-implementaties moet het pakket azureml-core worden geïnstalleerd.

Oplossing: Voeg dit toe azureml-core aan uw conda-afhankelijkhedenbestand.

Uitvoer bestaat al

Reden: Azure Machine Learning Batch-implementatie kan het predictions.csv bestand dat door de uitvoer wordt gegenereerd, niet overschrijven.

Oplossing: Als u een uitvoerlocatie voor de voorspellingen hebt aangegeven, controleert u of het pad leidt naar een niet-bestaand bestand.

De functie run() in het invoerscript had een time-out voor [getal] keer

Bericht geregistreerd: No progress update in [number] seconds. No progress update in this check. Wait [number] seconds since last update.

Reden: Batchimplementaties kunnen worden geconfigureerd met een timeout waarde die aangeeft hoe lang de implementatie moet wachten tot één batch is verwerkt. Als de uitvoering van de batch meer dan een dergelijke waarde kost, wordt de taak afgebroken. Taken die zijn afgebroken, kunnen maximaal een maximum aantal keren opnieuw worden geprobeerd die ook kunnen worden geconfigureerd. Als de timeout taak zich voordoet bij elke nieuwe poging, mislukt de implementatietaak. Deze eigenschappen kunnen worden geconfigureerd voor elke implementatie.

Oplossing: Verhoog de timemout waarde van de implementatie door de implementatie bij te werken. Deze eigenschappen worden geconfigureerd in de parameter retry_settings. Standaard wordt een timeout=30 en retries=3 geconfigureerd. Houd bij het bepalen van de waarde van de timeoutbestanden rekening met het aantal bestanden dat in elke batch wordt verwerkt en de grootte van elk van deze bestanden. U kunt ze ook verlagen om rekening te houden met meer minibatches van kleinere grootte en dus sneller uit te voeren.

ScriptExecution.StreamAccess.Authentication

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.

Oplossingen: Zorg ervoor dat de identiteit die is gekoppeld aan het rekencluster waarop uw implementatie wordt uitgevoerd, ten minste toegang heeft tot de opslagaccount voor opslagblobgegevenslezer . Alleen eigenaren van opslagaccounts kunnen uw toegangsniveau wijzigen via Azure Portal.

Initialisatie van gegevensset is mislukt

Bericht vastgelegd: Initialisatie van gegevensset is mislukt: UserErrorException: Bericht: Kan gegevensset(id='xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx', name='None', version=None' niet koppelen). 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.

Oplossingen: Zorg ervoor dat de identiteit die is gekoppeld aan het rekencluster waarop uw implementatie wordt uitgevoerd, ten minste toegang heeft tot de opslagaccount voor opslagblobgegevenslezer . Alleen eigenaren van opslagaccounts kunnen uw toegangsniveau wijzigen via Azure Portal.

Gegevenssetknooppunt [code] verwijst naar parameter dataset_param die geen opgegeven waarde of een standaardwaarde heeft

Bericht vastgelegd: gegevenssetknooppunt [code] verwijst naar een 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 u een gegevensinvoer levert die wordt ondersteund voor batch-eindpunten.

Gebruikersprogramma is mislukt met uitzondering: Uitvoeren is mislukt. Controleer de logboeken op details

Bericht geregistreerd: Gebruikersprogramma is mislukt met uitzondering: Uitvoeren is mislukt. Controleer de logboeken op details. U kunt logboeken/readme.txt controleren op de indeling van logboeken.

Reden: er is een fout opgetreden tijdens het uitvoeren van het init() scorescript of run() de functie.

Oplossing: Ga naar Uitvoer en logboeken en open het bestand op logs > user > error > 10.0.0.X > process000.txt. U ziet het foutbericht dat is gegenereerd door de init() of run() methode.

ValueError: Geen objecten die moeten worden samengevoegd

Bericht vastgelegd: ValueError: Er kunnen geen objecten worden samengevoegd.

Reden: Alle bestanden in de gegenereerde minibatch zijn beschadigd of niet-ondersteunde bestandstypen. Houd er rekening mee dat MLflow-modellen een subset van bestandstypen ondersteunen, zoals beschreven bij overwegingen bij het implementeren naar batchdeductie.

Oplossing: Ga naar het bestand logs/usr/stdout/<process-number>/process000.stdout.txt en zoek naar vermeldingen 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 zoals aangegeven in MLflow-modellen gebruiken met een scorescript.

Er is geen geslaagd minibatchitem geretourneerd vanuit run()

Bericht geregistreerd: er is geen geslaagd 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() methode leveren. Dit kan worden veroorzaakt doordat beschadigde bestanden worden gelezen of incompatibiliteit van de invoergegevens met de handtekening van het model (MLflow).

Oplossing: Als u wilt weten wat er mogelijk gebeurt, gaat u naar Uitvoer en logboeken en opent u het bestand op logs > user > stdout > 10.0.0.X > process000.stdout.txt. Zoek naar foutvermeldingen zoals Error processing input file. U vindt hier informatie over waarom het invoerbestand niet correct kan worden gelezen.

Doelgroepen in JWT zijn niet toegestaan

Context: Bij het aanroepen van een batch-eindpunt met behulp van de REST API's.

Reden: Het toegangstoken dat wordt gebruikt om de REST API aan te roepen voor het eindpunt/de implementatie, geeft een token aan dat is uitgegeven voor een andere doelgroep/service. Microsoft Entra-tokens worden uitgegeven voor specifieke acties.

Oplossing: Bij het genereren van een verificatietoken dat moet worden gebruikt met de REST API van het Batch-eindpunt, moet u ervoor zorgen dat de resource parameter is ingesteld op https://ml.azure.com. U ziet dat deze resource verschilt van de resource die u moet aangeven om het eindpunt te beheren met behulp van de REST API. Alle Azure-resources (inclusief batch-eindpunten) gebruiken de resource https://management.azure.com voor het beheren ervan. Zorg ervoor dat u de juiste resource-URI voor elk geval gebruikt. Als u de beheer-API en de aanroep-API voor taken tegelijk wilt gebruiken, hebt u twee tokens nodig. Zie voor meer informatie: Verificatie op batch-eindpunten (REST).

Er zijn 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: standaard batchimplementatie is niet juist ingesteld.

Oplossing: zorg ervoor dat de standaardbatchimplementatie juist is ingesteld. Mogelijk moet u de standaardbatchimplementatie bijwerken. Zie voor meer informatie: De standaardbatchimplementatie bijwerken

Beperkingen en niet-ondersteunde scenario's

Bij het ontwerpen van machine learning-oplossingen die afhankelijk zijn van batch-eindpunten, worden sommige configuraties en scenario's mogelijk niet ondersteund.

De volgende werkruimteconfiguraties worden niet ondersteund:

  • Werkruimten die zijn geconfigureerd met een Azure ContainerRegistries waarvoor de functie Quarantaine is ingeschakeld.
  • Werkruimten met door de klant beheerde sleutels (CMK).

De volgende rekenconfiguraties worden niet ondersteund:

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

De volgende invoertypen worden niet ondersteund:

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

Volgende stappen