Problemen met de implementatie en score van online-eindpunten oplossen

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

Meer informatie over het oplossen van veelvoorkomende problemen in de implementatie en het scoren van online-eindpunten van Azure Machine Learning.

Dit document is gestructureerd op 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 bij het scoren van eindpunten met REST-aanvragen.

Vereisten

Lokaal implementeren

Bij lokale implementatie wordt een model geïmplementeerd in een lokale Docker-omgeving. 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 van Deductie http-server van Azure Machine Learning 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.

Lokale implementatie ondersteunt het maken, bijwerken en verwijderen van een lokaal eindpunt. U kunt hiermee ook logboeken van het eindpunt aanroepen en ophalen.

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

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

Als onderdeel van de lokale implementatie worden de volgende stappen uitgevoerd:

  • Docker bouwt een nieuwe containerinstallatiekopie of haalt een bestaande installatiekopie op uit de lokale Docker-cache. Er wordt een bestaande installatiekopieën gebruikt als er een afbeelding is die overeenkomt met het omgevingsgedeelte van het specificatiebestand.
  • Docker start een nieuwe container met gekoppelde lokale artefacten, zoals model- en codebestanden.

Zie Lokaal implementeren in Implementeren en beoordelen van een machine learning-model voor meer informatie.

Tip

Gebruik Visual Studio Code om uw eindpunten lokaal te testen en fouten op te sporen. Zie voor meer informatie debug online eindpunten lokaal in Visual Studio Code.

Conda-installatie

Over het algemeen zijn problemen met de MLflow-implementatie het gevolg van problemen met de installatie van de gebruikersomgeving die in het conda.yaml bestand is opgegeven.

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

  1. Controleer de logboeken voor conda-installatie. Als de container is vastgelopen of te lang duurt 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.

    1. Installatie van Conda-pakketten vindt tijdens runtime plaats, dus als de SKU-grootte te klein is om alle pakketten in het conda.yaml omgevingsbestand te kunnen opvangen, kan de container vastlopen.
    2. Een Standard_F4s_v2-VM is een goede start-SKU-grootte, maar er zijn mogelijk grotere nodig, afhankelijk van welke afhankelijkheden zijn opgegeven in het conda-bestand.
    3. Voor het online-eindpunt van Kubernetes moet het Kubernetes-cluster minimaal 4 vCPU-kernen en 8 GB geheugen hebben.

Containerlogboeken ophalen

U kunt geen directe toegang krijgen tot de VM waar het model is geïmplementeerd. U kunt echter logboeken ophalen van enkele van de containers die op de VM 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.

Er zijn twee typen containers waaruit u de logboeken kunt ophalen:

  • Deductieserver: logboeken bevatten het consolelogboek (van de deductieserver) die de uitvoer van afdruk-/logboekregistratiefuncties van uw scorescript (score.py code) bevat.
  • Initialisatiefunctie voor opslag: logboeken bevatten informatie over of code- en modelgegevens naar de container zijn gedownload. De container wordt uitgevoerd voordat de container van de deductieserver wordt uitgevoerd.

Gebruik de volgende CLI-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

Voeg --resource-group en --workspace-name aan deze opdrachten toe als u deze parameters nog niet hebt ingesteld via az configure.

Als u informatie wilt over het instellen van deze parameters en als u momenteel waarden hebt ingesteld, voert u het volgende uit:

az ml online-deployment get-logs -h

Standaard worden de logboeken opgehaald van de deductieserver.

Notitie

Als u Python-logboekregistratie gebruikt, moet u ervoor zorgen dat u de juiste volgorde op logboekniveau gebruikt om de berichten te publiceren naar logboeken. Bijvoorbeeld INFO.

U kunt ook logboeken ophalen uit de container voor opslag-initialisatie door te geven –-container storage-initializer.

Voeg opdrachten toe --help en/of --debug aan opdrachten voor meer informatie.

Voor het online-eindpunt van Kubernetes hebben de beheerders rechtstreeks toegang tot het cluster waar u het model implementeert. Dit is flexibeler voor hen om het logboek in Kubernetes te controleren. Voorbeeld:

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

Tracering aanvragen

Er zijn twee ondersteunde traceringsheaders:

  • x-request-id is gereserveerd voor servertracering. We overschrijven deze header om ervoor te zorgen dat deze een geldige GUID is.

    Notitie

    Wanneer u een ondersteuningsticket voor een mislukte aanvraag maakt, voegt u de id van de mislukte aanvraag toe om het onderzoek te versnellen.

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

Veelvoorkomende implementatiefouten

De volgende lijst bevat veelvoorkomende implementatiefouten die worden gerapporteerd als onderdeel van de implementatiebewerkingsstatus:

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

FOUT: ImageBuildFailure

Deze fout wordt geretourneerd wanneer de omgeving (docker-installatiekopie) wordt gebouwd. U kunt het buildlogboek controleren voor meer informatie over de fouten. Het buildlogboek bevindt zich in de standaardopslag voor uw Azure Machine Learning-werkruimte. De exacte locatie kan worden geretourneerd als onderdeel van de fout. Bijvoorbeeld: "the build log under the storage account '[storage-account-name]' in the container '[container-name]' at the path '[path-to-the-log]'".

De volgende lijst bevat veelvoorkomende scenario's met buildfouten voor installatiekopieën:

We raden u ook aan om de standaardtestinstellingen te controleren als u ImageBuild-time-outs hebt.

Autorisatiefout in containerregister

Als in het foutbericht wordt vermeld "container registry authorization failure" dat u geen toegang hebt tot het containerregister met de huidige referenties. De desynchronisatie van de sleutels van een werkruimteresource kan deze fout veroorzaken en het duurt enige tijd om automatisch te synchroniseren. U kunt echter handmatig een synchronisatie van sleutels aanroepen, waardoor de autorisatiefout kan worden opgelost.

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

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

Als het foutbericht vermeldt "failed to communicate with the workspace's container registry" en u virtuele netwerken gebruikt en de Azure Container Registry van de werkruimte privé is en is geconfigureerd met een privé-eindpunt, moet u Azure Container Registry inschakelen om installatiekopieën in het virtuele netwerk toe te staan.

Algemene buildfout voor installatiekopieën

Zoals eerder vermeld, kunt u het buildlogboek controleren 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.

We raden u ook aan lokaal te implementeren om uw modellen lokaal te testen en fouten op te sporen voordat ze in de cloud worden geïmplementeerd.

FOUT: OutOfQuota

De volgende lijst is van algemene resources die mogelijk geen quotum meer hebben bij het gebruik van Azure-services:

Daarnaast is de volgende lijst van algemene resources die mogelijk alleen een quotum hebben voor het online-eindpunt van Kubernetes:

CPU-quotum

Voordat u een model implementeert, moet u voldoende rekenquotum hebben. Met dit quotum wordt gedefinieerd 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.

Een mogelijke oplossing is om te controleren of er ongebruikte implementaties zijn die u kunt verwijderen. U kunt ook een aanvraag indienen voor een quotumverhoging.

Clusterquotum

Dit probleem treedt op wanneer u onvoldoende quotum voor Azure Machine Learning Compute-clusters hebt. Met dit quotum definieert u het totale aantal clusters dat in één keer per abonnement wordt gebruikt om CPU- of GPU-knooppunten in Azure Cloud te implementeren.

Een mogelijke oplossing is om te controleren of er ongebruikte implementaties zijn die u kunt verwijderen. U kunt ook een aanvraag indienen voor een quotumverhoging. Zorg ervoor dat u het quotumtype voor deze aanvraag voor quotumverhoging selecteert Machine Learning Service: Cluster Quota .

Schijfquotum

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

Geheugenquotum

Dit probleem 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 werkruimteresources. Als de limiet voor roltoewijzing is bereikt, probeert u enkele ongebruikte roltoewijzingen in dit abonnement te verwijderen. U kunt alle roltoewijzingen in Azure Portal controleren door naar het menu Toegangsbeheer te navigeren.

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

Dit probleem 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 meestal aan dat de resource onvoldoende is in het cluster, OutOfQuota: Kubernetes unschedulable. Details:0/1 nodes are available: 1 Too many pods...bijvoorbeeld, wat betekent dat er te veel pods in het cluster zijn en niet voldoende resources om het nieuwe model te implementeren op basis van uw aanvraag.

U kunt de volgende oplossing proberen om dit probleem op te lossen:

  • Voor IT-ops die het Kubernetes-cluster onderhouden, kunt u meer knooppunten toevoegen of enkele ongebruikte pods in het cluster wissen om bepaalde resources vrij te geven.
  • Voor machine learning-technici die modellen implementeren, kunt u proberen de resourceaanvraag van uw implementatie te verminderen:
    • Als u de resourceaanvraag rechtstreeks definieert in de implementatieconfiguratie via de resourcesectie, kunt u proberen de resourceaanvraag te verminderen.
    • Als u resource instance type voor modelimplementatie definieert, kunt u contact opnemen met de IT-instanties om de resourceconfiguratie van het exemplaartype aan te passen. Meer informatie kunt u raadplegen over het beheren van het Kubernetes-exemplaartype.

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 de score.py opgegeven implementatie wilt uitvoeren, maakt Azure een container met alle resources die nodig score.py zijn en voert u het scorescript uit op die container.

Als uw container niet kan worden gestart, betekent dit dat scoren niet kan plaatsvinden. Het kan zijn dat de container meer resources aanvraagt dan wat instance_type kan worden ondersteund. Zo ja, dan kunt u overwegen om de instance_type online-implementatie bij te werken.

Voer de volgende opdracht uit om de exacte reden voor een fout op te halen:

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

FOUT: BadArgument

De volgende lijst bevat de redenen waarom u deze fout kunt tegenkomen bij het gebruik van een beheerd online-eindpunt of kubernetes-online-eindpunt:

De volgende lijst is van redenen waarom u deze fout alleen kunt tegenkomen wanneer u kubernetes online-eindpunt gebruikt:

Het abonnement bestaat niet

Het opgegeven Azure-abonnement moet bestaan. Deze fout treedt op wanneer we het Azure-abonnement waarnaar wordt verwezen, niet kunnen vinden. Deze fout wordt waarschijnlijk veroorzaakt door een typefout in de abonnements-id. Controleer of de abonnements-id correct is getypt en of deze momenteel actief is.

Zie de sectie Vereisten voor meer informatie over Azure-abonnementen.

Autorisatiefout

Nadat u de rekenresource hebt ingericht (tijdens het maken van een implementatie), probeert Azure de containerinstallatiekopie van de gebruiker op te halen uit de werkruimte Azure Container Registry (ACR). Het probeert het gebruikersmodel en codeartefacten te koppelen aan de gebruikerscontainer vanuit het werkruimteopslagaccount.

Om deze acties uit te voeren, gebruikt Azure beheerde identiteiten voor toegang tot het opslagaccount en het containerregister.

  • Als u het gekoppelde eindpunt hebt gemaakt 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.

  • Als u het gekoppelde eindpunt hebt gemaakt met door de gebruiker toegewezen identiteit, moet de beheerde identiteit van de gebruiker de machtiging Opslagblobgegevenslezer hebben voor het opslagaccount voor de werkruimte en de AcrPull-machtiging voor de Azure Container Registry (ACR) voor de werkruimte. Zorg ervoor dat uw door de gebruiker toegewezen identiteit de juiste machtiging heeft.

Zie containerregisterautorisatiefout 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 bij het opsporen van fouten in deze fout, en het artikel over de structuur van de Azure-beleidsdefinitie, waarin tips worden besproken om sjabloonfouten te voorkomen.

Kan de installatiekopieën van de gebruikerscontainer niet downloaden

Het is mogelijk dat de gebruikerscontainer niet kan worden gevonden. Controleer containerlogboeken voor meer informatie.

Zorg ervoor dat de containerinstallatiekopieën beschikbaar zijn in werkruimte ACR.

Als de installatiekopieën testacr.azurecr.io/azureml/azureml_92a029f831ce58d2ed011c3c42d35acb:latest bijvoorbeeld de opslagplaats controleren met az acr repository show-tags -n testacr --repository azureml/azureml_92a029f831ce58d2ed011c3c42d35acb --orderby time_desc --output table.

Het downloaden van het gebruikersmodel is mislukt

Het is mogelijk dat het model van de gebruiker niet kan worden gevonden. Controleer containerlogboeken voor meer informatie.

Zorg ervoor dat u het model hebt geregistreerd bij dezelfde werkruimte als de implementatie. Details weergeven voor een model in een werkruimte:

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

Waarschuwing

U moet versie of label opgeven om de gegevens van het model op te halen.

U kunt ook controleren 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 deze opdracht gebruiken om te controleren of deze bestaat:

    az storage blob exists --account-name foobar --container-name 210212154504-1517266419 --name WebUpload/210212154504-1517266419/GaussianNB.pkl --subscription <sub-name>`
    
  • Als de blob aanwezig is, kunt u deze 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

Deze fout treedt op wanneer u probeert een MLflow-model te implementeren met een implementatiemethode zonder code in combinatie met de verouderde netwerkisolatiemethode voor beheerde online-eindpunten. Deze privénetwerkfunctie kan niet worden gebruikt in combinatie met een MLFlow-modelindeling als u de verouderde methode voor netwerkisolatie gebruikt. Als u een MLflow-model wilt implementeren met de implementatiebenadering zonder code, kunt u het beheerde VNet van de werkruimte gebruiken.

Resourceaanvragen groter dan limieten

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

azureml-fe niet gereed

Het front-endonderdeel (azureml-fe) waarmee binnenkomende deductieaanvragen naar geïmplementeerde services worden gerouteerd, wordt indien nodig automatisch geschaald. Deze wordt geïnstalleerd tijdens de installatie van de k8s-extensie.

Dit onderdeel moet in orde zijn op het cluster, ten minste één goede replica. U ontvangt dit foutbericht als deze niet beschikbaar is wanneer u het online-eindpunt van Kubernetes activeert en de aanvraag voor het maken/bijwerken van de implementatie.

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 de score.py opgegeven implementatie wilt uitvoeren, maakt Azure een container met alle resources die nodig score.py zijn en voert u het scorescript uit op die container. De fout in dit scenario is dat deze container vastloopt wanneer deze wordt uitgevoerd, wat betekent dat scoren niet kan optreden. Deze fout treedt op wanneer:

  • Er is een fout in score.py. Gebruik get-logs dit om veelvoorkomende problemen te diagnosticeren:
    • Een pakket dat score.py probeert te importeren, is niet 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 in plaats daarvan lokaal te implementeren.
  • Gereedheids- of livenesstests zijn niet correct ingesteld.
  • Het initialiseren van containers duurt te lang, zodat de gereedheids- of livenesstest buiten de drempelwaarde voor fouten mislukt. In dit geval past u de testinstellingen aan zodat de container langer kan worden geïnitialiseerd. Of probeer een grotere VM-SKU onder ondersteunde VM-SKU's, waardoor de initialisatie wordt versneld.
  • Er is een fout opgetreden in de omgeving die is ingesteld voor de container, zoals een ontbrekende afhankelijkheid.
  • Wanneer u de TypeError: register() takes 3 positional arguments but 4 were given fout ontvangt, controleert u de afhankelijkheid tussen flask v2 en azureml-inference-server-http. Zie veelgestelde vragen over deductie-HTTP-server voor meer informatie.

FOUT: ResourceNotFound

De volgende lijst bestaat uit redenen waarom u deze fout alleen kunt tegenkomen wanneer u een beheerd online-eindpunt of Een online-eindpunt van Kubernetes gebruikt:

Resource Manager kan geen resource vinden

Deze fout treedt op wanneer Azure Resource Manager geen vereiste resource kan vinden. U kunt deze fout bijvoorbeeld ontvangen als naar een opslagaccount is verwezen, maar niet kan worden gevonden op het pad waarop het is opgegeven. Controleer de resources die mogelijk zijn opgegeven door het exacte pad of de spelling van hun namen.

Zie Resource niet gevonden fouten oplossen voor meer informatie.

Fout bij autorisatie van containerregister

Deze fout treedt op wanneer een installatiekopieën van een privé- of anderszins niet-toegankelijk containerregister zijn opgegeven voor implementatie. Op dit moment kunnen onze API's geen persoonlijke registerreferenties accepteren.

U kunt deze fout verhelpen door ervoor te zorgen dat het containerregister niet privé is of de volgende stappen volgt:

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

Als de beperking is geslaagd, 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 API voor werkruimten gebruiken voor meer diagnostische informatie.

FOUT: OperationCanceled

De volgende lijst bevat de redenen waarom u deze fout kunt tegenkomen bij het gebruik van een beheerd online-eindpunt of kubernetes-online-eindpunt:

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 uw bewerking is overschreven door een andere bewerking met een hogere prioriteit.

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, waarna ze een vergrendeling ophalen om ervoor te zorgen dat er geen racevoorwaarden optreden. 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 de vergrendeling is ontvangen om door te gaan. Het kan erop wijzen dat u te snel na de eerste aanvraag een vergelijkbare aanvraag hebt ingediend.

Als u de bewerking opnieuw probeert uit te voeren nadat u enkele seconden 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 en/of sleutelkluizen. Deze fout treedt op wanneer:

  • De eindpuntidentiteit heeft niet de Azure RBAC-machtiging om de geheimen van de werkruimteverbindingen en/of sleutelkluizen te lezen, ook al zijn de geheimen door de implementatiedefinitie opgegeven als verwijzingen (toegewezen aan omgevingsvariabelen). Houd er rekening mee dat het tijd kan duren voordat de wijzigingen van kracht worden.
  • De indeling van de geheime verwijzingen is ongeldig of de opgegeven geheimen bestaan niet in de werkruimteverbindingen en/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

Hoewel we ons best doen om een stabiele en betrouwbare service te bieden, gaan dingen soms niet volgens plan. Als u deze fout krijgt, betekent dit dat iets niet aan onze kant ligt en dat we dit moeten oplossen. Dien een klantondersteuningsticket in met alle gerelateerde informatie en we kunnen het probleem oplossen.

Veelvoorkomende fouten die specifiek zijn voor Kubernetes-implementaties

Fouten met betrekking tot identiteit en verificatie:

Fouten met betrekking tot crashloopbackoff:

Fouten met betrekking tot scorescript:

Overige:

FOUT: ACRSecretError

De volgende lijst is van redenen waarom u deze fout kunt tegenkomen bij het maken/bijwerken van de kubernetes-onlineimplementaties:

  • Roltoewijzing is niet voltooid. Wacht in dit geval enkele seconden en probeer het later opnieuw.
  • De Azure ARC (voor Azure Arc Kubernetes-cluster) of de Azure Machine Learning-extensie (For AKS) is niet juist geïnstalleerd of geconfigureerd. Probeer de configuratie en status van de Azure ARC- of Azure Machine Learning-extensie te controleren.
  • Het Kubernetes-cluster heeft een onjuiste netwerkconfiguratie, controleer de proxy, het netwerkbeleid of het certificaat.
    • Als u een privé-AKS-cluster gebruikt, moet u privé-eindpunten instellen voor ACR, opslagaccount, werkruimte in het AKS-vnet.
  • Zorg ervoor dat de versie van uw Azure Machine Learning-extensie groter is dan v1.1.25.

FOUT: TokenRefreshFailed

Deze fout komt doordat de extensie geen principalreferenties kan ophalen uit Azure omdat de Kubernetes-clusteridentiteit niet juist is ingesteld. Installeer de Azure Machine Learning-extensie opnieuw en probeer het opnieuw.

FOUT: GetAADTokenFailed

Deze fout treedt op omdat het Azure AD-token voor het Kubernetes-cluster is mislukt of een time-out heeft opgetreden. Controleer vervolgens de toegankelijkheid van uw netwerk en probeer het opnieuw.

  • U kunt het vereiste netwerkverkeer configureren volgen om de uitgaande proxy te controleren. Zorg ervoor dat het cluster verbinding kan maken met de werkruimte.
  • De URL van het werkruimte-eindpunt vindt u in het online eindpunt CRD in het cluster.

Als uw werkruimte een privéwerkruimte is die de toegang tot het openbare netwerk heeft uitgeschakeld, mag het Kubernetes-cluster alleen communiceren met die privéwerkruimte via de privékoppeling.

  • U kunt controleren of de toegang tot de werkruimte openbare toegang toestaat, ongeacht of een AKS-cluster zelf openbaar of privé is, maar geen toegang heeft tot de privéwerkruimte.
  • Meer informatie kunt u raadplegen naar Deductieomgeving van Secure Azure Kubernetes Service

FOUT: ACRAuthenticationChallengeFailed

Deze fout komt doordat het Kubernetes-cluster de ACR-service van de werkruimte niet kan bereiken om verificatieuitdaging uit te voeren. Controleer uw netwerk, met name de openbare ACR-netwerktoegang en probeer het opnieuw.

U kunt de stappen voor probleemoplossing volgen in GetAADTokenFailed om het netwerk te controleren.

FOUT: ACRTokenExchangeFailed

Deze fout komt doordat het Kubernetes-cluster exchange ACR-token is mislukt omdat het Azure AD-token nog niet is geautoriseerd. Omdat de roltoewijzing enige tijd in beslag neemt, kunt u dus even wachten en het opnieuw proberen.

Deze fout kan ook worden veroorzaakt door te veel aanvragen voor de ACR-service op dat moment. Dit moet een tijdelijke fout zijn. U kunt het later opnieuw proberen.

FOUT: KubernetesUnaccessible

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

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

Om deze fout te verhelpen, kunt u het volgende doen:

FOUT: ImagePullLoopBackOff

De reden waarom u deze fout kunt tegenkomen bij het maken/bijwerken van Kubernetes online-implementaties, is omdat u de installatiekopieën niet kunt downloaden uit het containerregister, wat resulteert in de pull-fout van de installatiekopieën.

In dit geval kunt u het clusternetwerkbeleid en het containerregister van de werkruimte controleren als het cluster een installatiekopie uit het containerregister kan ophalen.

FOUT: DeploymentCrashLoopBackOff

De reden waarom u deze fout kunt tegenkomen bij het maken/bijwerken van Kubernetes Online-implementaties, is de initialisatie van de gebruikerscontainer vastgelopen. Er zijn twee mogelijke redenen voor deze fout:

  • Het gebruikersscript score.py bevat een syntaxisfout of importfout en genereert vervolgens uitzonderingen bij het initialiseren.
  • Of de implementatiepod heeft meer geheugen nodig dan de limiet.

Om deze fout te verhelpen, kunt u eerst de implementatielogboeken controleren op eventuele uitzonderingen in gebruikersscripts. Als de fout zich blijft voordoen, probeert u de geheugenlimiet voor resources/het exemplaartype uit te breiden.

FOUT: KubernetesCrashLoopBackOff

De volgende lijst is van redenen waarom u deze fout kunt tegenkomen bij het maken/bijwerken van de Kubernetes online-eindpunten/implementaties:

  • Een of meer pods die vastzitten in de crashLoopBackoff-status, kunt u controleren of het implementatielogboek bestaat en controleren of er foutberichten in het logboek staan.
  • Er is een fout opgetreden en score.py de container is vastgelopen wanneer u de scorecode init, kunt u FOUT volgen : Het onderdeel ResourceNotReady .
  • Uw scoreproces heeft meer geheugen nodig dat uw implementatieconfiguratielimiet onvoldoende is. U kunt proberen de implementatie bij te werken met een grotere geheugenlimiet.

FOUT: NamespaceNotFound

De reden waarom u deze fout kunt tegenkomen bij het maken/bijwerken van de kubernetes-online-eindpunten, is omdat de naamruimte die uw Kubernetes-rekenproces gebruikt niet beschikbaar is in uw cluster.

U kunt de Kubernetes-berekening controleren in uw werkruimteportal en de naamruimte in uw Kubernetes-cluster controleren. Als de naamruimte niet beschikbaar is, kunt u de verouderde rekenkracht loskoppelen en opnieuw koppelen om een nieuwe te maken, waarbij u een naamruimte opgeeft die al in uw cluster bestaat.

FOUT: UserScriptInitFailed

De reden waarom u deze fout kunt tegenkomen bij het maken/bijwerken van de online-implementaties van Kubernetes, is omdat de init-functie in het geüploade score.py bestand een uitzondering heeft gegenereerd.

U kunt de implementatielogboeken controleren om het uitzonderingsbericht gedetailleerd te bekijken en de uitzondering op te lossen.

FOUT: UserScriptImportError

De reden waarom u deze fout kunt tegenkomen bij het maken/bijwerken van de online-implementaties van Kubernetes, is omdat het score.py bestand dat u hebt geüpload, niet-beschikbare pakketten heeft geïmporteerd.

U kunt de implementatielogboeken controleren om het uitzonderingsbericht gedetailleerd te bekijken en de uitzondering op te lossen.

FOUT: UserScriptFunctionNotFound

De reden waarom u deze fout kunt tegenkomen bij het maken/bijwerken van de kubernetes online-implementaties, is omdat het score.py bestand dat u hebt geüpload geen functie heeft met de naam init() of run(). U kunt uw code controleren en de functie toevoegen.

FOUT: EndpointNotFound

De reden waarom u deze fout kunt tegenkomen bij het maken/bijwerken van Kubernetes Online-implementaties, is omdat het systeem de eindpuntresource voor de implementatie in het cluster niet kan vinden. Maak de implementatie in een bestaand eindpunt of maak eerst dit eindpunt in uw cluster.

FOUT: EndpointAlreadyExists

De reden waarom u deze fout kunt tegenkomen bij het maken van een Online Kubernetes-eindpunt, is omdat het makende eindpunt al bestaat in uw cluster.

De eindpuntnaam moet uniek zijn per werkruimte en per cluster, dus in dit geval moet u een eindpunt maken met een andere naam.

FOUT: ScoringFeUnhealthy

De reden waarom u deze fout kunt tegenkomen bij het maken/bijwerken van een online-eindpunt/implementatie van Kubernetes, is omdat de Azureml-fe die de systeemservice is die in het cluster wordt uitgevoerd, niet is gevonden of beschadigd.

Als u problemen ondervindt bij het oplossen van dit probleem, kunt u de Azure Machine Learning-extensie opnieuw installeren of bijwerken in uw cluster.

FOUT: ValidateScoringFailed

De reden waarom u deze fout kunt tegenkomen bij het maken/bijwerken van Kubernetes Online-implementaties, is omdat de validatie van de scoreaanvraag-URL is mislukt bij het verwerken van het implementeren van het model.

In dit geval kunt u eerst de eindpunt-URL controleren en vervolgens proberen de implementatie opnieuw te implementeren.

FOUT: InvalidDeploymentSpec

De reden waarom u deze fout kunt tegenkomen bij het maken/bijwerken van Online-implementaties van Kubernetes, is omdat de implementatiespecificatie ongeldig is.

In dit geval kunt u het foutbericht controleren.

  • Controleer of de instance count waarde geldig is.
  • Als u automatisch schalen hebt ingeschakeld, moet u ervoor zorgen dat de minimum instance count en maximum instance count beide geldig zijn.

FOUT: PodUnschedulable

De volgende lijst is van redenen waarom u deze fout kunt tegenkomen bij het maken/bijwerken van de Kubernetes online-eindpunten/implementaties:

  • Kan pods niet plannen op knooppunten vanwege onvoldoende resources in uw cluster.
  • Geen knooppuntaffiniteit/selector voor knooppuntovereenkomst.

U kunt deze fout verhelpen door de volgende stappen uit te voeren:

  • Controleer de node selector definitie van de instance type gebruikte clusterknooppunten en node label configuratie.
  • Controleer instance type en de SKU-grootte van het knooppunt voor een AKS-cluster of de knooppuntresource voor het Arc-Kubernetes-cluster.
    • Als het cluster te weinig resources bevat, kunt u de resourcevereiste van het exemplaartype verminderen of een ander exemplaartype gebruiken met een kleinere vereiste resource.
  • Als het cluster geen resource meer heeft om te voldoen aan de vereiste van de implementatie, verwijdert u een implementatie om resources vrij te geven.

FOUT: PodOutOfMemory

De reden waarom u deze fout kunt tegenkomen wanneer u online-implementatie maakt/bijwerkt, is de geheugenlimiet die u voor de implementatie opgeeft, onvoldoende. U kunt de geheugenlimiet instellen op een grotere waarde of een groter exemplaartype gebruiken om deze fout te beperken.

FOUT: InferencingClientCallFailed

De reden waarom u deze fout kunt tegenkomen bij het maken/bijwerken van Kubernetes online-eindpunten/implementaties, is omdat de k8s-extensie van het Kubernetes-cluster niet kan worden verbonden.

In dit geval kunt u de rekenkracht loskoppelen en vervolgens opnieuw koppelen .

Notitie

Als u fouten wilt oplossen door opnieuw te koppelen, moet u ervoor zorgen dat u opnieuw verbinding kunt maken met dezelfde configuratie als eerder losgekoppelde berekeningen, zoals dezelfde rekennaam en naamruimte, anders kunnen er andere fouten optreden.

Als het nog steeds niet werkt, kunt u de beheerder vragen wie toegang heeft tot het cluster om te kubectl get po -n azureml controleren of de relayserverpods worden uitgevoerd.

Problemen met automatisch schalen

Zie Problemen met automatische schaalaanpassing van Azure oplossen als u problemen ondervindt met automatisch schalen.

Voor het online-eindpunt van Kubernetes is er een Azure Machine Learning-deductierouter die een front-endonderdeel is voor het afhandelen van automatische schaalaanpassing voor alle modelimplementaties in het Kubernetes-cluster, vindt u meer informatie in Automatisch schalen van Kubernetes-deductieroutering

Veelvoorkomende fouten bij modelverbruik

De volgende lijst bevat veelvoorkomende fouten met modelverbruik als gevolg van de status van de eindpuntbewerking invoke .

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. De bandbreedtevertraging bewaken:

  • Gebruik metrische gegevens 'Netwerkbytes' om inzicht te hebben in het huidige bandbreedtegebruik. Zie Beheerde online-eindpunten bewaken voor meer informatie.
  • Er worden twee antwoordtrailers geretourneerd als de bandbreedtelimiet is afgedwongen:
    • ms-azureml-bandwidth-request-delay-ms: vertragingstijd in milliseconden die nodig was voor de overdracht van de aanvraagstroom.
    • ms-azureml-bandwidth-response-delay-ms: vertragingstijd in milliseconden die nodig was voor de overdracht van de antwoordstroom.

HTTP-statuscode

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

Veelvoorkomende foutcodes voor beheerde online-eindpunten

De volgende tabel bevat veelvoorkomende foutcodes bij het gebruik van beheerde online-eindpunten met REST-aanvragen:

Statuscode Redenzin Waarom deze code mogelijk wordt geretourneerd
200 OK Uw model is uitgevoerd binnen de latentiegrens.
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 het concept eindpuntverificatie en verificatie voor 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 overwegen de testinstellingen aan te passen zodat de levensduur of gereedheid van de container langer kan worden getest.
429 Te veel aanvragen in behandeling Uw model krijgt momenteel meer aanvragen dan het kan verwerken. Azure Machine Learning heeft een systeem geïmplementeerd waarmee op elk moment een maximum aan 2 * max_concurrent_requests_per_instance * instance_count requests parallel kan worden verwerkt om een soepele werking te garanderen. Andere aanvragen die dit maximum overschrijden, worden geweigerd. U kunt de configuratie van uw modelimplementatie controleren onder de secties request_settings en scale_settings om deze instellingen te controleren en aan te passen. Daarnaast is het belangrijk om, zoals beschreven in de YAML-definitie voor Aanvraag Instellingen, ervoor te zorgen dat de omgevingsvariabele WORKER_COUNT correct wordt doorgegeven.

Als u automatische schaalaanpassing gebruikt en deze fout krijgt, betekent dit dat uw model sneller aanvragen ontvangt dan het systeem omhoog kan schalen. In deze situatie kunt u overwegen aanvragen opnieuw te verzenden met een exponentiële uitstel om het systeem de tijd te geven die nodig is om aan te passen. U kunt ook het aantal exemplaren verhogen met behulp van code om het aantal exemplaren te berekenen. Deze stappen, gecombineerd met het instellen van automatische schaalaanpassing, helpen 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 van 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 bij het gebruik van Kubernetes-online-eindpunten met REST-aanvragen:

Statuscode Redenzin Waarom deze code mogelijk wordt geretourneerd
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 en er een nieuwe verwijderbewerking wordt geactiveerd, treedt er een fout op.
502 Er is een uitzondering opgetreden of vastgelopen in de run() methode van het score.py-bestand Als er een fout optreedt, score.pybijvoorbeeld een geïmporteerd pakket bestaat niet in de conda-omgeving, een syntaxisfout of een fout in de init() methode. U kunt hier volgen om fouten in het bestand op te sporen.
503 Grote pieken in aanvragen per seconde ontvangen 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 een HTTP-statuscode 503. Hoewel de automatische schaalaanpassing snel reageert, duurt het een aanzienlijke hoeveelheid tijd om meer containers te maken. U kunt hier volgen om 503-statuscodes te voorkomen.
504 Er is een time-out opgetreden voor de 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 de score.py te wijzigen om onnodige aanroepen te verwijderen. Als deze acties het probleem niet verhelpen, kunt u hier volgen om fouten op te sporen in het bestand score.py. De code heeft mogelijk een niet-responsieve status of een oneindige lus.
500 Interne serverfout De ingerichte infrastructuur van Azure Machine Learning mislukt.

503-statuscodes voorkomen

Kubernetes online-implementaties bieden ondersteuning voor automatisch schalen, waardoor replica's kunnen worden toegevoegd ter ondersteuning van extra belasting. Meer informatie vindt u in de azure Machine Learning-deductierouter. Beslissingen voor omhoog/omlaag schalen zijn gebaseerd op het gebruik van de huidige containerreplica's.

Er zijn twee dingen die kunnen helpen bij het voorkomen van 503-statuscodes:

Tip

Deze twee benaderingen kunnen afzonderlijk of in combinatie worden gebruikt.

  • Wijzig het gebruiksniveau waarop automatisch schalen nieuwe replica's maakt. U kunt het gebruiksdoel aanpassen door de autoscale_target_utilization waarde in te stellen op een lagere waarde.

    Belangrijk

    Deze wijziging zorgt er niet voor dat replica's sneller worden gemaakt. In plaats daarvan worden ze gemaakt met een lagere gebruiksdrempel. In plaats van te wachten totdat de service 70% wordt gebruikt, zorgt het wijzigen van de waarde in 30% ervoor dat replica's worden gemaakt wanneer het gebruik van 30% plaatsvindt.

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

  • Het minimum aantal replica's wijzigen. Het verhogen van de minimumreplica's biedt een grotere groep voor het afhandelen van de binnenkomende pieken.

    Als u het aantal exemplaren wilt verhogen, kunt u de vereiste replica's berekenen volgens deze codes.

    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.

Het aantal exemplaren berekenen

Als u het aantal exemplaren wilt verhogen, kunt u de vereiste replica's berekenen met behulp van de volgende code:

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)

Geblokkeerd door CORS-beleid

Online-eindpunten (v2) bieden momenteel 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, ziet u het volgende foutbericht:

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 wordt aangeraden Azure Functions, Azure-toepassing Gateway of een service als een tussentijdse laag te gebruiken om CORS-voorbereidende aanvragen af te handelen.

Veelvoorkomende problemen met netwerkisolatie

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

De Azure Machine Learning-werkruimte kan worden geconfigureerd voor v1_legacy_mode, waardoor v2-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.

Belangrijk

Neem contact op met uw netwerkbeveiligingsteam voordat u v1_legacy_modehet uitschakelt. Het is mogelijk om een reden ingeschakeld door uw netwerkbeveiligingsteam.

Zie Netwerkisolatie met v2 voor meer informatie over het uitschakelenv1_legacy_mode.

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

Gebruik de volgende opdracht om de netwerkregels van de Azure Key Vault 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 het volgende JSON-document:

{
    "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 is uitgeschakeld voor de implementatie. 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 Azure Container Registry 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 het antwoorddocument of het status veld is ingesteld op Approved. Als deze niet is goedgekeurd, gebruikt u de volgende opdracht om deze goed te keuren. Vervang <private-endpoint-name> door de naam die is geretourneerd door de vorige 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:

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

    Het antwoord bevat een adres. Dit adres moet zich in het bereik bevinden dat is opgegeven door het virtuele netwerk

    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 een HTTP-eindpunt is, wordt het IP-adres opgenomen in de eindpunt-URI die u rechtstreeks in de gebruikersinterface van Studio kunt ophalen. Meer manieren om het IP-adres van het eindpunt op te halen, vindt u in het online-eindpunt van Secure Kubernetes.

  3. Als de hostnaam niet wordt omgezet door de nslookup opdracht:

    Voor beheerd online-eindpunt,

    1. Controleer of er een A-record bestaat in de privé-DNS-zone voor het virtuele netwerk.

      Gebruik de volgende opdracht om de records te controleren:

      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 wordt geretourneerd, 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 is ingesteld met behulp van een aangepaste DNS How to use your workspace with a custom DNS server, gebruikt u de volgende opdracht om te controleren of de resolutie correct werkt vanuit aangepaste DNS.

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

    Voor kubernetes online-eindpunt,

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

    2. Daarnaast kunt u controleren of de azureml-fe werkt zoals verwacht, gebruikt u 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

      curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
      "Swagger not found"
      

    Als curl HTTPs mislukt (bijvoorbeeld time-out) maar HTTP werkt, controleert u of het certificaat geldig is.

    Als dit niet kan worden omgezet naar een 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
    

    Als dit lukt, kunt u problemen met voorwaardelijke doorstuurserver voor privékoppeling in aangepaste DNS oplossen.

Online-implementaties kunnen niet worden beoordeeld

  1. Gebruik de volgende opdracht om te zien of de implementatie is geïmplementeerd:

    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 <endpointname> door de naam van uw eindpunt:

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

    Tip

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

    Het antwoord van deze opdracht moet het percentage verkeer vermelden dat is toegewezen aan implementaties.

  3. Als de verkeerstoewijzingen (of implementatieheader) correct 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> 
    

    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 oplossen

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

Basisstappen

De basisstappen voor het oplossen van problemen zijn:

  1. Verzamel versiegegevens voor uw Python-omgeving.
  2. Zorg ervoor dat de python-pakketversie azureml-inference-server-http die is opgegeven in het omgevingsbestand overeenkomt met de Http-serverversie van AzureML die wordt weergegeven in het opstartlogboek. Soms leidt de afhankelijkheidsoplossing van PIP tot onverwachte versies van geïnstalleerde pakketten.
  3. Als u Flask (en of de bijbehorende afhankelijkheden) opgeeft in uw omgeving, verwijdert u deze. De afhankelijkheden zijn onder andere Flask, Jinja2, itsdangerous, Werkzeug, MarkupSafeen click. Flask wordt vermeld als een afhankelijkheid in het serverpakket en het is raadzaam om de server te laten installeren. Op deze manier krijgt u deze automatisch wanneer de server nieuwe versies van Flask ondersteunt.

Serverversie

Het serverpakket azureml-inference-server-http wordt gepubliceerd naar PyPI. U vindt ons wijzigingenlogboek en alle vorige versies op onze PyPI-pagina. Werk bij naar de nieuwste versie als u een eerdere versie gebruikt.

  • 0.4.x: De versie die is gebundeld in trainingsafbeeldingen ≤ 20220601 en in azureml-defaults>=1.34,<=1.43. 0.4.13 is de laatste stabiele versie. Als u de server vóór de versie 0.4.11gebruikt, ziet u mogelijk problemen met Flask-afhankelijkheid, zoals kan de naam Markup niet worden geïmporteerd.jinja2 U wordt aangeraden indien mogelijk een upgrade uit te voeren naar 0.4.13 of 0.8.x (de nieuwste versie).
  • 0.6.x: De versie die vooraf is geïnstalleerd in deductieinstallatiekopieën ≤ 20220516. De nieuwste stabiele versie is 0.6.1.
  • 0.7.x: De eerste versie die Flask 2 ondersteunt. De nieuwste stabiele versie is 0.7.7.
  • 0.8.x: de logboekindeling is gewijzigd en de ondersteuning voor Python 3.6 is verwijderd.

Pakketafhankelijkheden

De meest relevante pakketten voor de server azureml-inference-server-http zijn de volgende pakketten:

  • Kolf
  • opencensus-ext-azure
  • deductieschema

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

Tip

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

Veelgestelde vragen

1. Ik heb de volgende fout aangetroffen 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

U hebt Flask 2 geïnstalleerd in uw Python-omgeving, maar er wordt een versie uitgevoerd azureml-inference-server-http die geen ondersteuning biedt voor Flask 2. Ondersteuning voor Flask 2 wordt toegevoegd azureml-inference-server-http>=0.7.0, ook in azureml-defaults>=1.44.

  • Als u dit pakket niet gebruikt in een AzureML Docker-installatiekopieën, gebruikt u de nieuwste versie van azureml-inference-server-http of azureml-defaults.

  • Als u dit pakket gebruikt met een AzureML Docker-installatiekopie, moet u ervoor zorgen dat u een ingebouwde installatiekopie gebruikt of na juli 2022. De versie van de installatiekopieën is beschikbaar in de containerlogboeken. U moet een logboek kunnen vinden dat er ongeveer als volgt uitziet:

    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, Materializaton 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 weergegeven na 'Materialization Build', in het bovenstaande voorbeeld, 20220708of 8 juli 2022. Deze installatiekopieën zijn compatibel met Flask 2. Als u geen banner ziet zoals deze in het containerlogboek, is uw installatiekopieën verouderd en moet deze worden bijgewerkt. Als u een CUDA-installatiekopie gebruikt en een nieuwere installatiekopie niet kunt vinden, controleert u of uw installatiekopie is afgeschaft in AzureML-Containers. Als dat het geval is, moet u vervangingen kunnen vinden.

  • Als u de server met een online-eindpunt gebruikt, kunt u de logboeken ook vinden onder Implementatielogboeken op de pagina onlineeindpunt in Azure Machine Learning-studio. Als u implementeert met SDK v1 en geen installatiekopieën expliciet opgeeft in uw implementatieconfiguratie, wordt standaard een versie van openmpi4.1.0-ubuntu20.04 die versie gebruikt die overeenkomt met uw lokale SDK-toolset. Dit is mogelijk niet de meest recente versie van de installatiekopieën. SDK 1.43 wordt bijvoorbeeld standaard gebruikt openmpi4.1.0-ubuntu20.04:20220616, wat niet compatibel is. Zorg ervoor dat u de nieuwste SDK voor uw implementatie gebruikt.

  • Als u om een of andere reden de installatiekopieën niet kunt bijwerken, kunt u het probleem tijdelijk voorkomen door vast te maken azureml-defaults==1.43 of azureml-inference-server-http~=0.4.13, waarmee de oudere versieserver wordt geïnstalleerd.Flask 1.0.x

2. Ik heb een ImportError of ModuleNotFoundError meer modulesopencensus, jinja2of MarkupSafeclick tijdens het opstarten aangetroffen, zoals in het volgende bericht:

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

Oudere versies (<= 0.4.10) van de server hebben de afhankelijkheid van Flask niet vastgemaakt aan compatibele versies. Dit probleem is opgelost in de nieuwste versie van de server.

Volgende stappen