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
Open de taakkoppeling in de studio.
Selecteer de batchscoringsstap in de grafiek van de taak.
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 ps de 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:
Ga in Azure Machine Learning-studio naar de uitvoering van de mislukte batchimplementatietaak en selecteer het tabblad Uitvoer en logboeken.
Open het bestand registreert>gebruikersfout>><node_identifier>>procesnummer<>.txt.
Zoek het foutbericht dat is gegenereerd door de
init()
ofrun()
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:
Ga in Azure Machine Learning-studio naar de uitvoering van de mislukte batchimplementatietaak en selecteer het tabblad Uitvoer en logboeken.
Open het bestand logboeken>stdout>><node_identifier>>procesnummer<>.txt.
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:
Ga in Azure Machine Learning-studio naar de uitvoering van de mislukte batchimplementatietaak en selecteer het tabblad Uitvoer en logboeken.
Open het bestand logboeken>stdout>><node_identifier>>procesnummer<>.txt.
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:
Wanneer u een verificatietoken genereert voor de REST API van het Batch-eindpunt, stelt u de
resource
parameter in ophttps://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.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)