Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
- Gebruik lokale implementatie om uw modellen lokaal te testen en er fouten in op te sporen voordat u in de cloud implementeert.
- Gebruik containerlogboeken om problemen op te lossen.
- Inzicht in veelvoorkomende implementatiefouten die zich kunnen voordoen en hoe u deze kunt oplossen.
In de sectie HTTP-statuscodes wordt uitgelegd hoe oproepen en voorspellingsfouten worden toegewezen aan HTTP-statuscodes wanneer u eindpunten beoordeelt met REST-aanvragen.
Vereisten
- Een actief Azure-abonnement met de gratis of betaalde versie van Azure Machine Learning. Ontvang een gratis azure-abonnement voor de proefversie.
- 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 traceerheaders:
x-request-idis voorbehouden voor servertraceringsdoeleinden. 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-idis 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.
Aanbeveling
U kunt ook het Azure Machine Learning inferentie HTTP-server Python-pakket gebruiken om uw scorescript lokaal te debuggen. 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:
- Docker bouwt een nieuwe containerinstallatiekopie of haalt een bestaande installatiekopie op uit de lokale Docker-cache. Docker gebruikt een bestaande image als deze overeenkomt met het omgevingsonderdeel van het specificatiebestand.
- 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.
Aanbeveling
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 console-logboek van de inferentieserver bevat de uitvoer van afdruk- en logboekregistratiefuncties van uw scorescript score.py.
- Initialisatielogboeken voor opslag bevatten informatie over of code- en modelgegevens zijn gedownload naar de container. De container start voordat de container van de inferentieserver 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 -g <resource-group> -w <workspace-name> -e <endpoint-name> -n <deployment-name> -l 100
Of
az ml online-deployment get-logs --resource-group <resource-group> --workspace-name <workspace-name> --endpoint-name <endpoint-name> --name <deployment-name> --lines 100
Logboeken worden standaard opgehaald van de deductieserver. U kunt logboeken ophalen uit de opslaginitializercontainer door –-container storage-initializer te gebruiken.
De bovenstaande opdrachten bevatten --resource-group en --workspace-name. U kunt deze parameters ook globaal instellen om az configure te voorkomen dat ze in elke opdracht worden herhaald. Bijvoorbeeld:
az configure --defaults group=<resource-group> workspace=<workspace-name>
Voer de volgende opdracht uit om de huidige configuratie-instellingen te controleren:
az configure --list-defaults
Voeg --help of --debug toe aan opdrachten voor meer informatie.
Veelvoorkomende implementatiefouten
De implementatiebewerkingsstatus kan de volgende veelvoorkomende implementatiefouten rapporteren:
-
Algemeen voor zowel het beheerde online-eindpunt als het online-eindpunt van Kubernetes:
- Abonnement bestaat niet
- Opstarttaak is mislukt vanwege een autorisatiefout
- Opstarttaak is mislukt vanwege onjuiste roltoewijzingen in de resource
- Opstarttaak is mislukt vanwege onjuiste roltoewijzingen in het opslagaccount wanneer mdc is ingeschakeld
- Ongeldige sjabloonfunctiespecificatie
- Kan de afbeelding van de gebruikerscontainer niet downloaden
- Het downloaden van het gebruikersmodel is mislukt
Beperkt tot het online-eindpunt van Kubernetes:
Als u een online-implementatie van Kubernetes maakt of bijwerkt, ziet u ook veelvoorkomende fouten die specifiek zijn voor Kubernetes-implementaties.
FOUT: AfbeeldingBouwwerkFout
Deze fout wordt geretourneerd wanneer de Docker-image 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 van buildfouten bij images beschreven.
- Azure Container Registry autorisatiefout
- Installatieprocedure voor image build niet ingesteld in een privéwerkruimte met een virtueel netwerk
- Timeout voor afbeelding build
- Algemene of onbekende fout
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 autorisaties. 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 voor het bouwen van images niet 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 bij image build
Time-outs voor het bouwen van images worden vaak veroorzaakt doordat een image te groot is om binnen het tijdsbestek voor de aanmaak van de implementatie te voltooien. Controleer de build logs van uw afbeeldingen op de locatie die door de fout is gespecificeerd. De logbestanden worden afgekapt op het moment dat de afbeeldingopbouw een time-out bereikte.
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 standaard proefinstellingen als u ImageBuild-time-outs hebt.
Algemene fout bij het bouwen van afbeeldingen
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:
Voor alleen online-eindpunten van Kubernetes kan de Kubernetes-resource ook onvoldoende quotum hebben.
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 afbeelding en het model.
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_typeresource 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:
- Abonnement bestaat niet
- Opstarttaak is mislukt vanwege een autorisatiefout
- Opstarttaak is mislukt vanwege onjuiste roltoewijzingen in de resource
- Ongeldige sjabloonfunctiespecificatie
- Kan de afbeelding van de gebruikerscontainer niet downloaden
- Het downloaden van het gebruikersmodel is mislukt
- MLflow-modelindeling met privénetwerk wordt niet ondersteund
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.
Wanneer MDC is ingeschakeld, moet de beheerde identiteit van de gebruiker de toestemming Storage Blob Data Contributor hebben voor het opslagaccount van de werkruimte. Zie Storage Blob Authorization Error wanneer MDC is ingeschakeld voor meer informatie.
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. Voor meer informatie, zie containerregisterautorisatiefout.
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 gebruikerscontainerafbeelding niet downloaden
De gebruikerscontainer is mogelijk niet gevonden. Controleer de containerlogboeken voor meer informatie.
Zorg ervoor dat de containerafbeelding beschikbaar is in het containerregister van de werkruimte. Als de afbeelding bijvoorbeeld testacr.azurecr.io/azureml/azureml_92a029f831ce58d2ed011c3c42d35acb:latest is, kunt u de volgende opdracht gebruiken om de repository 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 afleidingsverzoeken naar geïmplementeerde services routeert, wordt geïnstalleerd tijdens de installatie van k8s-extension en wordt automatisch geschaald indien nodig. Dit onderdeel moet binnen de cluster ten minste één gezonde replica hebben.
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 crasht wanneer deze wordt uitgevoerd, waardoor er geen scores kunnen worden behaald. Deze fout kan optreden onder een van de volgende voorwaarden:
Er is een fout opgetreden in score.py. Gebruik
get-logsdit 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-logser geen logboeken worden geproduceerd, betekent dit meestal dat de container niet kan worden gestart. Om dit probleem op te lossen, probeer lokaal uit te rollen.Gereedheids- of levendigheidsprobes zijn niet correct ingesteld.
nl-NL: Initialisatie van containers duurt te lang, dus de gereedheids- of levendigheidstest mislukt boven de foutdrempel. In dit geval past u de probe-instellingen 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 givenfout krijgt, controleert u de afhankelijkheid tussen flask v2 enazureml-inference-server-http. Zie Http-serverproblemen oplossen voor meer informatie.
FOUT: BronNietGevonden
Mogelijk krijgt u deze fout wanneer u een beheerd online-eindpunt of Kubernetes-online-eindpunt gebruikt, om de volgende redenen:
- Azure Resource Manager kan een vereiste resource niet vinden
- Containerregister is privé of anderszins niet toegankelijk
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. Voor meer informatie, zie Fouten oplossen voor Resource Niet Gevonden.
Fout bij autorisatie van containerregister
Deze fout treedt op wanneer een image van een privé- of anderszins niet-toegankelijke containerregistry wordt 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:
- Ken de rol acrPull van uw privéregister toe aan de systeemidentiteit van uw online-eindpunt.
- 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 mitigatie slaagt, hoeft de image niet te worden gebouwd en is het uiteindelijke adres van de image het gegeven image-adres. Tijdens de implementatie haalt de systeemidentiteit van uw online-eindpunt de installatiekopie op uit het privéregister.
Raadpleeg Hoe werkruimtediagnostiek te 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: OperatieGeannuleerd
Mogelijk krijgt u deze fout wanneer u een beheerd online-eindpunt of Kubernetes-online-eindpunt gebruikt, om de volgende redenen:
- De bewerking is geannuleerd door een andere bewerking met een hogere prioriteit
- De bewerking is geannuleerd vanwege een eerdere bewerking die wacht op bevestiging van de vergrendeling
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, tijdens welke ze een vergrendeling verkrijgen om ervoor te zorgen dat ze geen racecondities 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 veranderingen door de rollen toewijzing van kracht worden.
De indeling van de geheime verwijzingen is ongeldig of de opgegeven geheimen bestaan niet in de werkruimteverbindingen of sleutelkluizen.
Voor meer informatie, zie Geheime injectie in online-eindpunten (preview) en Toegang tot geheimen van online-implementatie met behulp van geheime injectie (preview).
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:
- ACRSecretError
- TokenRefreshFailed
- GetAADTokenFailed
- ACRAuthenticatieuitdagingMislukt
- MislukteACR-tokenuitwisseling
- KubernetesNietBeschikbaar
Crashloopbackoff-fouten
Fouten in het score-script:
Overige fouten:
- NamespaceNietGevonden
- EndpointAlreadyExists
- ScoringFeUnhealthy
- Valideren van Score Mislukt
- OngeldigeDeploymentSpec
- PodUnschedulable
- PodOutOfMemory
- InferencingClientCallMislukt
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 Azure Arc-enabled Kubernetes of de 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: TokenvernieuwingMislukt
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-clusterverzoek voor het Microsoft Entra ID-token mislukt is of een time-out kreeg. Controleer de netwerktoegang en probeer het opnieuw.
Volg de instructies voor gebruik van Kubernetes Compute om de uitgaande proxy te controleren en ervoor te zorgen dat 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: ACR-authenticatie-uitdaging mislukt
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: ACR-tokenuitwisseling mislukt
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: KubernetesNietToegankelijk
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 cluster-netwerkbeleid en het containerregister van de werkruimte om te zien of het cluster afbeeldingen uit het containerregister kan trekken.
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 deployment pod heeft meer geheugen nodig dan zijn limiet.
Als u deze fout wilt beperken, controleert u eerst de implementatielogboeken op eventuele uitzonderingen in gebruikersscripts. Als de fout zich blijft voordoen, probeer dan de geheugenlimiet voor het type resource/instance te verhogen.
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 zitten vast 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: NamespaceNietGevonden
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, koppel dan de verouderde computereenheid los en koppel deze opnieuw om een nieuwe te maken, waarbij u een naamruimte opgeeft die al in uw cluster bestaat.
FOUT: GebruikersscriptInitMislukt
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
U kunt deze fout tegenkomen wanneer u Kubernetes online-implementaties maakt of bijwerkt. Het score.py-bestand dat u hebt geüpload bevat namelijk geen functie met de naam init() of run(). Controleer uw code en voeg de functie toe.
FOUT: EindpuntNietGevonden
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: OngeldigeImplementatieSpec
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 inplannen op de knooppunten vanwege onvoldoende middelen in uw cluster.
- Er komt geen knooppunt overeen met de knooppuntaffiniteitskiezer.
Volg deze stappen om deze fout te verhelpen:
- Controleer de
node selectordefinitie van deinstance_typedie u hebt gebruikt en denode labelconfiguratie van uw clusterknooppunten. - Controleer de
instance_typeen de SKU-grootte van het knooppunt voor het AKS-cluster, of de knooppuntresource voor het Azure Arc-ingeschakelde Kubernetes-cluster. - Als het cluster te weinig resources bevat, vermindert u de resourcevereiste van het exemplaartype of gebruikt u een ander exemplaartype met kleinere resourcevereisten.
- 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: InferentieClientOproepMislukt
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 ontkoppelt u de computer en koppelt u deze opnieuw.
Als u fouten wilt oplossen door opnieuw te koppelen, zorg er dan voor dat u dezelfde configuratie gebruikt als de losgekoppelde omgeving, zoals de computenaam en naamruimte, om andere fouten te voorkomen. Als het nog steeds niet werkt, vraagt u een beheerder die toegang heeft tot het cluster om kubectl get po -n azureml te gebruiken om te controleren of de relay-serverpods 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 reactietrailers teruggestuurd als de bandbreedtelimiet wordt afgedwongen.
-
ms-azureml-bandwidth-request-delay-msis 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 native 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 Application Gateway of een andere service gebruiken als een tussenlaag voor het afhandelen van CORS-preflightverzoeken.
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 het aanroepen van eindpunten en voorspellingsfouten toegewezen worden 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 bijvoorbeeld een beoordeling, of uw token is verlopen of heeft een onjuist formaat. 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 opgegeven time-out in request_timeout_ms binnen de request_settings 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 falende liveness- of gereedheidstest, kunt u ProbeSettings aanpassen om meer tijd toe te laten voor het bepalen van de liveness of gereedheid van de container. |
| 429 | Te veel aanvragen in behandeling | Uw model krijgt momenteel meer aanvragen dan het kan verwerken. Om een soepele werking te garanderen, staat Azure Machine Learning toe dat maximaal 2 * max_concurrent_requests_per_instance * instance_count requests parallel worden verwerkt op elk gewenst moment. 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 backoff om het systeem tijd te geven om zich 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 | Snelheidsbeperking | Het aantal aanvragen per seconde heeft de limieten voor beheerde online-eindpunten bereikt. |
| 500 | Interne serverfout | Azure Machine Learning-infrastructuur valt uit. |
Veelvoorkomende foutcodes voor Kubernetes Online-eindpunten
De volgende tabel bevat veelvoorkomende foutcodes wanneer REST-aanvragen Kubernetes online-eindpunten verbruiken:
| Statuscode | Fout | Beschrijving |
|---|---|---|
| 409 | Conflict fout | 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 autoscaler is ontworpen om geleidelijke wijzigingen in de belasting aan te kunnen. Als u grote pieken in aanvragen per seconde ontvangt, ontvangen clients mogelijk HTTP-statuscode 503. Hoewel de automatische schaalaanpassing snel reageert, kost het AKS aanzienlijk wat tijd om meer containers te maken. Zie Hoe u 503-statuscodefouten kunt voorkomen. |
| 504 | Aanvraag tijdt uit | 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 ERROR: ResourceNotReady om het score.py-bestand te debuggen. |
| 500 | Interne serverfout | Azure Machine Learning-infrastructuur valt uit. |
De 503-statuscode-fouten 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_utilizationwaarde 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 creëren waarmee de binnenkomende pieken kunnen worden verwerkt.
Hoe het aantal exemplaren te 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 wat de nieuwe minimumreplica's aankunnen, kunt u mogelijk opnieuw de foutmelding 503 ontvangen. Als het verkeer naar uw eindpunt bijvoorbeeld toeneemt, moet u mogelijk het minimum aantal 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 online endpoints mislukt met een bericht over de verouderde v1 legacy mode.
Beheerde online-eindpunten zijn een functie van het Azure Machine Learning v2 API-platform. Als uw Azure Machine Learning-werkruimte is geconfigureerd voor de verouderde modus v1, werken de beheerde online-eindpunten niet. Als de werkruimte-instelling is ingesteld op v1_legacy_mode, is de true verouderde modus v1 ingeschakeld en is er geen ondersteuning voor v2 API's.
Als u wilt zien hoe u de verouderde v1-modus uitschakelt, raadpleegt u De wijziging van netwerkisolatie met ons nieuwe API-platform in Azure Resource Manager.
Belangrijk
Controleer met uw netwerkbeveiligingsteam voordat u v1_legacy_mode naar false instelt, omdat de v1-verouderde modus 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 <key-vault-name> door de naam van uw sleutelkluis.
az keyvault network-rule list -n <key-vault-name>
Het antwoord voor deze opdracht is vergelijkbaar met de volgende JSON-code:
{
"bypass": "AzureServices",
"defaultAction": "Deny",
"ipRules": [],
"virtualNetworkRules": []
}
Als de waarde niet bypassis, gebruikt u de richtlijnen in AzureServices Azure Key Vault configureren om deze in te stellen op AzureServices.
Online-implementaties mislukken door een fout bij het downloaden van de image
Notitie
Dit probleem is van toepassing wanneer u de verouderde netwerkisolatiemethode gebruikt voor beheerde online-eindpunten. In deze methode maakt Azure Machine Learning een beheerd virtueel netwerk voor elke implementatie onder een eindpunt.
Controleer of de
egress-public-network-accessvlag de waardedisabledheeft voor de implementatie. Als deze vlag is ingeschakeld en de zichtbaarheid van het containerregister privé is, wordt deze fout verwacht.Gebruik de volgende opdracht om de status van de privé-eindpuntverbinding te controleren. Vervang
<registry-name>door de naam van Azure Container Registry voor uw werkruimte:az acr private-endpoint-connection list -r <registry-name> --query "[?privateLinkServiceConnectionState.description=='Egress for Microsoft.MachineLearningServices/workspaces/onlineEndpoints'].{ID:id, status:privateLinkServiceConnectionState.status}"Controleer in de antwoordcode of het
statusveld is ingesteld opApproved. Als de waarde nietApprovedis, gebruikt u de volgende opdracht om de verbinding goed te keuren. Vervang<private-endpoint-connection-ID>door de id die door de voorgaande opdracht wordt geretourneerd.az network private-endpoint-connection approve --id <private-endpoint-connection-ID> --description "Approved"
Scoring-eindpunt kan niet worden opgelost
Controleer of de client die de scoreaanvraag uitgeeft een virtueel netwerk is dat toegang heeft tot de Azure Machine Learning-werkruimte.
Gebruik de
nslookupopdracht op de hostnaam van het eindpunt om de IP-adresgegevens op te halen:nslookup <endpoint-name>.<endpoint-region>.inference.ml.azure.comUw opdracht ziet er bijvoorbeeld ongeveer als volgt uit:
nslookup endpointname.westcentralus.inference.ml.azure.comHet 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 gebruikt, bevindt het IP-adres zich in de eindpunt-URI, die u kunt ophalen uit de gebruikersinterface van studio.
- Zie Uw DNS bijwerken met een FQDN voor meer manieren om het IP-adres van het eindpunt op te halen.
Als de
nslookupopdracht de hostnaam niet oplost, voert u de acties uit in een van de volgende secties.
Beheerde online-eindpunten
Gebruik de volgende opdracht om te controleren of er een A-record bestaat in de dns-zone (Private Domain Name System) voor het virtuele netwerk.
az network private-dns record-set list -z privatelink.api.azureml.ms -o tsv --query [].nameDe resultaten moeten een vermelding bevatten die vergelijkbaar is met
*.<GUID>.inference.<region>.Als er geen deductiewaarde wordt geretourneerd, verwijdert u het privé-eindpunt voor de werkruimte en maakt u deze opnieuw. Zie Een privé-eindpunt configureren voor meer informatie.
Als de werkruimte met een privé-eindpunt gebruikmaakt van een aangepaste DNS-server, voert u de volgende opdracht uit om te controleren of de resolutie van de aangepaste DNS-server correct werkt:
dig <endpoint-name>.<endpoint-region>.inference.ml.azure.com
Kubernetes online-eindpunten
Controleer de DNS-configuratie in het Kubernetes-cluster.
Controleer of de Azure Machine Learning-deductierouter werkt zoals
azureml-feverwacht. Voer de volgende stappen uit om deze controle uit te voeren:Voer de volgende opdracht uit in de
azureml-fepod:kubectl exec -it deploy/azureml-fe -- /bin/bashVoer een van de volgende opdrachten uit:
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"
Als de curl HTTPS-opdracht mislukt of een time-out optreedt, maar de HTTP-opdracht werkt, controleert u of het certificaat geldig is.
Als het voorgaande proces niet kan worden omgezet in de A-record, gebruikt u de volgende opdracht om te controleren of de omzetting werkt vanaf het openbare IP-adres van Azure DNS, 168.63.129.16:
dig @168.63.129.16 <endpoint-name>.<endpoint-region>.inference.ml.azure.comAls de voorgaande opdracht slaagt, moet u problemen met de voorwaardelijke doorstuurserver voor Azure Private Link oplossen op een aangepaste DNS.
Online-implementaties kunnen niet worden beoordeeld
Voer de volgende opdracht uit om de status van een implementatie te zien die niet kan worden beoordeeld:
az ml online-deployment show -e <endpoint-name> -n <deployment-name> --query '{name:name,state:provisioning_state}'Een waarde van
Succeededvoor het veldstateduidt op een geslaagde implementatie.Voor een geslaagde implementatie gebruikt u de volgende opdracht om te controleren of verkeer is toegewezen aan de implementatie:
az ml online-endpoint show -n <endpoint-name> --query trafficIn het antwoord van deze opdracht moet het percentage verkeer worden vermeld dat aan elke implementatie is toegewezen.
Aanbeveling
Deze stap is niet nodig als u de
azureml-model-deploymentheader in uw aanvraag gebruikt om deze implementatie te targeten.Als de verkeerstoewijzingen of implementatieheader juist zijn ingesteld, gebruikt u de volgende opdracht om de logboeken voor het eindpunt op te halen:
az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name>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 inferenceserver
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:
Verzamel informatie over geïnstalleerde pakketten en versies voor uw Python-omgeving.
Controleer in uw omgevingsbestand de versie van het
azureml-inference-server-httpPython-pakket dat is opgegeven. Controleer in de opstartlogboeken van de inferentie-HTTP-server van Azure Machine Learning de versie van de inferentieserver die wordt weergegeven. Controleer of de twee versies overeenkomen.In sommige gevallen installeert de pip-afhankelijkheidsoplossing onverwachte pakketversies. Mogelijk moet u
pipuitvoeren om de geïnstalleerde pakketten en versies te corrigeren.Als u in uw omgeving Flask of de afhankelijkheden daarvan opgeeft, verwijder dan deze items.
- Afhankelijke pakketten zijn
flask,jinja2,itsdangerous,werkzeug,markupsafe, enclick. - Het
flaskpakket wordt vermeld als een afhankelijkheid in het deductieserverpakket. De beste methode is om de deductieserver toe te staan hetflaskpakket te installeren. - Wanneer de deductieserver is geconfigureerd ter ondersteuning van nieuwe versies van Flask, ontvangt de deductieserver automatisch de pakketupdates zodra deze beschikbaar komen.
- Afhankelijke pakketten zijn
Controleer de versie van de deductieserver
Het azureml-inference-server-http serverpakket wordt gepubliceerd naar PyPI. De PyPI-pagina bevat het wijzigingenlogboek en alle versies van het pakket.
Als u een vroege 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 | Probleem | Resolutie |
|---|---|---|---|
| 0.4.x | Gebundeld in trainingsafbeeldingen die zijn gedateerd tot en met 20220601 of eerder en pakketversies 0.1.34 tot en met 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 1.4.x, indien mogelijk de nieuwste versie. |
| 0.6.x | Vooraf geïnstalleerd in inference-afbeeldingen 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 | Maakt gebruik van een bijgewerkte logboekindeling. Hiermee wordt de ondersteuning voor Python 3.6 beëindigd. | N.v.t. | N.v.t. |
| 1.0.x | Hiermee wordt de ondersteuning voor Python 3.7 beëindigd. | N.v.t. | N.v.t. |
| 1.1.x | Wordt gemigreerd naar pydantic 2.0. |
N.v.t. | N.v.t. |
| 1.2.x | Voegt ondersteuning toe voor Python 3.11. Updates gunicorn voor versie 22.0.0. Updates werkzeug voor versie 3.0.3 en nieuwere versies. |
N.v.t. | N.v.t. |
| 1.3.x | Voegt ondersteuning toe voor Python 3.12. Upgrades certifi naar versie 2024.7.4. Upgrade flask-cors naar versie 5.0.0. Hiermee worden de gunicorn en pydantic pakketten bijgewerkt. |
N.v.t. | N.v.t. |
| 1.4.x | Voert een upgrade van waitress naar versie 3.0.1 uit. Hiermee wordt de ondersteuning voor Python 3.8 beëindigd. Hiermee verwijdert u de compatibiliteitslaag die voorkomt dat de Flask 2.0-upgrade code voor aanvraagobjecten onderbreekt. |
Als u afhankelijk bent van de compatibiliteitslaag, werkt uw aanvraagobjectcode mogelijk niet. | Migreer uw scorescript naar Flask 2. |
Pakketafhankelijkheden controleren
De meest relevante afhankelijke pakketten voor het azureml-inference-server-http serverpakket zijn:
flaskopencensus-ext-azureinference-schema
Als u het azureml-defaults pakket opgeeft in uw Python-omgeving, is het azureml-inference-server-http pakket een afhankelijk pakket. De afhankelijkheid wordt automatisch geïnstalleerd.
Aanbeveling
Als u de Azure Machine Learning SDK voor Python v1 gebruikt en het pakket niet expliciet opgeeft azureml-defaults in uw Python-omgeving, kan de SDK het pakket automatisch toevoegen. De pakketversie is echter vergrendeld ten opzichte van de SDK-versie. Als de SDK-versie bijvoorbeeld 1.38.0 is, wordt de azureml-defaults==1.38.0 vermelding toegevoegd aan de pip-vereisten van de omgeving.
TypeError tijdens het opstarten van de deductieserver
U kunt het volgende TypeError tegenkomen tijdens het opstarten van de deductieserver:
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 het azureml-inference-server-http 0.7.0-pakket en latere versies, en het azureml-defaults 1.44-pakket en latere versies.
Als u het Flask 2-pakket niet gebruikt in een Azure Machine Learning Docker-image, gebruik dan de nieuwste versie van het
azureml-inference-server-httpofazureml-defaultspakket.Als u het Flask 2-pakket in een Azure Machine Learning Docker-image gebruikt, controleer of de buildversie
July 2022of hoger is.U kunt de afbeeldingsversie vinden in de containerlogboeken. Zie bijvoorbeeld de volgende logboekinstructies:
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 afbeelding wordt na de
Materialization Build-notatie weergegeven. In het voorgaande voorbeeld is de beeldversie20220708, of 8 juli 2022. De afbeelding in dit voorbeeld is compatibel met Flask 2.Als u geen vergelijkbaar bericht in uw containerlog ziet, is uw image verouderd en moet deze worden bijgewerkt. Als u een CUDA-installatiekopie (Compute Unified Device Architecture) gebruikt en u geen nieuwere installatiekopie kunt vinden, controleert u de opslagplaats AzureML-Containers om te zien of uw installatiekopie is afgeschaft. U kunt aangewezen vervangingen vinden voor verouderde afbeeldingen.
Als u de deductieserver gebruikt met een online-eindpunt, kunt u ook de logboeken vinden in Azure Machine Learning Studio. Selecteer op de pagina voor uw eindpunt het tabblad Logboeken .
Als u implementeert met de SDK v1 en niet expliciet een installatiekopie opgeeft in uw implementatieconfiguratie, past de deductieserver 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 afbeeldingen.
Voor SDK-versie 1.43 installeert de deductieserver 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 het image niet kunt bijwerken, kunt u het probleem tijdelijk voorkomen door de azureml-defaults==1.43 of azureml-inference-server-http~=0.4.13 vermeldingen in uw omgevingsbestand te vergrendelen. Met deze vermeldingen wordt de inferentieserver geïnstrueerd om de oudere versie met flask 1.0.x te installeren.
ImportError of ModuleNotFoundError tijdens het opstarten van de inferenceserver
Tijdens het opstarten van de inferenceserver kunt u een ImportError of ModuleNotFoundError tegenkomen op specifieke modules zoals opencensus, jinja2, markupsafe, of 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 deductieserver gebruikt die de Flask-afhankelijkheid niet vastmaken aan een compatibele versie. Installeer een latere versie van de deductieserver 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:
- Controleer de conda-installatielogboeken. Als de container is gecrasht of te lang duurde om op te starten, is de kans groot dat de Conda-omgeving niet correct is bijgewerkt.
- Installeer het mlflow conda-bestand lokaal met de opdracht
conda env create -n userenv -f <CONDA_ENV_FILENAME>. - Als er lokaal fouten zijn, probeert u de conda-omgeving op te lossen en een functionele omgeving te maken voordat u deze opnieuw implementeert.
- 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, zie Problemen met automatisch schalen 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. Voor meer informatie zie Autoscale Kubernetes-afleidingsroutering.