Felsöka Kubernetes Compute

I den här artikeln får du lära dig hur du felsöker vanliga arbetsbelastningsfel på Kubernetes-beräkningen. Vanliga fel är träningsjobb och slutpunktsfel.

Slutsatsdragningsguide

De vanliga Kubernetes-slutpunktsfelen på Kubernetes-beräkningen kategoriseras i två omfång: beräkningsomfång och klusteromfång. Felen i beräkningsomfånget är relaterade till beräkningsmålet, till exempel att beräkningsmålet inte hittas eller att beräkningsmålet inte är tillgängligt. Klusteromfångsfelen är relaterade till det underliggande Kubernetes-klustret, till exempel att själva klustret inte kan nås eller att klustret inte hittas.

Kubernetes-beräkningsfel

Följande är vanliga feltyper i beräkningsomfånget som du kan stöta på när du använder Kubernetes-beräkning för att skapa onlineslutpunkter och onlinedistributioner för modellinferens i realtid. Du kan felsöka genom att följa de länkade avsnitten för riktlinjer:

FEL: GenericComputeError

Felmeddelandet är som:

Failed to get compute information.

Det här felet bör inträffa när systemet inte kunde hämta beräkningsinformationen från Kubernetes-klustret. Du kan kontrollera följande objekt för att felsöka problemet:

  • Kontrollera Kubernetes-klusterstatusen. Om klustret inte körs måste du starta klustret först.
  • Kontrollera Kubernetes-klusterhälsan.
    • Du kan visa hälsokontrollrapporten för klustret för eventuella problem, till exempel om klustret inte kan nås.
    • Du kan gå till arbetsyteportalen för att kontrollera beräkningsstatusen.
  • Kontrollera om instanstyperna är korrekta. Du kan kontrollera instanstyperna som stöds i Kubernetes-beräkningsdokumentationen.
  • Försök att koppla från och koppla om beräkningen till arbetsytan om det är tillämpligt.

Kommentar

Om du vill felsöka fel genom att ansluta igen kan du garantera att återansluta med exakt samma konfiguration som tidigare frånkopplad beräkning, till exempel samma beräkningsnamn och namnområde, annars kan det uppstå andra fel.

FEL: ComputeNotFound

Felmeddelandet är följande:

Cannot find Kubernetes compute.

Det här felet bör inträffa när:

  • Systemet kan inte hitta beräkningen när du skapar/uppdaterar ny onlineslutpunkt/distribution.
  • Beräkningen av befintliga onlineslutpunkter/distributioner har tagits bort.

Du kan kontrollera följande objekt för att felsöka problemet:

  • Försök återskapa slutpunkten och distributionen.
  • Försök att koppla från och koppla om beräkningen till arbetsytan. Var uppmärksam på fler anteckningar om återanslutning.

FEL: ComputeNotAccessible

Felmeddelandet är följande:

The Kubernetes compute is not accessible.

Det här felet bör inträffa när arbetsytans MSI (hanterad identitet) inte har åtkomst till AKS-klustret. Du kan kontrollera om arbetsytans MSI har åtkomst till AKS, och om inte kan du följa det här dokumentet för att hantera åtkomst och identitet.

FEL: InvalidComputeInformation

Felmeddelandet är följande:

The compute information is invalid.

Det finns en valideringsprocess för beräkningsmål när du distribuerar modeller till ditt Kubernetes-kluster. Det här felet bör inträffa när beräkningsinformationen är ogiltig. Beräkningsmålet hittades till exempel inte, eller så har konfigurationen av Azure Machine Learning-tillägget uppdaterats i kubernetes-klustret.

Du kan kontrollera följande objekt för att felsöka problemet:

  • Kontrollera om beräkningsmålet som du använde är korrekt och befintligt på din arbetsyta.
  • Försök att koppla från och koppla om beräkningen till arbetsytan. Var uppmärksam på fler anteckningar om återanslutning.

FEL: InvalidComputeNoKubernetesConfiguration

Felmeddelandet är följande:

The compute kubeconfig is invalid.

Det här felet bör inträffa när systemet inte kunde hitta någon konfiguration för att ansluta till klustret, till exempel:

  • Det finns ingen Azure Relay-konfiguration för Arc-Kubernetes-klustret.
  • Det finns ingen AKS-konfiguration för AKS-kluster.

Om du vill återskapa konfigurationen av beräkningsanslutningen i klustret kan du försöka koppla från och koppla om beräkningen till arbetsytan. Var uppmärksam på fler anteckningar om återanslutning.

Kubernetes-klusterfel

Nedan visas en lista över feltyper i klusteromfånget som du kan stöta på när du använder Kubernetes-beräkning för att skapa onlineslutpunkter och onlinedistributioner för modellinferens i realtid, vilket du kan felsöka genom att följa riktlinjen:

FEL: GenericClusterError

Felmeddelandet är följande:

Failed to connect to Kubernetes cluster: <message>

Det här felet bör inträffa när systemet inte kunde ansluta till Kubernetes-klustret av okänd anledning. Du kan kontrollera följande objekt för att felsöka problemet:

För AKS-kluster:

  • Kontrollera om AKS-klustret har stängts av.
    • Om klustret inte körs måste du starta klustret först.
  • Kontrollera om AKS-klustret har aktiverat det valda nätverket med hjälp av auktoriserade IP-intervall.
    • Om AKS-klustret har aktiverat auktoriserade IP-intervall kontrollerar du att alla IP-intervall för Azure Machine Learning-kontrollplanet har aktiverats för AKS-klustret. Mer information finns i det här dokumentet.

För ett AKS-kluster eller ett Azure Arc-aktiverat Kubernetes-kluster:

  • Kontrollera om Kubernetes API-servern är tillgänglig genom att köra kubectl kommandot i klustret.

FEL: ClusterNotReachable

Felmeddelandet är följande:

The Kubernetes cluster is not reachable. 

Det här felet bör inträffa när systemet inte kan ansluta till ett kluster. Du kan kontrollera följande objekt för att felsöka problemet:

För AKS-kluster:

  • Kontrollera om AKS-klustret har stängts av.
    • Om klustret inte körs måste du starta klustret först.

För ett AKS-kluster eller ett Azure Arc-aktiverat Kubernetes-kluster:

  • Kontrollera om Kubernetes API-servern är tillgänglig genom att köra kubectl kommandot i klustret.

ERROR: ClusterNotFound

Felmeddelandet är följande:

Cannot found Kubernetes cluster. 

Det här felet bör inträffa när systemet inte kan hitta AKS/Arc-Kubernetes-klustret.

Du kan kontrollera följande objekt för att felsöka problemet:

  • Kontrollera först klusterresurs-ID:t i Azure-portalen för att kontrollera om Kubernetes-klusterresursen fortfarande finns och körs normalt.
  • Om klustret finns och körs kan du försöka koppla från och koppla om beräkningen till arbetsytan. Var uppmärksam på fler anteckningar om återanslutning.

Dricks

Mer felsökningsguide för vanliga fel när du skapar/uppdaterar Kubernetes onlineslutpunkter och distributioner finns i Så här felsöker du onlineslutpunkter.

Identitetsfel

FEL: RefreshExtensionIdentityNotSet

Det här felet uppstår när tillägget installeras men tilläggsidentiteten inte är korrekt tilldelad. Du kan försöka installera om tillägget för att åtgärda det.

Observera att det här felet endast gäller hanterade kluster

Så här kontrollerar du att sslCertPemFile och sslKeyPemFile är korrekta?

För att tillåta att kända fel visas kan du använda kommandona för att köra en baslinjekontroll för certifikatet och nyckeln. Förvänta dig att det andra kommandot returnerar "RSA-nyckel ok" utan att fråga dig om lösenord.

openssl x509 -in cert.pem -noout -text
openssl rsa -in key.pem -noout -check

Kör kommandona för att kontrollera om sslCertPemFile och sslKeyPemFile matchas:

openssl x509 -in cert.pem -noout -modulus | md5sum
openssl rsa -in key.pem -noout -modulus | md5sum

För sslCertPemFile är det det offentliga certifikatet. Den bör innehålla certifikatkedjan som innehåller följande certifikat och bör finnas i sekvensen för servercertifikatet, det mellanliggande CA-certifikatet och rotcertifikatutfärdarcertifikatet:

  • Servercertifikatet: servern visas för klienten under TLS-handskakningen. Den innehåller serverns offentliga nyckel, domännamn och annan information. Servercertifikatet signeras av en mellanliggande certifikatutfärdare (CA) som går i god för serverns identitet.
  • Mellanliggande CA-certifikat: den mellanliggande certifikatutfärdare presenterar för klienten för att bevisa sin behörighet att signera servercertifikatet. Den innehåller den mellanliggande certifikatmottagarens offentliga nyckel, namn och annan information. Det mellanliggande CA-certifikatet signeras av en rotcertifikatutfärdare som går i god för den mellanliggande certifikatutfärdaridentiteten.
  • Rotcertifikatutfärdarcertifikatet: rotcertifikatutfärdare presenterar för klienten för att bevisa sin behörighet att signera det mellanliggande CA-certifikatet. Den innehåller rotcertifikatutfärdares offentliga nyckel, namn och annan information. Rotcertifikatutfärdarcertifikatet är självsignerat och betrott av klienten.

Träningsguide

När träningsjobbet körs kan du kontrollera jobbstatusen i arbetsyteportalen. När du stöter på onormal jobbstatus, till exempel om jobbet har gjorts om flera gånger, eller om jobbet har fastnat i initieringstillståndet, eller till och med jobbet till slut har misslyckats, kan du följa guiden för att felsöka problemet.

Jobbåterförsöksfelsökning

Om träningsjobbspodden som körs i klustret avslutades på grund av att noden körs till noden OOM (slut på minne) görs jobbet automatiskt ett nytt försök till en annan tillgänglig nod.

Om du vill felsöka rotorsaken till jobbförsöket ytterligare kan du gå till arbetsyteportalen för att kontrollera jobbförsöksloggen.

  • Varje återförsökslogg registreras i en ny loggmapp med formatet "återförsöksnummer<>"(till exempel: försök igen 001).

Sedan kan du hämta mappningsinformationen för jobbnoden igen för att ta reda på vilken nod som återförsöksjobbet har körts på.

Screenshot of adding a new extension to the Azure Arc-enabled Kubernetes cluster from the Azure portal.

Du kan hämta mappningsinformation för jobbnoder från amlarc_cr_bootstrap.log under system_logs mapp.

Värdnamnet för noden, som jobbpodden körs på, anges i den här loggen, till exempel:

++ echo 'Run on node: ask-agentpool-17631869-vmss0000"

"ask-agentpool-17631869-vmss0000" representerar nodens värdnamn som kör det här jobbet i AKS-klustret. Sedan kan du komma åt klustret för att kontrollera nodstatusen för ytterligare undersökning.

Jobbpodden fastnar i init-tillstånd

Om jobbet körs längre än förväntat och om du upptäcker att dina jobbpoddar fastnar i ett Init-tillstånd med den här varningen Unable to attach or mount volumes: *** failed to get plugin from volumeSpec for volume ***-blobfuse-*** err=no volume plugin matchedkan problemet uppstå eftersom Azure Machine Learning-tillägget inte stöder nedladdningsläge för indata.

Lös problemet genom att ändra till monteringsläge för dina indata.

Vanliga fel vid jobbfel

Nedan visas en lista över vanliga feltyper som du kan stöta på när du använder Kubernetes-beräkning för att skapa och köra ett träningsjobb, som du kan felsöka genom att följa riktlinjen:

Jobbet misslyckades. 137

Om felmeddelandet är:

Azure Machine Learning Kubernetes job failed. 137:PodPattern matched: {"containers":[{"name":"training-identity-sidecar","message":"Updating certificates in /etc/ssl/certs...\n1 added, 0 removed; done.\nRunning hooks in /etc/ca-certificates/update.d...\ndone.\n * Serving Flask app 'msi-endpoint-server' (lazy loading)\n * Environment: production\n   WARNING: This is a development server. Do not use it in a production deployment.\n   Use a production WSGI server instead.\n * Debug mode: off\n * Running on http://127.0.0.1:12342/ (Press CTRL+C to quit)\n","code":137}]}

Kontrollera proxyinställningen och kontrollera om 127.0.0.1 har lagts till i proxy-skip-range när du använder az connectedk8s connect genom att följa nätverkskonfigurationen.

Jobbet misslyckades. E45004

Om felmeddelandet är:

Azure Machine Learning Kubernetes job failed. E45004:"Training feature is not enabled, please enable it when install the extension."

Kontrollera om du har enableTraining=True angett när du installerar Azure Machine Learning-tillägget. Mer information finns i Distribuera Azure Machine Learning-tillägget på AKS- eller Arc Kubernetes-kluster

Jobbet misslyckades. 400

Om felmeddelandet är:

Azure Machine Learning Kubernetes job failed. 400:{"Msg":"Encountered an error when attempting to connect to the Azure Machine Learning token service","Code":400}

Du kan följa felsökningsavsnittet Private Link för att kontrollera nätverksinställningarna.

Erbjud antingen en kontonyckel eller en SAS-token

Om du behöver komma åt Azure Container Registry (ACR) för Docker-avbildningen och få åtkomst till lagringskontot för träningsdata bör det här problemet inträffa när beräkningen inte har angetts med en hanterad identitet.

För att få åtkomst till Azure Container Registry (ACR) från ett Kubernetes-beräkningskluster för Docker-avbildningar eller komma åt ett lagringskonto för träningsdata måste du koppla Kubernetes-beräkningen med en systemtilldelad eller användartilldelad hanterad identitet aktiverad.

I träningsscenariot ovan är den här databehandlingsidentiteten nödvändig för att Kubernetes-beräkning ska kunna användas som autentiseringsuppgifter för att kommunicera mellan ARM-resursen som är bunden till arbetsytan och Kubernetes-beräkningsklustret. Så utan den här identiteten misslyckas träningsjobbet och rapporterar saknade kontonycklar eller sas-token. Ta åtkomst till lagringskontot, till exempel om du inte anger en hanterad identitet till Din Kubernetes-beräkning, misslyckas jobbet med följande felmeddelande:

Unable to mount data store workspaceblobstore. Give either an account key or SAS token

Orsaken är att standardlagringskontot för maskininlärningsarbetsytan utan autentiseringsuppgifter inte är tillgängligt för träningsjobb i Kubernetes-beräkning.

Du kan åtgärda det här problemet genom att tilldela hanterad identitet till beräkningssteget i beräkningsanslutningssteget, eller tilldela hanterad identitet till beräkningen när den har kopplats. Mer information finns i Tilldela hanterad identitet till beräkningsmålet.

AzureBlob-auktoriseringen misslyckades

Om du behöver komma åt AzureBlob för datauppladdning eller nedladdning i dina träningsjobb på Kubernetes-beräkning misslyckas jobbet med följande felmeddelande:

Unable to upload project files to working directory in AzureBlob because the authorization failed. 

Orsaken är att auktoriseringen misslyckades när jobbet försöker ladda upp projektfilerna till AzureBlob. Du kan kontrollera följande objekt för att felsöka problemet:

  • Kontrollera att lagringskontot har aktiverat undantagen "Tillåt att Azure-tjänster i listan över betrodda tjänster får åtkomst till det här lagringskontot" och att arbetsytan finns i listan över resursinstanser.
  • Kontrollera att arbetsytan har en systemtilldelad hanterad identitet.

Vi kan använda metoden för att kontrollera konfigurationen av privata länkar genom att logga in på en podd i Kubernetes-klustret och sedan kontrollera relaterade nätverksinställningar.

  • Hitta arbetsyte-ID i Azure-portalen eller hämta det här ID:t genom att köra az ml workspace show på kommandoraden.

  • Visa alla azureml-fe-poddar som körs av kubectl get po -n azureml -l azuremlappname=azureml-fe.

  • Logga in på någon av dem kör kubectl exec -it -n azureml {scorin_fe_pod_name} bash.

  • Om klustret inte använder proxykörningen kör nslookup {workspace_id}.workspace.{region}.api.azureml.msdu . Om du konfigurerar en privat länk från VNet till arbetsytan korrekt bör den interna IP-adressen i det virtuella nätverket besvaras via DNSLookup-verktyget .

  • Om klustret använder proxy kan du försöka curl använda arbetsytan

curl https://{workspace_id}.workspace.westcentralus.api.azureml.ms/metric/v2.0/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.MachineLearningServices/workspaces/{workspace_name}/api/2.0/prometheus/post -X POST -x {proxy_address} -d {} -v -k

När proxyn och arbetsytan är korrekt konfigurerade med en privat länk bör du observera ett försök att ansluta till en intern IP-adress. Ett svar med en HTTP 401-statuskod förväntas i det här scenariot om en token inte tillhandahålls.

Andra kända problem

Kubernetes-beräkningsuppdateringen börjar inte gälla

För närvarande tillåter inte CLI v2 och SDK v2 uppdatering av någon konfiguration av en befintlig Kubernetes-beräkning. Till exempel börjar det inte gälla att ändra namnområdet.

Namn på arbetsyta eller resursgrupp slutar med "-"

En vanlig orsak till felet "InternalServerError" när du skapar arbetsbelastningar, till exempel distributioner, slutpunkter eller jobb i en Kubernetes-beräkning, är att specialtecken som "-" finns i slutet av arbetsytan eller resursgruppens namn.

Nästa steg