Distribuera och poängsätta en maskininlärningsmodell med hjälp av en onlineslutpunkt (förhandsversion)
Lär dig hur du använder en onlineslutpunkt (förhandsversion) för att distribuera din modell, så att du inte behöver skapa och hantera den underliggande infrastrukturen. Du börjar med att distribuera en modell på den lokala datorn för att felsöka eventuella fel och sedan distribuerar och testar du den i Azure.
Du får också lära dig hur du visar loggarna och övervakar serviceavtalet (SLA). Du börjar med en modell och får en skalbar HTTPS/REST-slutpunkt som du kan använda för onlinebedömning och realtidsbedömning.
Hanterade onlineslutpunkter hjälper dig att distribuera ML modeller på ett nyckelfärdigt sätt. Hanterade onlineslutpunkter fungerar med kraftfulla CPU- och GPU-datorer i Azure på ett skalbart och fullständigt hanterat sätt. Hanterade onlineslutpunkter tar hand om betjänande, skalning, skydd och övervakning av dina modeller, vilket frigör dig från arbetet med att konfigurera och hantera den underliggande infrastrukturen. Huvudexempel i det här dokumentet använder hanterade onlineslutpunkter för distribution. Om du vill använda Kubernetes i stället kan du se anteckningarna i det här dokumentet som är infogade med den hanterade onlineslutpunkten. Mer information finns i Vad är Azure Machine Learning slutpunkter (förhandsversion)?.
Viktigt
Den här funktionen är för närvarande i allmänt tillgänglig förhandsversion. Den här förhandsversionen tillhandahålls utan serviceavtal och rekommenderas inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.
Förutsättningar
Om du Azure Machine Learning måste du ha en Azure-prenumeration. Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar. Prova den kostnadsfria eller betalda versionen av Azure Machine Learning.
Installera och konfigurera Azure CLI och
mltillägget till Azure CLI. Mer information finns i Installera, konfigurera och använda CLI (v2) (förhandsversion).Du måste ha en Azure-resursgrupp och du (eller tjänstens huvudnamn som du använder) måste ha deltagaråtkomst till den. En resursgrupp skapas i Installera, konfigurera och använda CLI (v2) (förhandsversion).
Du måste ha en Azure Machine Learning arbetsyta. En arbetsyta skapas i Installera, konfigurera och använda CLI (v2) (förhandsversion).
Spara standardinställningarna om du inte redan har angett standardinställningarna för Azure CLI. Kör den här koden för att undvika att skicka värdena för din prenumeration, arbetsyta och resursgrupp flera gånger:
az account set --subscription <subscription ID> az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>(Valfritt) Om du vill distribuera lokalt måste du installera Docker Engine på den lokala datorn. Vi rekommenderar starkt det här alternativet, så det är enklare att felsöka problem.
Viktigt
Exemplen i det här dokumentet förutsätter att du använder Bash-gränssnittet. Till exempel från ett Linux-system eller Windows-undersystem för Linux.
Förbereda systemet
Om du vill följa med i den här artikeln klonar du först lagringsplatsen samples (azureml-examples). Kör sedan följande kod för att gå till exempelkatalogen:
git clone https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli
Ange namnet på slutpunkten genom att välja något av följande kommandon, beroende på ditt operativsystem (ersätt YOUR_ENDPOINT_NAME med ett unikt namn).
För Unix kör du det här kommandot:
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
Anteckning
Vi har nyligen ändrat CLI-gränssnittet: tidigare hade vi både endpoint och under , nu har vi deployment az ml endpoint separerat dem i och az ml online-endpoint az ml online-deployment . Detta gör det enklare att använda slutpunkter i CI/CD-skript.
Anteckning
Slutpunktsnamn måste vara unika inom en Azure-region. I Azure-regionen westus2 kan det till exempel bara finnas en slutpunkt med namnet my-endpoint .
Granska slutpunkts- och distributionskonfigurationerna
Följande kodfragment visar filen endpoints/online/managed/sample/endpoint.yml:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key
Anteckning
En fullständig beskrivning av YAML finns i YAML-referensen för hanterade onlineslutpunkter (förhandsversion).
Referensen för YAML-formatet för slutpunkten beskrivs i följande tabell. Information om hur du anger dessa attribut finns i YAML-exemplet i Förbereda ditt system eller YAML-referensen för onlineslutpunkten. Information om begränsningar relaterade till hanterade slutpunkter finns i Hantera och öka kvoter för resurser med Azure Machine Learning.
| Nyckel | Beskrivning |
|---|---|
$schema |
(Valfritt) YAML-schemat. Om du vill se alla tillgängliga alternativ i YAML-filen kan du visa schemat i föregående exempel i en webbläsare. |
name |
Namnet på slutpunkten. Det måste vara unikt i Azure-regionen. |
traffic |
Procentandelen trafik från slutpunkten som ska omdirigeras till varje distribution. Summan av trafikvärdena måste vara 100. |
auth_mode |
Används key för nyckelbaserad autentisering. Används aml_token för Azure Machine Learning tokenbaserad autentisering. key upphör inte att gälla, men aml_token upphör att gälla. (Hämta den senaste token med hjälp av az ml online-endpoint get-credentials kommandot .) |
Exemplet innehåller alla filer som behövs för att distribuera en modell på en onlineslutpunkt. Om du vill distribuera en modell måste du ha:
- Modellfiler (eller namn och version för en modell som redan är registrerad på din arbetsyta). I exemplet har vi en scikit-learn-modell som gör regression.
- Den kod som krävs för att poängdöma modellen. I det här fallet har vi score.py fil.
- En miljö där din modell körs. Som du ser kan miljön vara en Docker-avbildning med Conda-beroenden eller en Dockerfile.
- Inställningar för att ange instanstyp och skalningskapacitet.
Följande kodfragment visar filen endpoints/online/managed/sample/blue-deployment.yml med alla nödvändiga indata:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
local_path: ../../model-1/model/sklearn_regression_model.pkl
code_configuration:
code:
local_path: ../../model-1/onlinescoring/
scoring_script: score.py
environment:
conda_file: ../../model-1/environment/conda.yml
image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1
instance_type: Standard_F2s_v2
instance_count: 1
I tabellen beskrivs attributen för en deployment :
| Nyckel | Beskrivning |
|---|---|
name |
Namnet på distributionen. |
model |
I det här exemplet anger vi modellegenskaperna infogade: local_path . Modellfiler laddas automatiskt upp och registreras med ett automatiskt genererat namn. Relaterade metodtips finns i tipset i nästa avsnitt. |
code_configuration.code.local_path |
Katalogen som innehåller all Python-källkod för bedömning av modellen. Du kan använda kapslade kataloger och paket. |
code_configuration.scoring_script |
Python-filen som finns i code_configuration.code.local_path bedömningskatalogen. Den här Python-koden måste ha init() en funktion och en run() funktion. Funktionen anropas när modellen har skapats eller uppdaterats (du kan till exempel använda den för init() att cachelagra modellen i minnet). Funktionen run() anropas vid varje anrop av slutpunkten för att göra den faktiska poängen och förutsägelsen. |
environment |
Innehåller information om miljön som ska vara värd för modellen och koden. I det här exemplet har vi infogade definitioner som innehåller path . Vi använder för environment.docker.image avbildningen. Beroendena conda_file installeras ovanpå avbildningen. Mer information finns i tipset i nästa avsnitt. |
instance_type |
Vm-SKU:n som ska vara värd för dina distributionsinstanser. Mer information finns i Hanterade onlineslutpunkter som stöds VM-SKU:er. |
instance_count |
Antalet instanser i distributionen. Basera värdet på den arbetsbelastning som du förväntar dig. För hög tillgänglighet rekommenderar vi att du anger instance_count till minst 3 . |
Mer information om YAML-schemat finns i YAML-referensen för onlineslutpunkter.
Anteckning
Så här använder du Kubernetes i stället för hanterade slutpunkter som beräkningsmål:
- Skapa och koppla Kubernetes-klustret som ett beräkningsmål till din Azure Machine Learning med hjälp av Azure Machine Learning studio.
- Använd slutpunkten YAML för att rikta in dig på Kubernetes i stället för den hanterade slutpunkten YAML. Du måste redigera YAML för att ändra värdet för till
targetnamnet på det registrerade beräkningsmålet. Du kan använda den här deployment.yaml som har ytterligare egenskaper som gäller för Kubernetes-distribution.
Alla kommandon som används i den här artikeln (förutom den valfria SLA-övervakningen och Azure Log Analytics-integreringen) kan användas antingen med hanterade slutpunkter eller med Kubernetes-slutpunkter.
Registrera din modell och miljö separat
I det här exemplet anger vi local_path den infogade filen (varifrån filer ska laddas upp). CLI laddar automatiskt upp filerna och registrerar modellen och miljön. Som bästa praxis för produktion bör du registrera modellen och miljön och ange det registrerade namnet och versionen separat i YAML. Använd formuläret model: azureml:my-model:1 eller environment: azureml:my-env:1 .
För registrering kan du extrahera YAML-definitionerna av model och environment i separata YAML-filer och använda kommandona az ml model create och az ml environment create . Om du vill veta mer om dessa kommandon kör az ml model create -h du och az ml environment create -h .
Använda olika typer av CPU- och GPU-instanser
Föregående YAML använder en generell typ ( ) och en Docker-avbildning som inte Standard_F2s_v2 är GPU (se attributet i image YAML). För GPU-beräkning väljer du en GPU-beräkningstypSKU och en GPU Docker-avbildning.
Information om de allmänna och GPU-instanstyper som stöds finns i Hanterade onlineslutpunkter som stöds VM-SKU:er. En lista över basavbildningar Azure Machine Learning GPU och CPU finns i Azure Machine Learning basavbildningar.
Använda mer än en modell
För närvarande kan du bara ange en modell per distribution i YAML. Om du har fler än en modell kopierar du alla modeller som filer eller underkataloger till en mapp som du använder för registrering när du registrerar modellen. I ditt bedömningsskript använder du miljövariabeln AZUREML_MODEL_DIR för att hämta sökvägen till modellens rotmapp. Den underliggande katalogstrukturen bevaras.
Förstå bedömningsskriptet
Tips
Formatet för bedömningsskriptet för onlineslutpunkter är samma format som används i föregående version av CLI och i Python SDK.
Som tidigare nämnts code_configuration.scoring_script måste ha en funktion och en init() run() funktion. I det här exemplet används score.py filen. Funktionen init() anropas när containern initieras eller startas. Initieringen sker vanligtvis strax efter att distributionen har skapats eller uppdaterats. Skriv logik här för globala initieringsåtgärder som att cachelagra modellen i minnet (som vi gör i det här exemplet). Funktionen run() anropas för varje anrop av slutpunkten och bör göra den faktiska bedömnings- och förutsägelsen. I exemplet extraherar vi data från JSON-indata, anropar scikit-learn-modellens predict() -metod och returnerar sedan resultatet.
Distribuera och felsöka lokalt med hjälp av lokala slutpunkter
För att spara tidsfelsökning rekommenderar vi starkt att du testar slutpunkten lokalt. Mer information finns i Felsöka hanterade onlineslutpunkter lokalt i Visual Studio Code.
Anteckning
- Om du vill distribuera lokalt måste Docker Engine vara installerat.
- Docker Engine måste köras. Docker-motorn startar vanligtvis när datorn startas. Om den inte gör det kan du felsöka Docker Engine.
Viktigt
Målet med en lokal slutpunktsdistribution är att verifiera och felsöka din kod och konfiguration innan du distribuerar till Azure. Lokal distribution har följande begränsningar:
- Lokala slutpunkter stöder inte trafikregler, autentisering eller avsökningsinställningar.
- Lokala slutpunkter stöder endast en distribution per slutpunkt.
Distribuera modellen lokalt
Skapa först slutpunkten. Om du vill kan du för en lokal slutpunkt hoppa över det här steget och direkt skapa distributionen (nästa steg), vilket i sin tur skapar nödvändiga metadata. Detta är användbart för utveckling och testning.
az ml online-endpoint create --local -n $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Skapa nu en distribution med namnet blue under slutpunkten.
az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
Flaggan --local dirigerar CLI att distribuera slutpunkten i Docker-miljön.
Tips
Använd Visual Studio Code för att testa och felsöka slutpunkterna lokalt. Mer information finns i Felsöka hanterade onlineslutpunkter lokalt i Visual Studio Code.
Kontrollera att den lokala distributionen lyckades
Kontrollera statusen för att se om modellen har distribuerats utan fel:
az ml online-endpoint show -n $ENDPOINT_NAME --local
Utdata bör se ut ungefär som följande JSON. Observera att provisioning_state är Succeeded .
{
"auth_mode": "key",
"location": "local",
"name": "docs-endpoint",
"properties": {},
"provisioning_state": "Succeeded",
"scoring_uri": "http://localhost:49158/score",
"tags": {},
"traffic": {}
}
Anropa den lokala slutpunkten för att poängdöma data med hjälp av din modell
Anropa slutpunkten för att poängdöma modellen med hjälp av bekvämlighetskommandot och invoke skicka frågeparametrar som lagras i en JSON-fil:
az ml online-endpoint invoke --local --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
Om du vill använda en REST-klient (t.ex. curl) måste du ha bedömnings-URI:n. Hämta bedömnings-URI:en genom att köra az ml online-endpoint show --local -n $ENDPOINT_NAME . Leta reda på attributet i returnerade scoring_uri data. Exempel på curl-baserade kommandon är tillgängliga senare i det här dokumentet.
Granska loggarna för utdata från invoke-åtgärden
I exemplet score.py loggar metoden run() vissa utdata till konsolen. Du kan visa dessa utdata med hjälp av get-logs kommandot igen:
az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME
Distribuera din hanterade onlineslutpunkt till Azure
Distribuera sedan din hanterade onlineslutpunkt till Azure.
Distribuera till Azure
Kör följande kod för att skapa slutpunkten i molnet:
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Kör följande kod för blue att skapa distributionen med namnet under slutpunkten:
az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
Den här distributionen kan ta upp till 15 minuter, beroende på om den underliggande miljön eller avbildningen byggs för första gången. Efterföljande distributioner som använder samma miljö slutför bearbetningen snabbare.
Viktigt
Flaggan --all-traffic i ovan allokerar 100 % av trafiken till az ml online-deployment create slutpunkten till den nyligen skapade distributionen. Även om det här är användbart i utvecklings- och testsyfte kanske du vill öppna trafik till den nya distributionen med ett explicit kommando för produktion. Till exempel az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100"
Tips
Om du föredrar att inte blockera CLI-konsolen kan du lägga till
--no-waitflaggan i kommandot . Detta stoppar dock den interaktiva visningen av distributionsstatusen.Använd Felsökning av distribution av hanterade slutpunkter online (förhandsversion) för att felsöka fel.
Kontrollera status för distributionen
Kommandot show innehåller information i för slutpunkt och provisioning_status distribution:
az ml online-endpoint show -n $ENDPOINT_NAME
Du kan visa en lista över alla slutpunkter i arbetsytan i tabellformat med hjälp av list kommandot :
az ml online-endpoint list --output table
Kontrollera statusen för molndistributionen
Kontrollera loggarna för att se om modellen har distribuerats utan fel:
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
Som standard hämtas loggar från inference-server. Om du vill se loggarna från storage-initializer (den monterar tillgångar som modell och kod i containern) lägger du till --container storage-initializer flaggan .
Anropa slutpunkten för att poängdöma data med hjälp av din modell
Du kan använda kommandot invoke eller valfri REST-klient för att anropa slutpunkten och poänggöra vissa data:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
I följande exempel visas hur du hämtar nyckeln som används för att autentisera till slutpunkten:
ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)
Använd sedan curl för att poänggöra data.
SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)
curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data @endpoints/online/model-1/sample-request.json
Observera att vi använder show get-credentials kommandona och för att hämta autentiseringsuppgifterna. Observera också att vi använder flaggan för --query att filtrera attribut till endast det vi behöver. Mer information om finns i --query Fråga Azure CLI-kommandoutdata.
Om du vill se anropsloggarna kör du get-logs igen.
(Valfritt) Uppdatera distributionen
Om du vill uppdatera koden, modellen eller miljön uppdaterar du YAML-filen och kör sedan az ml online-endpoint update kommandot .
Anteckning
Om du uppdaterar instansantalet och tillsammans med andra modellinställningar (kod, modell eller miljö) i ett enda kommando: först utförs skalningsåtgärden och sedan tillämpas update de andra uppdateringarna. I produktionsmiljö är en bra idé att utföra dessa åtgärder separat.
Förstå hur update fungerar:
Öppna filen online/model-1/onlinescoring/score.py.
Ändra den sista raden i
init()funktionen: Efterlogging.info("Init complete")lägger du tilllogging.info("Updated successfully").Spara filen.
Kör följande kommando:
az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.ymlAnteckning
Det är deklarativt att uppdatera med hjälp av YAML. Det innebär att ändringar i YAML återspeglas i de underliggande Azure Resource Manager (slutpunkter och distributioner). En deklarativ metod underlättar GitOps: Alla ändringar av slutpunkter och distributioner (även
instance_count) går igenom YAML. Du kan göra uppdateringar utan att använda YAML med hjälp av--setflaggan .Eftersom du ändrade
init()funktionen ( körs närinit()slutpunkten skapas eller uppdateras) finnsUpdated successfullymeddelandet i loggarna. Hämta loggarna genom att köra:az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
Kommandot update fungerar även med lokala distributioner. Använd samma az ml online-deployment update kommando med flaggan --local .
Tips
Med kommandot kan du använda parametern i Azure CLI för att åsidosätta attribut i din YAML eller ange specifika attribut utan att skicka update --set YAML-filen. Användning --set av för enskilda attribut är särskilt användbart i utvecklings- och testscenarier. Om du till exempel vill skala instance_count upp värdet för den första distributionen kan du använda flaggan --set instance_count=2 . Men eftersom YAML inte uppdateras underlättar inte den här tekniken GitOps.
Anteckning
Ovanstående är ett exempel på löpande uppdatering på plats: det vill säga att samma distribution uppdateras med den nya konfigurationen, med 20 % noder i taget. Om distributionen har 10 noder uppdateras två noder i taget. För produktionsanvändning kanske du vill överväga blå-grön distribution,vilket är ett säkrare alternativ.
(Valfritt) Konfigurera autoskalning
Autoskalning kör automatiskt rätt mängd resurser för att hantera belastningen på ditt program. Hanterade onlineslutpunkter stöder automatisk skalning via integrering med funktionen för automatisk skalning i Azure Monitor. Information om hur du konfigurerar autoskalning finns i How to autoscale online endpoints.
(Valfritt) Övervaka serviceavtal med hjälp av Azure Monitor
Om du vill visa mått och ställa in aviseringar baserat på ditt serviceavtal slutför du stegen som beskrivs i Övervaka hanterade onlineslutpunkter.
(Valfritt) Integrera med Log Analytics
Kommandot get-logs innehåller bara de senaste hundra raderna med loggar från en automatiskt vald instans. Log Analytics är dock ett sätt att lagra och analysera loggar på ett durably sätt.
Skapa först en Log Analytics-arbetsyta genom att slutföra stegen i Skapa en Log Analytics-arbetsyta i Azure Portal.
I följande Azure Portal:
- Gå till resursgruppen.
- Välj din slutpunkt.
- Välj ARM-resurssidan.
- Välj Diagnostikinställningar.
- Välj Lägg till inställningar.
- Välj att aktivera sändning av konsolloggar till Log Analytics-arbetsytan.
Det kan ta upp till en timme att ansluta loggarna. Skicka några bedömningsbegäranden efter en timme och kontrollera sedan loggarna med hjälp av följande steg:
- Öppna Log Analytics-arbetsytan.
- I den vänstra menyn väljer du Loggar.
- Stäng dialogrutan Frågor som öppnas automatiskt.
- Dubbelklicka på AmlOnlineEndpointConsoleLog.
- Välj Kör.
Ta bort slutpunkten och distributionen
Om du inte ska använda distributionen bör du ta bort den genom att köra följande kod (den tar bort slutpunkten och alla underliggande distributioner):
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
Nästa steg
Läs dessa artiklar om du vill veta mer:
- Distribuera modeller med REST (förhandsversion)
- Skapa och använda hanterade onlineslutpunkter (förhandsversion) i Studio
- Valv för onlineslutpunkter (förhandsversion)
- Så här autoskalar du hanterade onlineslutpunkter
- Använda batchslutpunkter (förhandsversion) för batchbedömning
- Visa kostnader för en Azure Machine Learning onlineslutpunkt (förhandsversion)
- Få åtkomst till Azure-resurser med en hanterad onlineslutpunkt och hanterad identitet (förhandsversion)
- Felsöka distribution av hanterade onlineslutpunkter