Distribuera och poängsätta en maskininlärningsmodell med hjälp av en onlineslutpunkt

GÄLLER FÖR:Azure CLI ml-tillägg v2 (aktuellt)

Lär dig hur du använder en onlineslutpunkt 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 distribuera och testa 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 dina ML-modeller på ett nyckelfärdigt sätt. Hanterade onlineslutpunkter fungerar med kraftfulla PROCESSOR- och GPU-datorer i Azure på ett skalbart och fullständigt hanterat sätt. Hanterade onlineslutpunkter tar hand om servering, skalning, skydd och övervakning av dina modeller, vilket frigör dig från kostnaden för att konfigurera och hantera den underliggande infrastrukturen. Huvudexemplet i det här dokumentet använder hanterade onlineslutpunkter för distribution. Om du vill använda Kubernetes i stället kan du läsa anteckningarna i det här dokumentet i stil med den hanterade onlineslutpunktsdiskussionen. Mer information finns i Vad är Azure Machine Learning-slutpunkter?.

Krav

  • Om du vill använda 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 ml tillägget till Azure CLI. Mer information finns i Installera, konfigurera och använda CLI (v2).

  • 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)..

  • Du måste ha en Azure Machine Learning-arbetsyta. En arbetsyta skapas i Installera, konfigurera och använda CLI (v2)..

  • Om du inte redan har angett standardinställningarna för Azure CLI sparar du standardinställningarna. 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>
    
  • Rollbaserade åtkomstkontroller i Azure (Azure RBAC) används för att bevilja åtkomst till åtgärder i Azure Machine Learning. Om du vill utföra stegen i den här artikeln måste ditt användarkonto tilldelas rollen ägare eller deltagare för Azure Machine Learning-arbetsytan, eller en anpassad roll som tillåter Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Mer information finns i Hantera åtkomst till en Azure Machine Learning-arbetsyta.

  • (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 med exempel (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

Om du vill ange slutpunktsnamnet väljer du något av följande kommandon, beroende på operativsystemet (ersätt YOUR_ENDPOINT_NAME med ett unikt namn).

Kör det här kommandot för Unix:

export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"

Anteckning

Slutpunktsnamn måste vara unika i en Azure-region. I Azure-regionen westus2 kan det till exempel bara finnas en slutpunkt med namnet my-endpoint.

Granska konfigurationerna för slutpunkt och distribution

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-referens för onlineslutpunkt.

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 systemet 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. Den måste vara unik i Azure-regionen.
Namngivningsregler definieras under gränser för hanterade onlineslutpunkter.
auth_mode Används key för nyckelbaserad autentisering. Använd aml_token för tokenbaserad autentisering i Azure Machine Learning. key upphör inte, men aml_token upphör att gälla. (Hämta den senaste token med hjälp az ml online-endpoint get-credentials av 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 namnet och versionen av en modell som redan är registrerad på din arbetsyta). I exemplet har vi en scikit-learn-modell som utför regression.
  • Den kod som krävs för att poängsätta modellen. I det här fallet har vi en 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 så kan det vara 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:
  path: ../../model-1/model/
code_configuration:
  code: ../../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_DS2_v2
instance_count: 1

Tabellen beskriver attributen för en deployment:

Nyckel Beskrivning
name Namnet på distributionen.
model I det här exemplet anger vi modellegenskaperna infogade: path. Modellfiler laddas upp och registreras automatiskt med ett automatiskt genererat namn. Relaterade metodtips finns i tipset i nästa avsnitt.
code_configuration.code.path Katalogen i den lokala utvecklingsmiljön 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 bedömningskatalogen code_configuration.code.path i den lokala utvecklingsmiljön. Den här Python-koden måste ha en init() funktion och en run() funktion. Funktionen init() anropas när modellen har skapats eller uppdaterats (du kan till exempel använda den för att cachelagra modellen i minnet). Funktionen run() anropas vid varje anrop av slutpunkten för att utföra den faktiska bedömningen 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ållerpath . Vi använder environment.docker.image för avbildningen. Beroendena conda_file installeras ovanpå avbildningen. Mer information finns i tipset i nästa avsnitt.
instance_type Den VM-SKU som ska vara värd för dina distributionsinstanser. Mer information finns i Hanterade onlineslutpunkter som stöds av VM-SKU:er.
instance_count Antalet instanser i distributionen. Basera värdet på den arbetsbelastning du förväntar dig. För hög tillgänglighet rekommenderar vi att du anger instance_count minst 3. Vi reserverar ytterligare 20 % för att utföra uppgraderingar. Mer information finns i Hanterad onlineslutpunktskvot.

Under distributionen laddas de lokala filerna, till exempel Python-källan för bedömningsmodellen, upp från utvecklingsmiljön.

Mer information om YAML-schemat finns i YAML-referensen för onlineslutpunkten.

Anteckning

Så här använder du Kubernetes i stället för hanterade slutpunkter som beräkningsmål:

  1. Skapa och koppla ditt Kubernetes-kluster som beräkningsmål till din Azure Machine Learning-arbetsyta med hjälp av Azure Machine Learning-studio.
  2. Använd slutpunktens YAML för att rikta in sig på Kubernetes i stället för yaml för den hanterade slutpunkten. Du måste redigera YAML för att ändra värdet target för till namnet på ditt registrerade beräkningsmål. Du kan använda den här deployment.yaml som har ytterligare egenskaper 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 ( path varifrån filer ska laddas upp) infogas. 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 för model och environment till 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 (Standard_F2s_v2) och en Docker-avbildning som inte är GPU (i YAML, se attributet image ). För GPU-beräkning väljer du en SKU för GPU-beräkningstypen och en GPU Docker-avbildning.

Information om typer av generell användning och GPU-instanser som stöds finns i Hanterade onlineslutpunkter som stöds av VM-SKU:er. En lista över Azure Machine Learning CPU- och GPU-basavbildningar finns i Basavbildningar för Azure Machine Learning.

Anteckning

Information om hur du använder Kubernetes i stället för hanterade slutpunkter som beräkningsmål finns i Introduktion till Kubermentes-beräkningsmål

Använda fler ä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 init() funktion och en 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 poängsättningen 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 testkör slutpunkten lokalt. Mer information finns i Felsöka onlineslutpunkter lokalt i Visual Studio Code.

Anteckning

  • Om du vill distribuera lokalt måste Docker-motorn vara installerad.
  • Docker-motorn måste köras. Docker Engine 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 hoppa över det här steget för en lokal slutpunkt och direkt skapa distributionen (nästa steg), som 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 instruerar CLI att distribuera slutpunkten i Docker-miljön.

Tips

Använd Visual Studio Code för att testa och felsöka dina slutpunkter lokalt. Mer information finns i felsöka onlineslutpunkter lokalt i Visual Studio Code.

Kontrollera att den lokala distributionen har slutförts

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. provisioning_state är Succeeded.

{
  "auth_mode": "key",
  "location": "local",
  "name": "docs-endpoint",
  "properties": {},
  "provisioning_state": "Succeeded",
  "scoring_uri": "http://localhost:49158/score",
  "tags": {},
  "traffic": {}
}

Följande tabell innehåller möjliga värden för provisioning_state:

Stat Beskrivning
Skapar Resursen skapas.
Uppdatera Resursen uppdateras.
Tas bort Resursen tas bort.
Lyckades Åtgärden för att skapa/uppdatera lyckades.
Misslyckades Åtgärden för att skapa/uppdatera/ta bort misslyckades.

Anropa den lokala slutpunkten för att poängsätta data med hjälp av din modell

Anropa slutpunkten för att poängsätta modellen med hjälp av bekvämlighetskommandot invoke och 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. Kör för att hämta bedömnings-URI az ml online-endpoint show --local -n $ENDPOINT_NAME:n. Leta upp scoring_uri attributet i de returnerade data. Curl-baserade exempelkommandon är tillgängliga senare i det här dokumentet.

Granska loggarna för utdata från anropsåtgärden

I exemplet score.py fil run() loggar metoden utdata till konsolen. Du kan visa dessa utdata med hjälp get-logs av kommandot igen:

az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME

Distribuera din onlineslutpunkt till Azure

Distribuera sedan din 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 att skapa distributionen med namnet blue 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 skapas för första gången. Efterföljande distributioner som använder samma miljö slutför bearbetningen snabbare.

Viktigt

Flaggan --all-traffic i ovan az ml online-deployment create allokerar 100 % av trafiken till slutpunkten till den nyligen skapade distributionen. Även om detta är användbart i utvecklings- och testningssyfte kan det vara bra att öppna trafik till den nya distributionen via 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 flaggan --no-wait i kommandot. Detta stoppar dock den interaktiva visningen av distributionsstatusen.

  • Använd Felsökning av distribution av onlineslutpunkter för att felsöka fel.

Kontrollera status för distributionen

Kommandot show innehåller information i provisioning_status för slutpunkt och distribution:

az ml online-endpoint show -n $ENDPOINT_NAME

Du kan visa alla slutpunkter i arbetsytan i tabellformat med hjälp list av kommandot :

az ml online-endpoint list --output table

Kontrollera status 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 inferens-server. Om du vill se loggarna från storage-initializer (den monterar tillgångar som modell och kod i containern --container storage-initializer ) lägger du till flaggan .

Anropa slutpunkten för att poängsätta data med hjälp av din modell

Du kan använda antingen invoke kommandot eller en REST-klient för att anropa slutpunkten och poängsätta 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:

Tips

Du kan styra vilka Azure Active Directory-säkerhetsobjekt som kan hämta autentiseringsnyckeln genom att tilldela dem till en anpassad roll som tillåter Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action och Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action. Mer information finns i Hantera åtkomst till en Azure Machine Learning-arbetsyta.

ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)

Använd sedan curl för att poängsätta 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 kommandona och get-credentials för att hämta autentiseringsuppgifterna. Observera också att vi använder --query flaggan för att filtrera attribut till endast det vi behöver. Mer information om --queryfinns i Köra frågor mot Azure CLI-kommandoutdata.

Om du vill se anropsloggarna kör du get-logs igen.

Information om hur du autentiserar med en token finns i Autentisera till onlineslutpunkter.

(Valfritt) Uppdatera distributionen

Om du vill uppdatera koden, modellen eller miljön uppdaterar du YAML-filen och kör az ml online-endpoint update sedan kommandot .

Anteckning

Om du uppdaterar antalet instanser och tillsammans med andra modellinställningar (kod, modell eller miljö) i ett enda update kommando: först utförs skalningsåtgärden och sedan tillämpas de andra uppdateringarna. I produktionsmiljön är det bra att utföra dessa åtgärder separat.

Så här förstår du 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 vill säga att ändringar i YAML återspeglas i de underliggande Azure Resource Manager-resurserna (slutpunkter och distributioner). En deklarativ metod underlättar GitOps: Alla ändringar av slutpunkter och distributioner (till och med instance_count) går igenom YAML. Du kan göra uppdateringar utan att använda YAML med hjälp --set av flaggan .

  5. Eftersom du ändrade init() funktionen (init() körs när slutpunkten skapas eller uppdateras) visas meddelandet Updated successfully i loggarna. Hämta loggarna genom att köra:

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    

Kommandot update fungerar också med lokala distributioner. Använd samma az ml online-deployment update kommando med --local flaggan .

Tips

update Med kommandot kan du använda parametern--set i Azure CLI för att åsidosätta attribut i YAML eller för att ange specifika attribut utan att skicka YAML-filen. Användning av --set enskilda attribut är särskilt värdefullt i utvecklings- och testscenarier. Om du till exempel vill skala upp instance_count värdet för den första distributionen --set instance_count=2 kan du använda flaggan . 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.

  • För hanterad onlineslutpunkt uppdateras samma distribution med den nya konfigurationen, med 20 % noder åt gången, d.v.s. om distributionen har 10 noder uppdateras två noder åt gången.
  • För Kubernetes onlineslutpunkt skapar systemet iterately en ny distributionsinstans med den nya konfigurationen och tar bort den gamla.
  • 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 har stöd för automatisk skalning via integrering med autoskalningsfunktionen i Azure Monitor. Information om hur du konfigurerar autoskalning finns i Så här autoskalar du onlineslutpunkter.

(Valfritt) Övervaka serviceavtal med hjälp av Azure Monitor

Om du vill visa mått och ställa in aviseringar baserat på ditt serviceavtal utför du stegen som beskrivs i Övervaka 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 varaktigt sätt. Mer information om hur du använder loggning finns i Övervaka onlineslutpunkter

Så här konfigurerar du e-postmeddelanden i studio (förhandsversion)

Om du vill börja ta emot e-postmeddelanden när jobbet, onlineslutpunkten eller batchslutpunkten har slutförts eller om det finns ett problem (misslyckades, avbröts) följer du instruktionerna ovan.

  1. I Azure ML Studio går du till inställningar genom att välja kugghjulsikonen.
  2. Välj fliken Email meddelanden.
  3. Växla om du vill aktivera eller inaktivera e-postaviseringar för en viss händelse.

Skärmbild av inställningarna för Azure ML Studio på fliken e-postaviseringar.

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 följande artiklar om du vill veta mer: