Felsöka batchslutpunkter
GÄLLER FÖR:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (aktuell)
Den här artikeln innehåller vägledning för felsökning av vanliga fel när du använder batchslutpunkter för batchbedömning i Azure Mašinsko učenje. I följande avsnitt beskrivs hur du analyserar batchbedömningsloggar för att identifiera möjliga problem och scenarier som inte stöds. Du kan också granska rekommenderade lösningar för att lösa vanliga fel.
Hämta loggar för batchbedömningsjobb
När du har anropat en batchslutpunkt med hjälp av Azure CLI eller REST-API:et körs batchbedömningsjobbet asynkront. Det finns två alternativ för att hämta loggarna för ett batchbedömningsjobb:
Alternativ 1: Strömma jobbloggar till en lokal konsol. Endast loggar i mappen azureml-logs strömmas.
Kör följande kommando för att strömma systemgenererade loggar till konsolen. Ersätt parametern
<job_name>
med namnet på batchbedömningsjobbet:az ml job stream --name <job_name>
Alternativ 2: Visa jobbloggar i Azure Mašinsko učenje studio.
Kör följande kommando för att hämta jobblänken som ska användas i studion. Ersätt parametern
<job_name>
med namnet på batchbedömningsjobbet:az ml job show --name <job_name> --query services.Studio.endpoint -o tsv
Öppna jobblänken i studion.
I diagrammet för jobbet väljer du steget batchscoring .
På fliken Utdata + loggar väljer du en eller flera loggar att granska.
Granska loggfiler
Azure Mašinsko učenje innehåller flera typer av loggfiler och andra datafiler som du kan använda för att felsöka batchbedömningsjobbet.
De två mapparna på den översta nivån för batchbedömningsloggar är azureml-logs och loggar. Information från kontrollanten som startar bedömningsskriptet lagras i filen ~/azureml-logs/70_driver_log.txt .
Granska information på hög nivå
Den distribuerade typen av batchbedömningsjobb resulterar i loggar från olika källor, men två kombinerade filer ger information på hög nivå:
Fil | beskrivning |
---|---|
~/loggar/job_progress_overview.txt | Innehåller information på hög nivå om det aktuella antalet mini-batchar (även kallade uppgifter) som skapats och det aktuella antalet bearbetade minibatchs. När bearbetningen för mini-batchar upphör registrerar loggen resultatet av jobbet. Om jobbet misslyckas visas felmeddelandet i loggen och var felsökningen ska startas. |
~/logs/sys/master_role.txt | Tillhandahåller huvudnoden (kallas även orchestrator)-vyn för det jobb som körs. Den här loggen innehåller information om hur du skapar aktiviteter, förloppsövervakning och jobbresultatet. |
Granska stackspårningsdata efter fel
Andra filer innehåller information om möjliga fel i skriptet:
Fil | beskrivning |
---|---|
~/loggar/användare/error.txt | Innehåller en sammanfattning av fel i skriptet. |
~/logs/user/error/* | Innehåller fullständiga stackspårningar av undantag som genereras vid inläsning och körning av postskriptet. |
Granska processloggar per nod
En fullständig förståelse för hur varje nod kör ditt poängskript finns i de enskilda processloggarna för varje nod. Processloggarna lagras i mappen ~/logs/sys/node och grupperas efter arbetsnoder.
Mappen innehåller en <ip_address>/ undermapp som innehåller en <process_name>.txt fil med detaljerad information om varje mini-batch. Mappinnehållet uppdateras när en arbetare väljer eller slutför mini-batchen. För varje mini-batch innehåller loggfilen:
- IP-adressen och process-ID :t (PID) för arbetsprocessen.
- Det totala antalet objekt, antalet objekt som har bearbetats och antalet misslyckade objekt.
- Starttid, varaktighet, processtid och körningsmetodtid.
Granska periodiska kontroller per nod
Du kan också visa resultatet av periodiska kontroller av resursanvändningen för varje nod. Loggfilerna och installationsfilerna lagras i mappen ~/logs/perf .
Använd parametern --resource_monitor_interval
för att ändra kontrollintervallet i sekunder:
- Använd standard: Standardintervallet är 600 sekunder (cirka 10 minuter).
- Stoppa kontroller: Ange värdet till 0 för att sluta köra kontroller på noden.
Mappen innehåller en <ip_address>/ undermapp om varje mini-batch. Mappinnehållet uppdateras när en arbetare väljer eller slutför mini-batchen. För varje mini-batch innehåller mappen följande objekt:
Fil eller mapp | beskrivning |
---|---|
ås/ | Lagrar information om alla processer som körs i noden. En kontroll kör ett operativsystemkommando och sparar resultatet i en fil. I Linux är ps kommandot . Mappen innehåller följande objekt: - %Y%m%d%H: Undermapp som innehåller en eller flera processkontrollfiler. Undermappens namn är skapandedatum och tid för kontrollen (År, Månad, Dag, Timme). processes_%M: Fil i undermappen. Filen visar information om processkontrollen. Filnamnet slutar med kontrolltiden (minut) i förhållande till tiden för att skapa kontrollen. |
node_disk_usage.csv | Visar den detaljerade diskanvändningen för noden. |
node_resource_usage.csv | Tillhandahåller resursanvändningsöversikten för noden. |
processes_resource_usage.csv | Ger en resursanvändningsöversikt över varje process. |
Lägga till loggning i bedömningsskriptet
Du kan använda Python-loggning i bedömningsskriptet. Dessa loggar lagras i filen logs/user/stdout/<node_id>/processnummer<>.stdout.txt.
Följande kod visar hur du lägger till loggning i skriptet:
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")
Lösa vanliga fel
I följande avsnitt beskrivs vanliga fel som kan inträffa under utveckling och förbrukning av batchslutpunkter och steg för lösning.
Ingen modul med namnet azureml
Azure Mašinsko učenje batchdistribution kräver azureml-core-paketet i installationen.
Meddelandet loggades: "Ingen modul med namnet azureml
."
Orsak: Paketet azureml-core
verkar saknas i installationen.
Lösning: Lägg till paketet i azureml-core
din conda-beroendefil.
Inga utdata i förutsägelsefilen
Batch-distributionen förväntar sig att en tom mapp lagrar predictions.csv-filen. När distributionen påträffar en befintlig fil i den angivna mappen ersätter processen inte filinnehållet med de nya utdata eller skapar en ny fil med resultatet.
Meddelande loggat: Inget specifikt loggat meddelande.
Orsak: Batch-distributionen kan inte skriva över en befintlig predictions.csv fil.
Lösning: Om processen anger en plats för utdatamappen för förutsägelserna kontrollerar du att mappen inte innehåller en befintlig predictions.csv fil.
Tidsgränsen för Batch-processen
Batch-distributionen använder ett timeout
värde för att avgöra hur länge distributionen ska vänta tills varje batchprocess har slutförts. När körningen av en batch överskrider den angivna tidsgränsen avbryter batchdistributionen processen.
Avbrutna processer görs på nytt upp till det maximala antalet försök som anges i max_retries
värdet. Om tidsgränsfelet uppstår vid varje återförsök misslyckas distributionsjobbet.
Du kan konfigurera timeout
egenskaperna och max_retries
för varje distribution med parametern retry_settings
.
Meddelandet loggades: "Ingen förloppsuppdatering på [nummer] sekunder. Ingen förloppsuppdatering i den här kontrollen. Vänta [nummer] sekunder sedan den senaste uppdateringen."
Orsak: Batchkörningen överskrider den angivna tidsgränsen och maximalt antal återförsök. Den här åtgärden motsvarar felet för run()
funktionen i inmatningsskriptet.
Lösning: Öka timeout
värdet för distributionen. Som standard timeout
är värdet 30 och max_retries
värdet är 3. Om du vill fastställa ett lämpligt timeout
värde för distributionen bör du överväga hur många filer som ska bearbetas för varje batch och filstorlekarna. Du kan minska antalet filer som ska bearbetas och generera minibatch med mindre storlek. Den här metoden resulterar i snabbare körning.
Undantag i ScriptExecution.StreamAccess.Authentication
För att batchdistributionen ska lyckas måste den hanterade identiteten för beräkningsklustret ha behörighet att montera datatillgångslagringen. När den hanterade identiteten inte har tillräckliga behörigheter orsakar skriptet ett undantag. Det här felet kan också leda till att datatillgångslagringen inte monteras.
Meddelande loggat: "ScriptExecutionException orsakades av StreamAccessException. StreamAccessException orsakades av AuthenticationException."
Orsak: Beräkningsklustret där distributionen körs kan inte montera lagringen där datatillgången finns. Den hanterade identiteten för beräkningen har inte behörighet att utföra monteringen.
Lösning: Se till att den hanterade identitet som är associerad med beräkningsklustret där distributionen körs har minst åtkomst till lagringsblobdataläsaren till lagringskontot. Endast Azure Storage-kontoägare kan ändra åtkomstnivån i Azure-portalen.
Det gick inte att initiera datauppsättningen, det går inte att montera datauppsättningen
Batchdistributionsprocessen kräver monterad lagring för datatillgången. När lagringen inte monteras kan datauppsättningen inte initieras.
Meddelandet loggades: "Initieringen av datauppsättningen misslyckades: UserErrorException: Meddelande: Det går inte att montera datamängden(ID='xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx', name='None', version=None). Datamängdens källa är antingen inte tillgänglig eller innehåller inga data."
Orsak: Beräkningsklustret där distributionen körs kan inte montera lagringen där datatillgången finns. Den hanterade identiteten för beräkningen har inte behörighet att utföra monteringen.
Lösning: Se till att den hanterade identitet som är associerad med beräkningsklustret där distributionen körs har minst åtkomst till lagringsblobdataläsaren till lagringskontot. Endast Azure Storage-kontoägare kan ändra åtkomstnivån i Azure-portalen.
dataset_param har inget angivet värde eller standardvärde
Under batchdistributionen refererar datauppsättningsnoden till parametern dataset_param
. För att distributionen ska fortsätta måste parametern ha ett tilldelat värde eller ett angivet standardvärde.
Meddelande loggat: "Datauppsättningsnoden [kod] refererar till parametern dataset_param
, som inte har något angivet värde eller ett standardvärde."
Orsak: Indatatillgången som tillhandahålls till batchslutpunkten stöds inte.
Lösning: Se till att distributionsskriptet innehåller dataindata som stöds för batchslutpunkter.
Användarprogrammet misslyckas, körningen misslyckas
Vid skriptkörning för batchdistribution kan användarprogrammet eller körningen misslyckas om init()
funktionen eller run()
stöter på ett fel. Du kan granska felinformationen i en genererad loggfil.
Meddelande loggat: "Användarprogrammet misslyckades med undantag: Körningen misslyckades. Mer information finns i loggarna. Du kan kontrollera loggar/readme.txt för logglayouten."
Orsak: Funktionen init()
eller run()
genererar ett fel under körningen av bedömningsskriptet.
Lösning: Följ dessa steg för att hitta information om funktionsfelen:
I Azure Mašinsko učenje studio går du till den misslyckade batchdistributionsjobbkörningen och väljer fliken Utdata + loggar.
Öppna filloggens> användarfel>><node_identifier>>processnummer<>.txt.
Leta upp felmeddelandet som genererats av
init()
funktionen ellerrun()
.
ValueError: Inga objekt att sammanfoga
För att batchdistributionen ska lyckas måste varje fil i en mini-batch vara giltig och implementera en filtyp som stöds. Tänk på att MLflow-modeller endast stöder en delmängd av filtyperna. Mer information finns i Överväganden vid distribution till batch-slutsatsdragning.
Meddelande loggat: "ValueError: Inga objekt att sammanfoga."
Orsak: Alla filer i den genererade mini-batchen är antingen skadade eller filtyper som inte stöds.
Lösning: Följ dessa steg för att hitta information om de misslyckade filerna:
I Azure Mašinsko učenje studio går du till den misslyckade batchdistributionsjobbkörningen och väljer fliken Utdata + loggar.
Öppna filen loggar>användaren>stdout><node_identifier>>processnummer<>.txt.
Leta efter poster som beskriver filindatafelet, till exempel "ERROR:azureml:Error processing input file".
Om filtypen inte stöds kan du granska listan över filer som stöds. Du kan behöva ändra filtypen för indata eller anpassa distributionen genom att tillhandahålla ett bedömningsskript. Mer information finns i Använda MLflow-modeller med ett bedömningsskript.
Ingen lyckad mini-batch
Batchdistributionsprocessen kräver batchslutpunkter för att tillhandahålla data i det format som förväntas av run()
funktionen. Om indatafiler är skadade filer eller inte är kompatibla med modellsignaturen run()
kan funktionen inte returnera en lyckad mini-batch.
Meddelande loggat: "Inget lyckat mini batch-objekt som returnerades från run(). Kontrollera svaret: run()' i https://aka.ms/batch-inference-documentation
.
Orsak: Batchslutpunkten kunde inte tillhandahålla data i förväntat format till run()
funktionen. Det här problemet kan bero på att skadade filer läs- eller inkompatibilitetsfel för indata med modellens signatur (MLflow).
Lösning: Följ dessa steg för att hitta information om den misslyckade mini-batchen:
I Azure Mašinsko učenje studio går du till den misslyckade batchdistributionsjobbkörningen och väljer fliken Utdata + loggar.
Öppna filen loggar>användaren>stdout><node_identifier>>processnummer<>.txt.
Leta efter poster som beskriver indatafilens fel för mini-batchen, till exempel "Fel vid bearbetning av indatafil". Informationen bör beskriva varför indatafilen inte kan läsas korrekt.
Målgrupp eller tjänst tillåts inte
Microsoft Entra-token utfärdas för specifika åtgärder som identifierar de tillåtna användarna (målgruppen), tjänsten och resurserna. Autentiseringstoken för REST-API:et för Batch Endpoint måste ange parametern resource
till https://ml.azure.com
.
Meddelande loggat: Inget specifikt loggat meddelande.
Orsak: Du försöker anropa REST-API:et för batchslutpunkten och distributionen med en token utfärdad för en annan målgrupp eller tjänst.
Lösning: Följ dessa steg för att lösa det här autentiseringsproblemet:
När du genererar en autentiseringstoken för Batch Endpoint REST API anger du parametern
resource
tillhttps://ml.azure.com
.Observera att den här resursen skiljer sig från den resurs som du använder för att hantera slutpunkten från REST-API:et. Alla Azure-resurser (inklusive batchslutpunkter) använder resursen
https://management.azure.com
för hantering.När du anropar REST-API:et för en batchslutpunkt och distribution bör du vara noga med att använda token som utfärdats för REST-API:et för Batch-slutpunkten och inte en token som utfärdats för en annan målgrupp eller tjänst. I varje fall bekräftar du att du använder rätt resurs-URI.
Om du vill använda hanterings-API:et och jobbanrops-API:et samtidigt behöver du två token. Mer information finns i Autentisering på batchslutpunkter (REST).
Inga giltiga distributioner att dirigera
För att batchdistributionen ska lyckas måste batchslutpunkten ha minst en giltig distributionsväg. Standardmetoden är att definiera standarddistributionen av batchar med hjälp av parametern defaults.deployment_name
.
Meddelande loggat: "Inga giltiga distributioner att dirigera till. Kontrollera att slutpunkten har minst en distribution med positiva viktvärden eller använd en distributionsspecifik rubrik för att dirigera."
Orsak: Standarddistributionen av batchen är inte korrekt inställd.
Lösning: Använd någon av följande metoder för att lösa routningsproblemet:
Bekräfta att parametern
defaults.deployment_name
definierar rätt standarddistribution av batchar. Mer information finns i Uppdatera standarddistributionen av batchar.Definiera vägen med ett distributionsspecifikt huvud.
Begränsningar och scenarier som inte stöds
När du utformar distributionslösningar för maskininlärning som förlitar sig på batchslutpunkter bör du tänka på att vissa konfigurationer och scenarier inte stöds. I följande avsnitt identifieras arbetsytor och beräkningsresurser som inte stöds och ogiltiga typer för indatafiler.
Konfigurationer av arbetsytor som inte stöds
Följande konfigurationer av arbetsytor stöds inte för batchdistribution:
- Arbetsytor som konfigurerats med en Azure Container Registries med karantänfunktionen aktiverad
- Arbetsytor med kundhanterade nycklar
Beräkningskonfigurationer som inte stöds
Följande beräkningskonfigurationer stöds inte för batchdistribution:
- Azure ARC Kubernetes-kluster
- Detaljerad resursbegäran (minne, vCPU, GPU) för Azure Kubernetes-kluster (endast antal instanser kan begäras)
Indatafiltyper som inte stöds
Följande indatafiltyper stöds inte för batchdistribution:
- Tabelldatauppsättningar (V1)
- Mappar och fildatauppsättningar (V1)
- MLtable (V2)