Delen via


Problemen met online-eindpuntimplementatie en -score oplossen

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

In dit artikel wordt beschreven hoe u veelvoorkomende problemen met de implementatie en score van azure Machine Learning Online-eindpunten kunt oplossen.

De documentstructuur weerspiegelt de manier waarop u het oplossen van problemen moet benaderen:

  1. Gebruik lokale implementatie om uw modellen lokaal te testen en er fouten in op te sporen voordat u in de cloud implementeert.
  2. Gebruik containerlogboeken om problemen op te lossen.
  3. Inzicht in veelvoorkomende implementatiefouten die zich kunnen voordoen en hoe u deze kunt oplossen.

In de sectie HTTP-statuscodes wordt uitgelegd hoe aanroepen en voorspellingsfouten worden toegewezen aan HTTP-statuscodes wanneer u eindpunten scoren met REST-aanvragen.

Vereisten

  • Een Azure Machine Learning-werkruimte.
  • De Azure CLI en Azure Machine Learning CLI v2. De CLI (v2) installeren, instellen en gebruiken.

Tracering aanvragen

Er zijn twee ondersteunde traceringsheaders:

  • x-request-id is gereserveerd voor servertracering. Azure Machine Learning overschrijft deze header om ervoor te zorgen dat deze een geldige GUID is. Wanneer u een ondersteuningsticket voor een mislukte aanvraag maakt, voegt u de id van de mislukte aanvraag toe om het onderzoek te versnellen. U kunt ook de naam van de regio en de eindpuntnaam opgeven.

  • x-ms-client-request-id is beschikbaar voor clienttraceringsscenario's. Deze koptekst accepteert alleen alfanumerieke tekens, afbreekstreepjes en onderstrepingstekens en wordt afgekapt tot maximaal 40 tekens.

Lokaal implementeren

Lokale implementatie betekent dat u een model implementeert in een lokale Docker-omgeving. Lokale implementatie ondersteunt het maken, bijwerken en verwijderen van een lokaal eindpunt, en stelt u in staat om logboeken van het eindpunt aan te roepen en op te halen. Lokale implementatie is handig voor het testen en opsporen van fouten voordat de implementatie in de cloud wordt uitgevoerd.

Tip

U kunt ook het Python-pakket azure Machine Learning-deductie http-server gebruiken om lokaal fouten in uw scorescript op te sporen. Foutopsporing met de deductieserver helpt u bij het opsporen van fouten in het scorescript voordat u implementeert op lokale eindpunten, zodat u fouten kunt opsporen zonder dat dit wordt beïnvloed door de configuraties van de implementatiecontainer.

U kunt lokaal implementeren met Azure CLI of Python SDK. Azure Machine Learning-studio biedt geen ondersteuning voor lokale implementatie of lokale eindpunten.

Als u lokale implementatie wilt gebruiken, voegt u deze toe --local aan de juiste opdracht.

az ml online-deployment create --endpoint-name <endpoint-name> -n <deployment-name> -f <spec_file.yaml> --local

De volgende stappen worden uitgevoerd tijdens de lokale implementatie:

  1. Docker bouwt een nieuwe containerinstallatiekopie of haalt een bestaande installatiekopie op uit de lokale Docker-cache. Docker gebruikt een bestaande installatiekopieën als deze overeenkomt met het omgevingsonderdeel van het specificatiebestand.
  2. Docker start de nieuwe container met gekoppelde lokale artefacten, zoals model- en codebestanden.

Zie Lokaal implementeren en fouten opsporen met behulp van een lokaal eindpunt voor meer informatie.

Tip

U kunt Visual Studio Code gebruiken om uw eindpunten lokaal te testen en fouten op te sporen. Zie Debug online eindpunten lokaal in Visual Studio Code voor meer informatie.

Containerlogboeken ophalen

U kunt geen directe toegang krijgen tot een virtuele machine (VM) waar een model wordt geïmplementeerd, maar u kunt logboeken ophalen uit een aantal containers die op de VIRTUELE machine worden uitgevoerd. De hoeveelheid informatie die u krijgt, is afhankelijk van de inrichtingsstatus van de implementatie. Als de opgegeven container actief is, ziet u de console-uitvoer. Anders krijgt u een bericht om het later opnieuw te proberen.

U kunt logboeken ophalen uit de volgende typen containers:

  • Het consolelogboek van de deductieserver bevat de uitvoer van afdruk- en logboekregistratiefuncties van uw scorescript score.py code.
  • Initialisatielogboeken voor opslag bevatten informatie over of code- en modelgegevens zijn gedownload naar de container. De container wordt uitgevoerd voordat de container van de deductieserver wordt uitgevoerd.

Beheerders hebben voor online-eindpunten van Kubernetes rechtstreeks toegang tot het cluster waar u het model implementeert en de logboeken in Kubernetes controleren. Bijvoorbeeld:

kubectl -n <compute-namespace> logs <container-name>

Notitie

Als u Python-logboekregistratie gebruikt, moet u ervoor zorgen dat u het juiste logboekregistratieniveau gebruikt, bijvoorbeeld INFOom berichten te publiceren naar logboeken.

Logboekuitvoer van containers bekijken

Gebruik de volgende opdracht om logboekuitvoer van een container weer te geven:

az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name> -l 100

Or

az ml online-deployment get-logs --endpoint-name <endpoint-name> --name <deployment-name> --lines 100

Logboeken worden standaard opgehaald van de deductieserver. U kunt logboeken ophalen uit de container voor opslag initialisatie door te geven –-container storage-initializer.

Voeg --resource-group en --workspace-name aan de opdrachten toe als u deze parameters nog niet hebt ingesteld via az configure. Voer de volgende opdracht uit voor informatie over het instellen van deze parameters of als u momenteel waarden hebt ingesteld:

az ml online-deployment get-logs -h

Voor meer informatie kunt u opdrachten toevoegen --help of --debug aan opdrachten toevoegen.

Veelvoorkomende implementatiefouten

De implementatiebewerkingsstatus kan de volgende veelvoorkomende implementatiefouten rapporteren:

Als u een online-implementatie van Kubernetes maakt of bijwerkt, ziet u ook veelvoorkomende fouten die specifiek zijn voor Kubernetes-implementaties.

FOUT: ImageBuildFailure

Deze fout wordt geretourneerd wanneer de Docker-installatiekopieomgeving wordt gebouwd. U kunt het buildlogboek controleren voor meer informatie over de fout. Het buildlogboek bevindt zich in de standaardopslag voor uw Azure Machine Learning-werkruimte.

De exacte locatie kan bijvoorbeeld worden geretourneerd als onderdeel van de fout "the build log under the storage account '[storage-account-name]' in the container '[container-name]' at the path '[path-to-the-log]'".

In de volgende secties worden veelvoorkomende scenario's met buildfouten voor installatiekopieën beschreven:

Autorisatiefout in Azure Container Registry

Er wordt een foutbericht weergegeven "container registry authorization failure" wanneer u geen toegang hebt tot het containerregister met de huidige referenties. De desynchronisatie van werkruimteresourcesleutels kan deze fout veroorzaken en het duurt enige tijd om automatisch te synchroniseren. U kunt echter handmatig sleutelsynchronisatie aanroepen met az ml workspace sync-keys, waardoor de autorisatiefout kan worden opgelost.

Containerregisters die zich achter een virtueel netwerk bevinden, kunnen deze fout ook tegenkomen als ze onjuist zijn ingesteld. Controleer of het virtuele netwerk juist is ingesteld.

Rekenproces van installatiekopieën die niet zijn ingesteld in een privéwerkruimte met een virtueel netwerk

Als in het foutbericht wordt vermeld "failed to communicate with the workspace's container registry"en u een virtueel netwerk gebruikt en het containerregister van de werkruimte privé is en is geconfigureerd met een privé-eindpunt, moet u toestaan dat Container Registry installatiekopieën in het virtuele netwerk maakt.

Time-out voor build van installatiekopieën

Time-outs voor de build van installatiekopieën worden vaak veroorzaakt doordat een installatiekopie te groot is om het bouwen binnen het tijdsbestek voor het maken van de implementatie te voltooien. Controleer de buildlogboeken van uw installatiekopieën op de locatie die door de fout wordt opgegeven. De logboeken worden afgekapt op het moment dat er een time-out optreedt voor de build van de installatiekopieën.

U kunt dit probleem oplossen door uw installatiekopie afzonderlijk te bouwen, zodat de installatiekopie alleen hoeft te worden opgehaald tijdens het maken van de implementatie. Controleer ook de standaardtestinstellingen als u ImageBuild-time-outs hebt.

Algemene buildfout voor installatiekopieën

Raadpleeg het buildlogboek voor meer informatie over de fout. Als er geen duidelijke fout wordt gevonden in het buildlogboek en de laatste regel is Installing pip dependencies: ...working..., kan een afhankelijkheid de fout veroorzaken. Het vastmaken van versieafhankelijkheden in uw Conda-bestand kan dit probleem oplossen.

Probeer lokaal te implementeren om uw modellen te testen en fouten op te sporen voordat u implementeert in de cloud.

FOUT: OutOfQuota

De volgende resources kunnen geen quotum meer hebben bij het gebruik van Azure-services:

Alleen voor Online-eindpunten van Kubernetes is het mogelijk dat de Kubernetes-resource onvoldoende quotum heeft.

CPU-quotum

U moet voldoende rekenquotum hebben om een model te implementeren. Het CPU-quotum bepaalt hoeveel virtuele kernen per abonnement, per werkruimte, per SKU en per regio beschikbaar zijn. Elke implementatie trekt af van het beschikbare quotum en voegt deze weer toe na verwijdering, op basis van het type SKU.

U kunt controleren of er ongebruikte implementaties zijn die u kunt verwijderen of u kunt een aanvraag indienen voor een quotumverhoging.

Clusterquotum

De OutOfQuota fout treedt op wanneer u onvoldoende quotum voor Azure Machine Learning-rekenclusters hebt. Het quotum definieert het totale aantal clusters per abonnement dat u tegelijkertijd kunt gebruiken om CPU- of GPU-knooppunten in de Azure-cloud te implementeren.

Schijfquotum

De OutOfQuota fout treedt op wanneer de grootte van het model groter is dan de beschikbare schijfruimte en het model niet kan worden gedownload. Gebruik een SKU met meer schijfruimte of verklein de grootte van de installatiekopieën en modellen.

Geheugenquotum

De OutOfQuota fout treedt op wanneer de geheugenvoetafdruk van het model groter is dan het beschikbare geheugen. Probeer een SKU met meer geheugen.

Quotum voor roltoewijzing

Wanneer u een beheerd online-eindpunt maakt, is roltoewijzing vereist voor de beheerde identiteit voor toegang tot werkruimtebronnen. Als u de limiet voor roltoewijzing bereikt, probeert u enkele ongebruikte roltoewijzingen in dit abonnement te verwijderen. U kunt alle roltoewijzingen controleren door toegangsbeheer te selecteren voor uw Azure-abonnement in Azure Portal.

Eindpuntquotum

Probeer enkele ongebruikte eindpunten in dit abonnement te verwijderen. Als al uw eindpunten actief in gebruik zijn, kunt u proberen een verhoging van de eindpuntlimiet aan te vragen. Zie Eindpuntquotum met online-eindpunten en batcheindpunten van Azure Machine Learning voor meer informatie over de eindpuntlimiet.

Kubernetes-quotum

De OutOfQuota fout treedt op wanneer de aangevraagde CPU of het aangevraagde geheugen niet kan worden opgegeven omdat knooppunten niet kunnen worden gepland voor deze implementatie. Knooppunten kunnen bijvoorbeeld worden vastgezet of anderszins niet beschikbaar zijn.

Het foutbericht geeft doorgaans aan dat de resource onvoldoende is in het cluster, bijvoorbeeld OutOfQuota: Kubernetes unschedulable. Details:0/1 nodes are available: 1 Too many pods.... Dit bericht betekent dat er te veel pods in het cluster zijn en dat er onvoldoende resources zijn om het nieuwe model te implementeren op basis van uw aanvraag.

Probeer de volgende oplossingen om dit probleem op te lossen:

  • IT-operators die het Kubernetes-cluster onderhouden, kunnen proberen meer knooppunten toe te voegen of een aantal ongebruikte pods in het cluster wissen om bepaalde resources vrij te geven.

  • Machine learning-technici die modellen implementeren, kunnen proberen de resourceaanvraag van de implementatie te verminderen.

    • Als u de resourceaanvraag rechtstreeks in de implementatieconfiguratie definieert via de resourcesectie, probeert u de resourceaanvraag te verminderen.
    • Als u de instance_type resource voor modelimplementatie definieert, neemt u contact op met de IT-operator om de resourceconfiguratie van het exemplaartype aan te passen. Zie Exemplaartypen maken en beheren voor meer informatie.

Vm-capaciteit voor de hele regio

Vanwege een gebrek aan Azure Machine Learning-capaciteit in de regio kan de service de opgegeven VM-grootte niet inrichten. Probeer het later opnieuw of probeer te implementeren in een andere regio.

Ander quotum

Als u het score.py-bestand wilt uitvoeren dat u als onderdeel van de implementatie opgeeft, maakt Azure een container met alle resources die de score.py nodig heeft. Azure Machine Learning voert vervolgens het scorescript uit op die container. Als uw container niet kan worden gestart, kan scoren niet plaatsvinden. De container vraagt mogelijk meer resources aan dan de instance_type container kan ondersteunen. Overweeg om de instance_type online-implementatie bij te werken.

Voer de volgende actie uit om de exacte reden voor de fout op te halen.

Voer de volgende opdracht uit:

az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name> -l 100

FOUT: BadArgument

Deze fout kan optreden wanneer u beheerde online-eindpunten of Kubernetes-online-eindpunten gebruikt, om de volgende redenen:

Mogelijk krijgt u deze fout ook wanneer u alleen Kubernetes-online-eindpunten gebruikt, om de volgende redenen:

Abonnement bestaat niet

Het Azure-abonnement waarnaar wordt verwezen, moet bestaand en actief zijn. Deze fout treedt op wanneer Azure de abonnements-id die u hebt ingevoerd, niet kan vinden. De fout kan worden veroorzaakt door een typefout in de abonnements-id. Controleer of de abonnements-id correct is ingevoerd en momenteel actief is.

Autorisatiefout

Nadat u de rekenresource hebt ingericht wanneer u een implementatie maakt, haalt Azure de installatiekopie van de gebruikerscontainer op uit het containerregister van de werkruimte en koppelt het gebruikersmodel en codeartefacten aan de gebruikerscontainer vanuit het werkruimteopslagaccount. Azure maakt gebruik van beheerde identiteiten voor toegang tot het opslagaccount en het containerregister.

Als u het gekoppelde eindpunt maakt met een door de gebruiker toegewezen identiteit, moet de beheerde identiteit van de gebruiker de machtiging Opslagblobgegevenslezer hebben voor het werkruimteopslagaccount en de AcrPull-machtiging voor het containerregister van de werkruimte. Zorg ervoor dat uw door de gebruiker toegewezen identiteit de juiste machtigingen heeft.

Als u het gekoppelde eindpunt maakt met door het systeem toegewezen identiteit, wordt automatisch een RBAC-machtiging (op rollen gebaseerd toegangsbeheer) van Azure verleend en zijn er geen verdere machtigingen nodig. Zie de fout containerregisterautorisatie voor meer informatie.

Ongeldige sjabloonfunctiespecificatie

Deze fout treedt op wanneer een sjabloonfunctie onjuist is opgegeven. Los het beleid op of verwijder de beleidstoewijzing om de blokkering op te heffen. Het foutbericht bevat mogelijk de naam van de beleidstoewijzing en de beleidsdefinitie om u te helpen deze fout op te sporen. Zie de structuur van azure-beleidsdefinities voor tips om sjabloonfouten te voorkomen.

Kan de installatiekopieën van de gebruikerscontainer niet downloaden

De gebruikerscontainer is mogelijk niet gevonden. Controleer de containerlogboeken voor meer informatie.

Zorg ervoor dat de containerinstallatiekopieën beschikbaar zijn in het containerregister van de werkruimte. Als de installatiekopieën bijvoorbeeld zijn testacr.azurecr.io/azureml/azureml_92a029f831ce58d2ed011c3c42d35acb:latest, kunt u de volgende opdracht gebruiken om de opslagplaats te controleren:

az acr repository show-tags -n testacr --repository azureml/azureml_92a029f831ce58d2ed011c3c42d35acb --orderby time_desc --output table`

Het downloaden van het gebruikersmodel is mislukt

Het gebruikersmodel is mogelijk niet gevonden. Controleer de containerlogboeken voor meer informatie. Zorg ervoor dat u het model hebt geregistreerd bij dezelfde werkruimte als de implementatie.

Als u details voor een model in een werkruimte wilt weergeven, voert u de volgende actie uit. U moet versie of label opgeven om de modelgegevens op te halen.

Voer de volgende opdracht uit:

az ml model show --name <model-name> --version <version>

Controleer ook of de blobs aanwezig zijn in het opslagaccount van de werkruimte. Als de blob bijvoorbeeld is https://foobar.blob.core.windows.net/210212154504-1517266419/WebUpload/210212154504-1517266419/GaussianNB.pkl, kunt u de volgende opdracht gebruiken om te controleren of de blob bestaat:

az storage blob exists --account-name <storage-account-name> --container-name <container-name> --name WebUpload/210212154504-1517266419/GaussianNB.pkl --subscription <sub-name>

Als de blob aanwezig is, kunt u de volgende opdracht gebruiken om de logboeken op te halen uit de initialisatiefunctie voor opslag:

az ml online-deployment get-logs --endpoint-name <endpoint-name> --name <deployment-name> –-container storage-initializer`

MLflow-modelindeling met privénetwerk wordt niet ondersteund

U kunt de functie privénetwerk niet gebruiken met een MLflow-modelindeling als u de verouderde methode voor netwerkisolatie gebruikt voor beheerde online-eindpunten. Als u een MLflow-model wilt implementeren met de implementatiebenadering zonder code, kunt u een beheerd virtueel netwerk in een werkruimte gebruiken.

Resourceaanvragen groter dan limieten

Aanvragen voor resources moeten kleiner zijn dan of gelijk zijn aan limieten. Als u geen limieten instelt, worden in Azure Machine Learning standaardwaarden ingesteld wanneer u uw rekenproces aan een werkruimte koppelt. U kunt de limieten controleren in Azure Portal of met behulp van de az ml compute show opdracht.

Azureml-fe niet gereed

Het front-endonderdeel azureml-fe dat binnenkomende deductieaanvragen naar geïmplementeerde services routeert, wordt geïnstalleerd tijdens de installatie van k8s-extension en wordt automatisch geschaald indien nodig. Dit onderdeel moet ten minste één replica in orde hebben op het cluster.

U krijgt deze fout als het onderdeel niet beschikbaar is wanneer u een Online-eindpunt van Kubernetes activeert of een aanvraag voor het maken of bijwerken van een Kubernetes-implementatie activeert. Controleer de podstatus en logboeken om dit probleem op te lossen. U kunt ook proberen de k8s-extensie bij te werken die op het cluster is geïnstalleerd.

FOUT: ResourceNotReady

Als u het score.py-bestand wilt uitvoeren dat u opgeeft als onderdeel van de implementatie, maakt Azure een container met alle resources die het score.py nodig heeft en voert u het scorescript uit op die container. De fout in dit scenario is dat deze container vastloopt wanneer deze wordt uitgevoerd, zodat scoren niet kan optreden. Deze fout kan optreden onder een van de volgende voorwaarden:

  • Er is een fout opgetreden in score.py. Gebruik get-logs dit om veelvoorkomende problemen vast te stellen, zoals:

    • Een pakket dat score.py probeert te importeren die niet is opgenomen in de Conda-omgeving
    • Een syntaxisfout
    • Een fout in de init() methode

    Als get-logs er geen logboeken worden geproduceerd, betekent dit meestal dat de container niet kan worden gestart. Als u dit probleem wilt opsporen, probeert u lokaal te implementeren.

  • Gereedheids- of livenesstests zijn niet correct ingesteld.

  • Initialisatie van containers duurt te lang, dus de gereedheids- of livenesstest mislukt buiten de drempelwaarde voor fouten. In dit geval past u de testinstellingen aan zodat de container langer kan worden geïnitialiseerd. Of probeer een grotere ondersteunde VM-SKU, waardoor de initialisatie wordt versneld.

  • Er is een fout opgetreden in de installatie van de containeromgeving, zoals een ontbrekende afhankelijkheid.

    Als u de TypeError: register() takes 3 positional arguments but 4 were given fout krijgt, controleert u de afhankelijkheid tussen flask v2 en azureml-inference-server-http. Zie Http-serverproblemen oplossen voor meer informatie.

FOUT: ResourceNotFound

Mogelijk krijgt u deze fout wanneer u een beheerd online-eindpunt of Kubernetes-online-eindpunt gebruikt, om de volgende redenen:

Resource Manager kan een resource niet vinden

Deze fout treedt op wanneer Azure Resource Manager geen vereiste resource kan vinden. U kunt deze fout bijvoorbeeld ontvangen als een opslagaccount niet kan worden gevonden op het opgegeven pad. Controleer het pad of de naamspecificaties voor nauwkeurigheid en spelling. Zie Fouten oplossen voor resource niet gevonden voor meer informatie.

Fout bij autorisatie van containerregister

Deze fout treedt op wanneer een installatiekopieën van een privé- of anderszins niet-toegankelijk containerregister worden opgegeven voor implementatie. Azure Machine Learning-API's kunnen geen persoonlijke registerreferenties accepteren.

Als u deze fout wilt verhelpen, moet u ervoor zorgen dat het containerregister niet privé is of voert u de volgende stappen uit:

  1. Verdeel de acrPull-rol van uw privéregister aan de systeemidentiteit van uw online-eindpunt.
  2. Geef in uw omgevingsdefinitie het adres van uw persoonlijke installatiekopie op en geef de instructie om de installatiekopie niet te wijzigen of te bouwen.

Als deze beperking slaagt, hoeft de installatiekopieën niet te worden gebouwd en is het uiteindelijke adres van de installatiekopieën het opgegeven afbeeldingsadres. Tijdens de implementatie haalt de systeemidentiteit van uw online-eindpunt de installatiekopie op uit het privéregister.

Zie De diagnostische gegevens van werkruimten gebruiken voor meer diagnostische informatie.

FOUT: WorkspaceManagedNetworkNotReady

Deze fout treedt op als u een online-implementatie probeert te maken waarmee een beheerd virtueel netwerk voor een werkruimte wordt ingeschakeld, maar het beheerde virtuele netwerk nog niet is ingericht. Richt het beheerde virtuele netwerk van de werkruimte in voordat u een online-implementatie maakt.

Als u het beheerde virtuele netwerk van de werkruimte handmatig wilt inrichten, volgt u de instructies bij Handmatig inrichten van een beheerd VNet. Vervolgens kunt u online-implementaties gaan maken. Zie Netwerkisolatie met beheerd online-eindpunt en Uw beheerde online-eindpunten beveiligen met netwerkisolatie voor meer informatie.

FOUT: OperationCanceled

Mogelijk krijgt u deze fout wanneer u een beheerd online-eindpunt of Kubernetes-online-eindpunt gebruikt, om de volgende redenen:

Bewerking geannuleerd door een andere bewerking met een hogere prioriteit

Azure-bewerkingen hebben een bepaald prioriteitsniveau en worden uitgevoerd van hoog naar laag. Deze fout treedt op wanneer een andere bewerking met een hogere prioriteit uw bewerking overschrijft. Als u de bewerking opnieuw probeert uit te voeren, kan deze zonder annulering worden uitgevoerd.

Bewerking geannuleerd wachten op bevestiging van vergrendeling

Azure-bewerkingen hebben een korte wachttijd nadat ze zijn verzonden, waarbij ze een vergrendeling ophalen om ervoor te zorgen dat ze geen racevoorwaarden ondervinden. Deze fout treedt op wanneer de bewerking die u hebt ingediend, hetzelfde is als een andere bewerking. De andere bewerking wacht momenteel op bevestiging dat het de vergrendeling heeft ontvangen voordat deze wordt voortgezet.

Mogelijk hebt u te snel na de eerste aanvraag een vergelijkbare aanvraag ingediend. Als u de bewerking opnieuw probeert uit te voeren nadat u tot een minuut hebt gewacht, kan dit zonder annulering worden uitgevoerd.

FOUT: SecretsInjectionError

Het ophalen en injecteren van geheimen tijdens het maken van een online-implementatie maakt gebruik van de identiteit die is gekoppeld aan het online-eindpunt om geheimen op te halen uit de werkruimteverbindingen of sleutelkluizen. Deze fout treedt op een van de volgende redenen op:

  • De eindpuntidentiteit heeft geen Azure RBAC-machtiging om de geheimen van de werkruimteverbindingen of sleutelkluizen te lezen, ook al heeft de implementatiedefinitie de geheimen opgegeven als verwijzingen die zijn toegewezen aan omgevingsvariabelen. Het kan even duren voordat de wijzigingen van kracht worden.

  • De indeling van de geheime verwijzingen is ongeldig of de opgegeven geheimen bestaan niet in de werkruimteverbindingen of sleutelkluizen.

Zie Geheime injectie in online-eindpunten (preview) en Toegang tot geheimen van online-implementatie met behulp van geheime injectie (preview)voor meer informatie.

FOUT: InternalServerError

Deze fout betekent dat er iets mis is met de Azure Machine Learning-service die moet worden opgelost. Dien een klantondersteuningsticket in met alle informatie die nodig is om het probleem op te lossen.

Veelvoorkomende fouten die specifiek zijn voor Kubernetes-implementaties

Identiteits- en verificatiefouten:

Crashloopbackoff-fouten:

Scorescriptfouten:

Overige fouten:

FOUT: ACRSecretError

Wanneer u Kubernetes online-implementaties maakt of bijwerkt, kan dit een van de volgende oorzaken hebben:

  • Roltoewijzing is niet voltooid. Wacht een paar seconden en probeer het opnieuw.

  • Het Kubernetes-cluster of de AKS Azure Machine Learning-extensie met Azure Arc is niet juist geïnstalleerd of geconfigureerd. Controleer de configuratie en status van kubernetes met Azure Arc- of Azure Machine Learning-extensie.

  • Het Kubernetes-cluster heeft een onjuiste netwerkconfiguratie. Controleer de proxy, het netwerkbeleid of het certificaat.

  • Uw privé-AKS-cluster heeft niet de juiste eindpunten. Zorg ervoor dat u privé-eindpunten instelt voor Container Registry, het opslagaccount en de werkruimte in het virtuele AKS-netwerk.

  • De versie van uw Azure Machine Learning-extensie is v1.1.25 of lager. Zorg ervoor dat uw extensieversie groter is dan v1.1.25.

FOUT: TokenRefreshFailed

Deze fout treedt op omdat de Kubernetes-clusteridentiteit niet juist is ingesteld, zodat de extensie geen principalreferentie kan ophalen uit Azure. Installeer de Azure Machine Learning-extensie opnieuw en probeer het opnieuw.

FOUT: GetAADTokenFailed

Deze fout treedt op omdat het Kubernetes-cluster microsoft Entra ID-token is mislukt of een time-out heeft opgetreden. Controleer de netwerktoegang en probeer het opnieuw.

  • Volg de instructies bij Kubernetes Compute gebruiken om de uitgaande proxy te controleren en te controleren of het cluster verbinding kan maken met de werkruimte. U vindt de EINDPUNT-URL van de werkruimte in het online-eindpunt Custom Resource Definition (CRD) in het cluster.

  • Controleer of de werkruimte openbare toegang toestaat. Ongeacht of het AKS-cluster zelf openbaar of privé is, kan het Kubernetes-cluster alleen communiceren via een privékoppeling als een privéwerkruimte de toegang tot het openbare netwerk uitschakelt. Zie Wat is een beveiligde AKS-deductieomgeving voor meer informatie.

FOUT: ACRAuthenticationChallengeFailed

Deze fout treedt op omdat het Kubernetes-cluster de Container Registry-werkruimteservice niet kan bereiken om een verificatievraag uit te voeren. Controleer uw netwerk, met name toegang tot het openbare netwerk van Container Registry en probeer het opnieuw. U kunt de stappen voor probleemoplossing volgen in GetAADTokenFailed om het netwerk te controleren.

FOUT: ACRTokenExchangeFailed

Deze fout treedt op omdat het Microsoft Entra ID-token nog niet is geautoriseerd, dus het Kubernetes-cluster exchange Container Registry-token mislukt. De roltoewijzing duurt enige tijd, dus wacht een minuut en probeer het opnieuw.

Deze fout kan ook worden veroorzaakt door te veel gelijktijdige aanvragen voor de Container Registry-service. Deze fout moet tijdelijk zijn en u kunt het later opnieuw proberen.

FOUT: KubernetesUnaccessible

Mogelijk krijgt u de volgende fout tijdens implementaties van Kubernetes-modellen:

{"code":"BadRequest","statusCode":400,"message":"The request is invalid.","details":[{"code":"KubernetesUnaccessible","message":"Kubernetes error: AuthenticationException. Reason: InvalidCertificate"}],...}

Als u deze fout wilt beperken, kunt u het AKS-certificaat voor het cluster roteren. Het nieuwe certificaat moet na 5 uur worden bijgewerkt, zodat u vijf uur kunt wachten en het opnieuw kunt implementeren. Zie Certificaatrotatie in Azure Kubernetes Service (AKS) voor meer informatie.

FOUT: ImagePullLoopBackOff

Deze fout kan optreden wanneer u Kubernetes online-implementaties maakt of bijwerkt, omdat u de installatiekopieën niet kunt downloaden uit het containerregister, wat resulteert in de pull-fout voor installatiekopieën. Controleer het clusternetwerkbeleid en het containerregister van de werkruimte om te zien of het cluster installatiekopieën uit het containerregister kan ophalen.

FOUT: DeploymentCrashLoopBackOff

Deze fout kan optreden wanneer u Kubernetes online-implementaties maakt of bijwerkt omdat de gebruikerscontainer is vastgelopen bij het initialiseren. Er zijn twee mogelijke redenen voor deze fout:

  • Het gebruikersscript score.py heeft een syntaxisfout of importfout die uitzonderingen genereert bij het initialiseren.
  • De implementatiepod heeft meer geheugen nodig dan de limiet.

Als u deze fout wilt beperken, controleert u eerst de implementatielogboeken op eventuele uitzonderingen in gebruikersscripts. Als de fout zich blijft voordoen, probeert u de geheugenlimiet van het resource-/exemplaartype uit te breiden.

FOUT: KubernetesCrashLoopBackOff

Deze fout kan optreden wanneer u Kubernetes online-eindpunten of -implementaties maakt of bijwerkt om een van de volgende redenen:

  • Een of meer pods zijn vastgelopen in de crashLoopBackoff-status. Controleer of het implementatielogboek bestaat en er foutberichten in het logboek staan.
  • Er is een fout opgetreden in score.py en de container is vastgelopen bij het initialiseren van uw scorecode. Volg de instructies onder ERROR: ResourceNotReady.
  • Uw scoreproces heeft meer geheugen nodig dan uw implementatieconfiguratielimiet. U kunt proberen de implementatie bij te werken met een grotere geheugenlimiet.

FOUT: NamespaceNotFound

Deze fout kan optreden wanneer u Kubernetes online-eindpunten maakt of bijwerkt, omdat de gebruikte Kubernetes-rekenruimte niet beschikbaar is in uw cluster. Controleer de Kubernetes-berekening in uw werkruimteportal en controleer de naamruimte in uw Kubernetes-cluster. Als de naamruimte niet beschikbaar is, koppelt u de verouderde rekenkracht los en koppelt u deze opnieuw om een nieuwe te maken, waarbij u een naamruimte opgeeft die al in uw cluster bestaat.

FOUT: UserScriptInitFailed

Deze fout kan optreden wanneer u Kubernetes online-implementaties maakt of bijwerkt, omdat de init functie in het geüploade score.py bestand een uitzondering heeft gegenereerd. Controleer de implementatielogboeken om het uitzonderingsbericht gedetailleerd weer te geven en los de uitzondering op.

FOUT: UserScriptImportError

Deze fout kan optreden wanneer u Kubernetes online-implementaties maakt of bijwerkt, omdat het score.py-bestand dat u hebt geüpload, niet-beschikbare pakketten importeert. Controleer de implementatielogboeken om het uitzonderingsbericht gedetailleerd weer te geven en los de uitzondering op.

FOUT: UserScriptFunctionNotFound

Deze fout kan optreden wanneer u Kubernetes online-implementaties maakt of bijwerkt, omdat het score.py-bestand dat u hebt geüpload geen functie met de naam init() of run(). Controleer uw code en voeg de functie toe.

FOUT: EndpointNotFound

Deze fout kan optreden wanneer u Kubernetes online-implementaties maakt of bijwerkt omdat het systeem de eindpuntresource voor de implementatie in het cluster niet kan vinden. Maak de implementatie in een bestaand eindpunt of maak eerst het eindpunt in uw cluster.

FOUT: EndpointAlreadyExists

Deze fout kan optreden wanneer u een Online-eindpunt voor Kubernetes maakt, omdat het eindpunt al in uw cluster bestaat. De eindpuntnaam moet uniek zijn per werkruimte en per cluster, dus maak een eindpunt met een andere naam.

FOUT: ScoringFeUnhealthy

Deze fout kan optreden wanneer u een online-eindpunt of -implementatie voor Kubernetes maakt of bijwerkt omdat de azureml-fe-systeemservice die in het cluster wordt uitgevoerd, niet wordt gevonden of beschadigd is. U kunt dit probleem oplossen door de Azure Machine Learning-extensie opnieuw te installeren of bij te werken in uw cluster.

FOUT: ValidateScoringFailed

Deze fout kan optreden wanneer u Kubernetes online-implementaties maakt of bijwerkt omdat de validatie van de scoreaanvraag-URL is mislukt bij het verwerken van het model. Controleer de eindpunt-URL en probeer vervolgens opnieuw te implementeren.

FOUT: InvalidDeploymentSpec

Deze fout kan optreden wanneer u Kubernetes online-implementaties maakt of bijwerkt omdat de implementatiespecificatie ongeldig is. Controleer het foutbericht om te controleren of het instance count geldig is. Als u automatisch schalen hebt ingeschakeld, controleert u of de minimum instance count en maximum instance count beide geldig zijn.

FOUT: PodUnschedulable

Deze fout kan optreden wanneer u Kubernetes online-eindpunten of -implementaties maakt of bijwerkt om een van de volgende redenen:

  • Het systeem kan de pod niet plannen op knooppunten vanwege onvoldoende resources in uw cluster.
  • Er komt geen knooppunt overeen met de knooppuntaffiniteitskiezer.

Volg deze stappen om deze fout te verhelpen:

  1. Controleer de node selector definitie van het instance_type gebruikte cluster en de node label configuratie van uw clusterknooppunten.
  2. Controleer de instance_type SKU-grootte van het knooppunt voor het AKS-cluster of de knooppuntresource voor het Kubernetes-cluster met Azure Arc.
  3. Als het cluster te weinig resources bevat, vermindert u de resourcevereiste van het exemplaartype of gebruikt u een ander exemplaartype met kleinere resourcevereisten.
  4. Als het cluster geen resources meer heeft om te voldoen aan de vereiste van de implementatie, verwijdert u enkele implementaties om resources vrij te geven.

FOUT: PodOutOfMemory

Deze fout kan optreden wanneer u een online-implementatie maakt of bijwerkt omdat de geheugenlimiet die u hebt opgegeven voor implementatie onvoldoende is. Als u deze fout wilt beperken, kunt u de geheugenlimiet instellen op een grotere waarde of een groter exemplaartype gebruiken.

FOUT: InferencingClientCallFailed

Deze fout kan optreden wanneer u Kubernetes online-eindpunten of -implementaties maakt of bijwerkt, omdat de k8s-extensie van het Kubernetes-cluster niet kan worden verbonden. In dit geval koppelt u de rekenkracht los en koppelt u deze opnieuw.

Als u fouten wilt oplossen door opnieuw te koppelen, moet u ervoor zorgen dat u dezelfde configuratie opnieuw koppelt als de losgekoppelde berekening, zoals de naam van de rekenkracht en naamruimte, om andere fouten te voorkomen. Als het nog steeds niet werkt, vraagt u een beheerder die toegang heeft tot het cluster om te kubectl get po -n azureml controleren of de relayserverpods worden uitgevoerd.

Problemen met modelverbruik

Veelvoorkomende fouten met modelverbruik als gevolg van de eindpuntbewerkingsstatus invoke omvatten problemen met bandbreedtelimieten, CORS-beleid en verschillende HTTP-statuscodes.

Problemen met bandbreedtelimiet

Beheerde online-eindpunten hebben bandbreedtelimieten voor elk eindpunt. U vindt de limietconfiguratie in limieten voor online-eindpunten. Als uw bandbreedtegebruik de limiet overschrijdt, wordt uw aanvraag vertraagd.

Als u de bandbreedtevertraging wilt bewaken, gebruikt u de metrische netwerkbytes om inzicht te krijgen in het huidige bandbreedtegebruik. Zie Beheerde online-eindpunten bewaken voor meer informatie.

Er worden twee antwoordtrailers geretourneerd als de bandbreedtelimiet wordt afgedwongen:

  • ms-azureml-bandwidth-request-delay-ms is de vertragingstijd in milliseconden die nodig was voor de overdracht van de aanvraagstroom.
  • ms-azureml-bandwidth-response-delay-msis de vertragingstijd in milliseconden die nodig was voor de overdracht van de antwoordstroom.

Geblokkeerd door CORS-beleid

V2 online-eindpunten bieden geen ondersteuning voor Cross-Origin Resource Sharing (CORS). Als uw webtoepassing probeert het eindpunt aan te roepen zonder de CORS-voorbereidende aanvragen goed te verwerken, kunt u het volgende foutbericht krijgen:

Access to fetch at 'https://{your-endpoint-name}.{your-region}.inference.ml.azure.com/score' from origin http://{your-url} has been blocked by CORS policy: Response to preflight request doesn't pass access control check. No 'Access-control-allow-origin' header is present on the request resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with the CORS disabled.

U kunt Azure Functions, Azure-toepassing Gateway of een andere service gebruiken als een tussentijdse laag voor het afhandelen van VOORBEREIDENDe CORS-aanvragen.

HTTP-statuscode

Wanneer u online-eindpunten opent met REST-aanvragen, voldoen de geretourneerde statuscodes aan de standaarden voor HTTP-statuscodes. De volgende secties bevatten details over hoe eindpunten aanroepen en voorspellingsfouten worden toegewezen aan HTTP-statuscodes.

Veelvoorkomende foutcodes voor beheerde online-eindpunten

De volgende tabel bevat veelvoorkomende foutcodes wanneer REST-aanvragen beheerde online-eindpunten verbruiken:

Statuscode Reden Beschrijving
200 OK Uw model is uitgevoerd binnen uw latentiegrenzen.
401 Niet geautoriseerd U bent niet gemachtigd om de aangevraagde actie uit te voeren, zoals score, of uw token is verlopen of in de verkeerde indeling. Zie Verificatie voor beheerde online-eindpunten en Clients verifiëren voor online-eindpunten voor meer informatie.
404 Niet gevonden Het eindpunt heeft geen geldige implementatie met een positief gewicht.
408 Time-out van aanvraag De uitvoering van het model duurde langer dan de time-out die is request_timeout_ms opgegeven onder request_settings de configuratie van uw modelimplementatie.
424 Modelfout Als uw modelcontainer een niet-200-antwoord retourneert, retourneert Azure een 424. Controleer de Model Status Code dimensie onder de Requests Per Minute metrische waarde in de Azure Monitor Metric Explorer van uw eindpunt. Of controleer antwoordheaders ms-azureml-model-error-statuscode en ms-azureml-model-error-reason voor meer informatie. Als 424 wordt geleverd met een liveness- of gereedheidstest mislukt, kunt u ProbeSettings aanpassen om meer tijd te verlenen voor het testen van de liveness of gereedheid van containers.
429 Te veel aanvragen in behandeling Uw model krijgt momenteel meer aanvragen dan het kan verwerken. Om een soepele werking te garanderen, kan 2 * max_concurrent_requests_per_instance * instance_count requests Azure Machine Learning op elk gewenst moment maximaal parallel worden verwerkt. Aanvragen die groter zijn dan dit maximum, worden geweigerd.

U kunt de configuratie van uw modelimplementatie onder de request_settings secties scale_settings bekijken om deze instellingen te controleren en aan te passen. Zorg er ook voor dat de omgevingsvariabele WORKER_COUNT correct wordt doorgegeven, zoals wordt beschreven in RequestSettings.

Als u deze fout krijgt wanneer u automatische schaalaanpassing gebruikt, krijgt uw model sneller aanvragen dan het systeem omhoog kan schalen. Overweeg aanvragen opnieuw te verzenden met een exponentiële uitstel om het systeem tijd te geven om aan te passen. U kunt ook het aantal exemplaren verhogen met behulp van code om het aantal exemplaren te berekenen. Combineer deze stappen met het instellen van automatisch schalen om ervoor te zorgen dat uw model gereed is voor het afhandelen van de instroom van aanvragen.
429 Snelheidslimiet Het aantal aanvragen per seconde heeft de limieten voor beheerde online-eindpunten bereikt.
500 Interne serverfout De ingerichte infrastructuur van Azure Machine Learning mislukt.

Veelvoorkomende foutcodes voor Kubernetes Online-eindpunten

De volgende tabel bevat veelvoorkomende foutcodes wanneer REST-aanvragen Kubernetes online-eindpunten verbruiken:

Statuscode Fout Beschrijving
409 Conflictfout Wanneer er al een bewerking wordt uitgevoerd, reageert elke nieuwe bewerking op hetzelfde online-eindpunt met een conflictfout van 409. Als er bijvoorbeeld een online-eindpuntbewerking wordt gemaakt of bijgewerkt, treedt er een fout op bij het activeren van een nieuwe verwijderbewerking.
502 Uitzondering of crash in de run() methode van het score.py-bestand Als er een fout optreedt in score.py, bijvoorbeeld een geïmporteerd pakket dat niet bestaat in de conda-omgeving, een syntaxisfout of een fout in de init() methode, raadpleegt u ERROR: ResourceNotReady om fouten in het bestand op te sporen.
503 Grote pieken in aanvragen per seconde De automatische schaalaanpassing is ontworpen voor het afhandelen van geleidelijke wijzigingen in de belasting. Als u grote pieken in aanvragen per seconde ontvangt, ontvangen clients mogelijk HTTP-statuscode 503. Hoewel de automatische schaalaanpassing snel reageert, duurt het een aanzienlijke hoeveelheid tijd om meer containers te maken. Zie Hoe u 503-statuscodefouten kunt voorkomen.
504 Time-out van aanvraag Een 504-statuscode geeft aan dat er een time-out optreedt voor de aanvraag. De standaardinstelling voor time-outs is 5 seconden. U kunt de time-out verhogen of het eindpunt versnellen door score.py te wijzigen om onnodige aanroepen te verwijderen. Als deze acties het probleem niet verhelpen, heeft de code mogelijk een niet-responsieve status of een oneindige lus. Volg DE FOUT: ResourceNotReady om fouten op te sporen in het score.py-bestand .
500 Interne serverfout De ingerichte infrastructuur van Azure Machine Learning mislukt.

503-statuscodefouten voorkomen

Kubernetes online-implementaties ondersteunen automatisch schalen, waardoor replica's kunnen worden toegevoegd ter ondersteuning van extra belasting. Zie Azure Machine Learning-deductierouter voor meer informatie. De beslissing om omhoog of omlaag te schalen is gebaseerd op het gebruik van de huidige containerreplica's.

Twee acties kunnen helpen bij het voorkomen van 503-statuscodefouten: het gebruiksniveau voor het maken van nieuwe replica's wijzigen of het minimale aantal replica's wijzigen. U kunt deze benaderingen afzonderlijk of in combinatie gebruiken.

  • Wijzig het gebruiksdoel waarop automatisch schalen nieuwe replica's maakt door de autoscale_target_utilization waarde in te stellen op een lagere waarde. Deze wijziging zorgt er niet voor dat replica's sneller worden gemaakt, maar met een lagere gebruiksdrempel. Als u bijvoorbeeld de waarde wijzigt in 30%, worden replica's gemaakt wanneer het gebruik van 30% plaatsvindt in plaats van te wachten totdat de service 70% wordt gebruikt.

  • Wijzig het minimale aantal replica's om een grotere pool te bieden waarmee de binnenkomende pieken kunnen worden verwerkt.

Het aantal exemplaren berekenen

Als u het aantal exemplaren wilt verhogen, kunt u de vereiste replica's als volgt berekenen:

from math import ceil
# target requests per second
target_rps = 20
# time to process the request (in seconds, choose appropriate percentile)
request_process_time = 10
# Maximum concurrent requests per instance
max_concurrent_requests_per_instance = 1
# The target CPU usage of the model container. 70% in this example
target_utilization = .7

concurrent_requests = target_rps * request_process_time / target_utilization

# Number of instance count
instance_count = ceil(concurrent_requests / max_concurrent_requests_per_instance)

Notitie

Als u aanvraagpieken ontvangt die groter zijn dan de nieuwe minimumreplica's, ontvangt u mogelijk opnieuw 503. Als het verkeer naar uw eindpunt bijvoorbeeld toeneemt, moet u mogelijk de minimale replica's verhogen.

Als het online-eindpunt van Kubernetes al gebruikmaakt van de huidige maximumreplica's en u nog steeds 503 statuscodes krijgt, verhoogt u de autoscale_max_replicas waarde om het maximum aantal replica's te verhogen.

Problemen met netwerkisolatie

Deze sectie bevat informatie over veelvoorkomende problemen met netwerkisolatie.

Het maken van een online-eindpunt mislukt met een V1LegacyMode == true-bericht

U kunt de Azure Machine Learning-werkruimte configureren waarvoor v1_legacy_modev2-API's worden uitgeschakeld. Beheerde online-eindpunten zijn een functie van het v2 API-platform en werken niet als v1_legacy_mode deze is ingeschakeld voor de werkruimte.

Zie Netwerkisolatie met v2 om uit te schakelenv1_legacy_mode.

Belangrijk

Neem contact op met uw netwerkbeveiligingsteam voordat u uitschakelt v1_legacy_mode, omdat deze mogelijk om een reden is ingeschakeld.

Het maken van online-eindpunten met verificatie op basis van sleutels mislukt

Gebruik de volgende opdracht om de netwerkregels van de Azure-sleutelkluis voor uw werkruimte weer te geven. Vervang <keyvault-name> door de naam van uw sleutelkluis:

az keyvault network-rule list -n <keyvault-name>

Het antwoord voor deze opdracht is vergelijkbaar met de volgende JSON-code:

{
    "bypass": "AzureServices",
    "defaultAction": "Deny",
    "ipRules": [],
    "virtualNetworkRules": []
}

Als de waarde niet AzureServicesis, gebruikt u de richtlijnen in de netwerkinstellingen van bypass de sleutelkluis configureren om deze in te stellen op AzureServices.

Online-implementaties mislukken met een downloadfout voor de installatiekopieën

Notitie

Dit probleem is van toepassing wanneer u de verouderde netwerkisolatiemethode gebruikt voor beheerde online-eindpunten, waarin Azure Machine Learning een beheerd virtueel netwerk maakt voor elke implementatie onder een eindpunt.

  1. Controleer of de egress-public-network-access vlag voor de implementatie is disabled . Als deze vlag is ingeschakeld en de zichtbaarheid van het containerregister privé is, wordt deze fout verwacht.

  2. Gebruik de volgende opdracht om de status van de privé-eindpuntverbinding te controleren. Vervang <registry-name> door de naam van het Azure-containerregister voor uw werkruimte:

    az acr private-endpoint-connection list -r <registry-name> --query "[?privateLinkServiceConnectionState.description=='Egress for Microsoft.MachineLearningServices/workspaces/onlineEndpoints'].{Name:name, status:privateLinkServiceConnectionState.status}"
    

    Controleer in de antwoordcode of het status veld is ingesteld op Approved. Als dat niet het is, gebruikt u de volgende opdracht om deze goed te keuren. Vervang <private-endpoint-name> door de naam die is geretourneerd door de voorgaande opdracht.

    az network private-endpoint-connection approve -n <private-endpoint-name>
    

Score-eindpunt kan niet worden opgelost

  1. Controleer of de client die de scoreaanvraag uitgeeft een virtueel netwerk is dat toegang heeft tot de Azure Machine Learning-werkruimte.

  2. Gebruik de nslookup opdracht op de hostnaam van het eindpunt om de IP-adresgegevens op te halen, bijvoorbeeld:

    nslookup endpointname.westcentralus.inference.ml.azure.com
    

    Het antwoord bevat een adres dat zich in het bereik van het virtuele netwerk moet bevinden.

    Notitie

    • Voor het online-eindpunt van Kubernetes moet de hostnaam van het eindpunt de CName (domeinnaam) zijn die is opgegeven in uw Kubernetes-cluster.
    • Als het eindpunt HTTP is, bevindt het IP-adres zich in de eindpunt-URI, die u kunt ophalen uit de gebruikersinterface van studio.
    • U vindt meer manieren om het IP-adres van het eindpunt op te halen in het online-eindpunt van Secure Kubernetes.
  3. Als de nslookup opdracht de hostnaam niet oplost, voert u de volgende acties uit:

Beheerde online-eindpunten

  1. Gebruik de volgende opdracht om te controleren of er een A-record bestaat in de DNS-zone (Private Domain Name Server) voor het virtuele netwerk.

    az network private-dns record-set list -z privatelink.api.azureml.ms -o tsv --query [].name
    

    De resultaten moeten een vermelding bevatten die vergelijkbaar is met *.<GUID>.inference.<region>.

  2. Als er geen deductiewaarde retourneert, verwijdert u het privé-eindpunt voor de werkruimte en maakt u deze opnieuw. Zie Een privé-eindpunt configureren voor meer informatie.

  3. Als de werkruimte met een privé-eindpunt een aangepaste DNS-server gebruikt, voert u de volgende opdracht uit om te controleren of de omzetting van aangepaste DNS correct werkt.

dig endpointname.westcentralus.inference.ml.azure.com

Kubernetes online-eindpunten

  1. Controleer de DNS-configuratie in het Kubernetes-cluster.

  2. Controleer ook of de azureml-fe werkt zoals verwacht met behulp van de volgende opdracht:

    kubectl exec -it deploy/azureml-fe -- /bin/bash
    (Run in azureml-fe pod)
    
    curl -vi -k https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
    "Swagger not found"
    

    Gebruik voor HTTP de volgende opdracht:

     curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
    "Swagger not found"
    
  3. Als curl HTTPs mislukt of er een time-out optreedt, maar HTTP werkt, controleert u of het certificaat geldig is.

  4. Als het voorgaande proces niet kan worden omgezet in de A-record, controleert u of de omzetting werkt vanuit Azure DNS (168.63.129.16).

    dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
    
  5. Als de voorgaande opdracht slaagt, moet u problemen met de voorwaardelijke doorstuurserver voor privékoppeling op aangepaste DNS oplossen.

Online-implementaties kunnen niet worden beoordeeld

  1. Voer de volgende opdracht uit om te zien of de implementatie is geslaagd:

    az ml online-deployment show -e <endpointname> -n <deploymentname> --query '{name:name,state:provisioning_state}' 
    

    Als de implementatie is voltooid, is Succeededde waarde van state .

  2. Als de implementatie is geslaagd, gebruikt u de volgende opdracht om te controleren of verkeer is toegewezen aan de implementatie. Vervang door <endpointname> de naam van uw eindpunt.

    az ml online-endpoint show -n <endpointname>  --query traffic
    

    In het antwoord van deze opdracht moet het percentage verkeer worden vermeld dat is toegewezen aan implementaties.

    Tip

    Deze stap is niet nodig als u de azureml-model-deployment header in uw aanvraag gebruikt om deze implementatie te targeten.

  3. Als de verkeerstoewijzingen of implementatieheader juist zijn ingesteld, gebruikt u de volgende opdracht om de logboeken voor het eindpunt op te halen. Vervang <endpointname> door de naam van het eindpunt en <deploymentname> door de implementatie.

    az ml online-deployment get-logs  -e <endpointname> -n <deploymentname> 
    
  4. Bekijk de logboeken om te zien of er een probleem is met het uitvoeren van de scorecode wanneer u een aanvraag indient bij de implementatie.

Problemen met deductieserver

In deze sectie vindt u eenvoudige tips voor probleemoplossing voor de HTTP-server voor Azure Machine Learning-deductie.

Geïnstalleerde pakketten controleren

Volg deze stappen om problemen met geïnstalleerde pakketten op te lossen.

  1. Verzamel informatie over geïnstalleerde pakketten en versies voor uw Python-omgeving.

  2. Controleer of de azureml-inference-server-http python-pakketversie die is opgegeven in het omgevingsbestand overeenkomt met de HTTP-serverversie van Azure Machine Learning die wordt weergegeven in het opstartlogboek.

    In sommige gevallen installeert de pip-afhankelijkheidsoplossing onverwachte pakketversies. Mogelijk moet u de geïnstalleerde pakketten en versies corrigeren pip .

  3. Als u flask of de bijbehorende afhankelijkheden in uw omgeving opgeeft, verwijdert u deze items.

    • Afhankelijke pakketten zijn onder andere , , , , en clickmarkupsafe. werkzeugitsdangerousjinja2flask
    • flask wordt vermeld als een afhankelijkheid in het serverpakket. De beste methode is om de deductieserver toe te staan het flask pakket te installeren.
    • Wanneer de deductieserver is geconfigureerd ter ondersteuning van nieuwe versies van Flask, ontvangt de server automatisch de pakketupdates zodra deze beschikbaar komen.

Serverversie controleren

Het azureml-inference-server-http serverpakket wordt gepubliceerd naar PyPI. De PyPI-pagina bevat het wijzigingenlogboek en alle vorige versies.

Als u een eerdere pakketversie gebruikt, werkt u uw configuratie bij naar de nieuwste versie. De volgende tabel bevat een overzicht van stabiele versies, veelvoorkomende problemen en aanbevolen aanpassingen:

Versie van het pakket Beschrijving Verzenden Oplossing
0.4.x Gebundeld in trainingsafbeeldingen die zijn gedateerd 20220601 of eerder en azureml-defaults pakketversies .1.34 via 1.43. De nieuwste stabiele versie is 0.4.13. Voor serverversies ouder dan 0.4.11 kunnen Flask-afhankelijkheidsproblemen optreden, zoals "can't import name Markup from jinja2". Voer een upgrade uit naar versie 0.4.13 of 0.8.x, indien mogelijk de nieuwste versie.
0.6.x Vooraf geïnstalleerd in deductie-installatiekopieën die zijn gedateerd 20220516 en eerder. De nieuwste stabiele versie is 0.6.1. N.v.t. N.v.t.
0.7.x Ondersteunt Flask 2. De nieuwste stabiele versie is 0.7.7. N.v.t. N.v.t.
0.8.x De logboekindeling is gewijzigd. Ondersteuning voor Python 3.6 is beëindigd. N.v.t. N.v.t.

Pakketafhankelijkheden controleren

De meest relevante afhankelijke pakketten voor het azureml-inference-server-http serverpakket zijn:

  • flask
  • opencensus-ext-azure
  • inference-schema

Als u het azureml-defaults pakket in uw Python-omgeving hebt opgegeven, is het azureml-inference-server-http pakket een afhankelijk pakket. De afhankelijkheid wordt automatisch geïnstalleerd.

Tip

Als u Python SDK v1 gebruikt en het azureml-defaults pakket niet expliciet opgeeft in uw Python-omgeving, kan de SDK het pakket automatisch toevoegen. De packager-versie is echter vergrendeld ten opzichte van de SDK-versie. Als de SDK-versie bijvoorbeeld is 1.38.0, wordt de azureml-defaults==1.38.0 vermelding toegevoegd aan de pip-vereisten van de omgeving.

TypeError tijdens het opstarten van de server

U kunt het volgende TypeError tegenkomen tijdens het opstarten van de server:

TypeError: register() takes 3 positional arguments but 4 were given

  File "/var/azureml-server/aml_blueprint.py", line 251, in register

    super(AMLBlueprint, self).register(app, options, first_registration)

TypeError: register() takes 3 positional arguments but 4 were given

Deze fout treedt op wanneer Flask 2 is geïnstalleerd in uw Python-omgeving, maar de azureml-inference-server-http pakketversie biedt geen ondersteuning voor Flask 2. Ondersteuning voor Flask 2 is beschikbaar in azureml-inference-server-http pakketversie 0.7.0 en hoger en azureml-defaults pakketversie 1.44 en hoger.

  • Als u het Flask 2-pakket niet gebruikt in een Azure Machine Learning Docker-installatiekopieën, gebruikt u de nieuwste versie van het azureml-inference-server-http of azureml-defaults pakket.

  • Als u het Flask 2-pakket in een Azure Machine Learning Docker-installatiekopieën gebruikt, controleert u of de buildversie van de installatiekopieën juli 2022 of hoger is.

    U vindt de versie van de installatiekopieën in de containerlogboeken. Voorbeeld:

    2022-08-22T17:05:02,147738763+00:00 | gunicorn/run | AzureML Container Runtime Information
    2022-08-22T17:05:02,161963207+00:00 | gunicorn/run | ###############################################
    2022-08-22T17:05:02,168970479+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,174364834+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,187280665+00:00 | gunicorn/run | AzureML image information: openmpi4.1.0-ubuntu20.04, Materialization Build:20220708.v2
    2022-08-22T17:05:02,188930082+00:00 | gunicorn/run | 
    2022-08-22T17:05:02,190557998+00:00 | gunicorn/run | 
    

    De builddatum van de installatiekopieën wordt na de Materialization Build notatie weergegeven. In het voorgaande voorbeeld is 20220708 de versie van de installatiekopieën 8 juli 2022. De afbeelding in dit voorbeeld is compatibel met Flask 2.

    Als u geen vergelijkbaar bericht in het containerlogboek ziet, is uw installatiekopieën verouderd en moeten ze worden bijgewerkt. Als u een CUDA-installatiekopie (Compute Unified Device Architecture) gebruikt en u geen nieuwere installatiekopie kunt vinden, controleert u of uw installatiekopie is afgeschaft in AzureML-Containers. U vindt aangewezen vervangingen voor afgeschafte installatiekopieën.

    Als u de server gebruikt met een online-eindpunt, kunt u de logboeken ook vinden op de pagina Logboeken op de pagina Eindpunten in Azure Machine Learning-studio.

Als u implementeert met SDK v1 en geen installatiekopieën expliciet opgeeft in uw implementatieconfiguratie, past de server het openmpi4.1.0-ubuntu20.04 pakket toe met een versie die overeenkomt met uw lokale SDK-toolset. De geïnstalleerde versie is echter mogelijk niet de meest recente beschikbare versie van de installatiekopieën.

Voor SDK-versie 1.43 installeert de server standaard de openmpi4.1.0-ubuntu20.04:20220616 pakketversie, maar deze pakketversie is niet compatibel met SDK 1.43. Zorg ervoor dat u de nieuwste SDK voor uw implementatie gebruikt.

Als u de installatiekopieën niet kunt bijwerken, kunt u het probleem tijdelijk voorkomen door de azureml-defaults==1.43 vermeldingen in azureml-inference-server-http~=0.4.13 uw omgevingsbestand vast te maken. Met deze vermeldingen wordt de server om de oudere versie met flask 1.0.x.

ImportError of ModuleNotFoundError tijdens het opstarten van de server

Tijdens het opstarten van de server kunt u een ImportError of ModuleNotFoundError meer specifieke modules tegenkomen, zoals opencensus, jinja2, markupsafeof click. In het volgende voorbeeld ziet u het foutbericht:

ImportError: cannot import name 'Markup' from 'jinja2'

De import- en modulefouten treden op wanneer u versie 0.4.10 of eerdere versies van de server gebruikt die de Flask-afhankelijkheid niet vastmaken aan een compatibele versie. Installeer een latere versie van de server om het probleem te voorkomen.

Overige algemene problemen

Andere veelvoorkomende problemen met online-eindpunten zijn gerelateerd aan conda-installatie en automatische schaalaanpassing.

Problemen met conda-installatie

Problemen met de implementatie van MLflow komen meestal voort uit problemen met de installatie van de gebruikersomgeving die is opgegeven in het conda.yml-bestand .

Voer de volgende stappen uit om problemen met conda-installatie op te sporen:

  1. Controleer de conda-installatielogboeken. Als de container is vastgelopen of te lang duurde om te worden opgestart, kan de update van de Conda-omgeving waarschijnlijk niet correct worden opgelost.
  2. Installeer het mlflow conda-bestand lokaal met de opdracht conda env create -n userenv -f <CONDA_ENV_FILENAME>.
  3. Als er lokaal fouten zijn, probeert u de conda-omgeving op te lossen en een functionele omgeving te maken voordat u deze opnieuw implementeert.
  4. Als de container vastloopt, zelfs als deze lokaal wordt omgezet, is de SKU-grootte die wordt gebruikt voor implementatie mogelijk te klein.
    • Installatie van Conda-pakketten vindt plaats tijdens runtime, dus als de SKU-grootte te klein is voor alle pakketten in het conda.yml omgevingsbestand, kan de container vastlopen.
    • Een Standard_F4s_v2-VM is een goede start-SKU-grootte, maar mogelijk hebt u grotere VM's nodig, afhankelijk van de afhankelijkheden die het conda-bestand opgeeft.
    • Voor Online-eindpunten van Kubernetes moet het Kubernetes-cluster minimaal vier vCPU-kernen en 8 GB geheugen hebben.

Problemen met automatisch schalen

Als u problemen ondervindt met automatisch schalen, raadpleegt u Problemen met automatische schaalaanpassing van Azure Monitor oplossen.

Voor Online-eindpunten van Kubernetes is de Azure Machine Learning-deductierouter een front-endonderdeel dat automatische schaalaanpassing verwerkt voor alle modelimplementaties in het Kubernetes-cluster. Zie Kubernetes-deductieroutering automatisch schalen voor meer informatie.