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

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:

  1. Skapa och koppla Kubernetes-klustret som ett beräkningsmål till din Azure Machine Learning med hjälp av Azure Machine Learning studio.
  2. 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 target namnet 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

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

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:

  1. Öppna filen online/model-1/onlinescoring/score.py.

  2. Ändra den sista raden i init() funktionen: Efter logging.info("Init complete") lägger du till logging.info("Updated successfully") .

  3. Spara filen.

  4. Kör följande kommando:

    az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
    

    Anteckning

    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 --set flaggan .

  5. Eftersom du ändrade init() funktionen ( körs när init() slutpunkten skapas eller uppdateras) finns Updated successfully meddelandet 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:

  1. Gå till resursgruppen.
  2. Välj din slutpunkt.
  3. Välj ARM-resurssidan.
  4. Välj Diagnostikinställningar.
  5. Välj Lägg till inställningar.
  6. 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:

  1. Öppna Log Analytics-arbetsytan.
  2. I den vänstra menyn väljer du Loggar.
  3. Stäng dialogrutan Frågor som öppnas automatiskt.
  4. Dubbelklicka på AmlOnlineEndpointConsoleLog.
  5. 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: