Distribuera och poängsätta en maskininlärningsmodell med hjälp av en onlineslutpunkt
GÄLLER FÖR:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (aktuell)
I den här artikeln lär du dig att distribuera din modell till en onlineslutpunkt för användning i realtidsinferens. Du börjar med att distribuera en modell på den lokala datorn för att felsöka eventuella fel. Sedan distribuerar och testar du modellen i Azure. Du får också lära dig att visa distributionsloggarna och övervaka serviceavtalet (SLA). I slutet av den här artikeln har du en skalbar HTTPS/REST-slutpunkt som du kan använda för slutsatsdragning i realtid.
Onlineslutpunkter är slutpunkter som används för inferens i realtid. Det finns två typer av onlineslutpunkter: hanterade onlineslutpunkter och Kubernetes-onlineslutpunkter. Mer information om slutpunkter och skillnader mellan hanterade onlineslutpunkter och Kubernetes onlineslutpunkter finns i Vad är Azure Machine Learning-slutpunkter?.
Hanterade onlineslutpunkter hjälper dig att distribuera användningsklara ML-modeller. Hanterade onlineslutpunkter körs skalbart och helt hanterat på datorer med kraftfulla processorer och grafikkort i Azure. Hanterade onlineslutpunkter betjänar, skalar om, skyddar och övervakar dina modeller så att du slipper arbetet med 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 som är infogade i den hanterade onlineslutpunktsdiskussionen.
Förutsättningar
GÄLLER FÖR:Azure CLI ml extension v2 (aktuell)
Innan du följer stegen i den här artikeln kontrollerar du att du har följande förutsättningar:
Azure CLI och
ml
tillägget till Azure CLI. Mer information finns i Installera, konfigurera och använda CLI (v2).Viktigt!
CLI-exemplen i den här artikeln förutsätter att du använder Bash-gränssnittet (eller det kompatibla). Till exempel från ett Linux-system eller Windows-undersystem för Linux.
En Azure Machine Learning-arbetsyta. Om du inte har någon använder du stegen i Installera, konfigurera och använda CLI (v2) för att skapa en.
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/*
. Om du använder studio för att skapa/hantera onlineslutpunkter/distributioner behöver du ytterligare behörigheten "Microsoft.Resources/deployments/write" från resursgruppens ägare. 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.
Kvotallokering för virtuell dator för distribution
För hanterade onlineslutpunkter reserverar Azure Machine Learning 20 % av dina beräkningsresurser för att utföra uppgraderingar på vissa VM-SKU:er. Om du begär ett visst antal instanser för de virtuella dator-SKU:erna i en distribution måste du ha en kvot för tillgänglig för ceil(1.2 * number of instances requested for deployment) * number of cores for the VM SKU
att undvika ett fel. Om du till exempel begär 10 instanser av en Standard_DS3_v2 virtuell dator (som levereras med 4 kärnor) i en distribution bör du ha en kvot på 48 kärnor (12 instances * 4 cores
) tillgänglig. Den här extra kvoten är reserverad för systeminiterade åtgärder, till exempel uppgradering av operativsystem, återställning av virtuella datorer osv. Information om hur du visar ökningar av användnings- och begärandekvoter finns i Visa din användning och dina kvoter i Azure-portalen. Information om hur du visar kostnaden för att köra hanterade onlineslutpunkter finns i Visa kostnad för hanterad onlineslutpunkt. Det finns vissa VM-SKU:er som är undantagna från extra kvotreservation. Om du vill visa den fullständiga listan kan du läsa SKU-listan hanterade onlineslutpunkter.
Azure Machine Learning tillhandahåller en delad kvotpool från vilken alla användare kan komma åt kvoten för att utföra testning under en begränsad tid. När du använder studion för att distribuera Modeller för Llama-2, Phi, Nemotron, Mistral, Dolly och Deci-DeciLM från modellkatalogen till en hanterad onlineslutpunkt, ger Azure Machine Learning dig åtkomst till den delade kvoten under en kort tid.
Mer information om hur du använder den delade kvoten för distribution av onlineslutpunkter finns i Distribuera grundmodeller med hjälp av studion.
Förbereda systemet
Ange miljövariabler
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 in 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>
Klona exempellagringsplatsen
Om du vill följa med i den här artikeln klonar du först exempellagringsplatsen (azureml-examples). Kör sedan följande kod för att gå till lagringsplatsens cli/
katalog:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli
Dricks
Använd --depth 1
för att endast klona den senaste incheckningen till lagringsplatsen, vilket minskar tiden för att slutföra åtgärden.
Kommandona i den här självstudien finns i filerna deploy-local-endpoint.sh
och deploy-managed-online-endpoint.sh
i cli
katalogen, och YAML-konfigurationsfilerna finns i underkatalogen endpoints/online/managed/sample/
.
Kommentar
YAML-konfigurationsfilerna för Kubernetes onlineslutpunkter finns i underkatalogen endpoints/online/kubernetes/
.
Definiera slutpunkten
Om du vill definiera en slutpunkt måste du ange:
- Slutpunktsnamn: Namnet på slutpunkten. Den måste vara unik i Azure-regionen. Mer information om namngivningsreglerna finns i slutpunktsgränser.
- Autentiseringsläge: Autentiseringsmetoden för slutpunkten. Välj mellan nyckelbaserad autentisering och tokenbaserad autentisering i Azure Machine Learning. En nyckel upphör inte att gälla, men en token upphör att gälla. Mer information om autentisering finns i Autentisera till en onlineslutpunkt.
- Du kan också lägga till en beskrivning och taggar i slutpunkten.
Ange ett slutpunktsnamn
Om du vill ange slutpunktsnamnet kör du följande kommando (ersätt YOUR_ENDPOINT_NAME
med ett unikt namn).
Kör det här kommandot för Linux:
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
Konfigurera slutpunkten
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
Referensen för YAML-formatet för slutpunkten beskrivs i följande tabell. Information om hur du anger dessa attribut finns i YAML-referensen för onlineslutpunkten. Information om begränsningar relaterade till hanterade slutpunkter finns i begränsningar för onlineslutpunkter.
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 kodfragment i en webbläsare. |
name |
Namnet på slutpunkten. |
auth_mode |
Används key för nyckelbaserad autentisering. Används aml_token för tokenbaserad autentisering i Azure Machine Learning. Använd kommandot för az ml online-endpoint get-credentials att hämta den senaste token. |
Definiera distributionen
En distribution är en uppsättning resurser som krävs för att vara värd för den modell som utför den faktiska inferensen. 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.
- Ett bedömningsskript, d.v.s. kod som kör modellen på en viss indatabegäran. Bedömningsskriptet tar emot data som skickats till en distribuerad webbtjänst och skickar dem till modellen. Skriptet kör sedan modellen och returnerar svaret till klienten. Bedömningsskriptet är specifikt för din modell och måste förstå de data som modellen förväntar sig som indata och returnerar som utdata. I det här exemplet har vi en score.py fil.
- En miljö där din modell körs. Miljön kan vara en Docker-avbildning med Conda-beroenden eller en Dockerfile.
- Inställningar för att ange instanstyp och skalningskapacitet.
I följande tabell beskrivs nyckelattributen för en distribution:
Attribut | Beskrivning |
---|---|
Name | Namnet på distributionen. |
Slutpunktnamn | Namnet på slutpunkten som distributionen ska skapas under. |
Modell | Den modell som ska användas för distributionen. Det här värdet kan antingen vara en referens till en befintlig version av modellen på arbetsytan eller en infogad modellspecifikation. |
Kodsökväg | Sökvägen till 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. |
Bedömningsskript | Den relativa sökvägen till bedömningsfilen i källkodskatalogen. 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 poängsättningen och förutsägelsen. |
Environment | Miljön som ska vara värd för modellen och koden. Det här värdet kan antingen vara en referens till en befintlig version av miljön på arbetsytan eller en infogad miljöspecifikation. |
Instanstyp | Den VM-storlek som ska användas för distributionen. Listan över storlekar som stöds finns i SKU-listan för hanterade onlineslutpunkter. |
Antal instanser | Antalet instanser som ska användas för distributionen. Basera värdet på den arbetsbelastning du förväntar dig. För hög tillgänglighet rekommenderar vi att du anger värdet till minst 3 . Vi reserverar ytterligare 20 % för att utföra uppgraderingar. Mer information finns i kvotallokering för virtuella datorer för distributioner. |
Varning
- Modellen och containeravbildningen (enligt definitionen i Miljö) kan när som helst refereras igen av distributionen när instanserna bakom distributionen går igenom säkerhetskorrigeringar och/eller andra återställningsåtgärder. Om du använde en registrerad modell eller containeravbildning i Azure Container Registry för distribution och tog bort modellen eller containeravbildningen kan distributionerna som förlitar sig på dessa tillgångar misslyckas när ombildningen sker. Om du har tagit bort modellen eller containeravbildningen kontrollerar du att de beroende distributionerna återskapas eller uppdateras med en alternativ modell eller containeravbildning.
- Containerregistret som miljön refererar till kan endast vara privat om slutpunktsidentiteten har behörighet att komma åt den via Microsoft Entra-autentisering och Azure RBAC. Av samma anledning stöds inte privata Docker-register förutom Azure Container Registry.
Konfigurera en distribution
Följande kodfragment visar filen endpoints/online/managed/sample/blue-deployment.yml , med alla nödvändiga indata för att konfigurera en distribution:
$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.yaml
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
Kommentar
I filen blue-deployment.yml har vi angett följande distributionsattribut:
model
– I det här exemplet anger vi modellegenskaperna infogade med hjälp avpath
. Modellfiler laddas upp och registreras automatiskt med ett automatiskt genererat namn.environment
– I det här exemplet har vi infogade definitioner som innehållerpath
. Vi använderenvironment.docker.image
för avbildningen. Beroendenaconda_file
installeras ovanpå avbildningen.
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.
Kommentar
Så här använder du Kubernetes i stället för hanterade slutpunkter som beräkningsmål:
- Skapa och koppla kubernetes-klustret som beräkningsmål till din Azure Machine Learning-arbetsyta med hjälp av Azure Machine Learning-studio.
- Använd slutpunktens YAML för att rikta in dig 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 som gäller för Kubernetes-distribution.
Alla kommandon som används i den här artikeln (förutom valfri SLA-övervakning och Azure Log Analytics-integrering) kan användas antingen med hanterade slutpunkter eller med Kubernetes-slutpunkter.
Registrera din modell och miljö separat
I det här exemplet anger path
vi (var du kan ladda upp filer från) infogade. 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
.
Mer information om hur du registrerar din modell som en tillgång finns i Registrera din modell som en tillgång i Machine Learning med hjälp av CLI. Mer information om hur du skapar en miljö finns i Hantera Azure Machine Learning-miljöer med CLI & SDK (v2).
Använda olika typer och avbildningar av PROCESSOR- och GPU-instanser
Föregående definition i blue-deployment.yml-filen använder en instans av generell typ Standard_DS3_v2
och en docker-avbildning mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
som inte är GPU. För GPU-beräkning väljer du en SKU för GPU-beräkningstyp 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 Grundavbildningar för Azure Machine Learning.
Kommentar
Information om hur du använder Kubernetes i stället för hanterade slutpunkter som beräkningsmål finns i Introduktion till Kubernetes-beräkningsmål.
Identifiera modellsökväg med avseende på AZUREML_MODEL_DIR
När du distribuerar din modell till Azure Machine Learning måste du ange platsen för den modell som du vill distribuera som en del av distributionskonfigurationen. I Azure Machine Learning spåras sökvägen till din modell med AZUREML_MODEL_DIR
miljövariabeln. Genom att AZUREML_MODEL_DIR
identifiera modellsökvägen med avseende på kan du distribuera en eller flera modeller som lagras lokalt på datorn eller distribuera en modell som är registrerad på din Azure Machine Learning-arbetsyta.
Som illustration refererar vi till följande lokala mappstruktur för de två första fallen där du distribuerar en enskild modell eller distribuerar flera modeller som lagras lokalt:
Använda en enda lokal modell i en distribution
Om du vill använda en enda modell som du har på din lokala dator i en distribution anger du path
till model
i din distributions YAML. Här är ett exempel på yaml-distributionen med sökvägen /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pkl
:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
path: /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pkl
code_configuration:
code: ../../model-1/onlinescoring/
scoring_script: score.py
environment:
conda_file: ../../model-1/environment/conda.yml
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
När du har skapat distributionen pekar miljövariabeln AZUREML_MODEL_DIR
på lagringsplatsen i Azure där din modell lagras. Innehåller till exempel /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1
modellen sample_m1.pkl
.
I ditt bedömningsskript (score.py
) kan du läsa in din modell (i det här exemplet sample_m1.pkl
) i init()
funktionen:
def init():
model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "sample_m1.pkl")
model = joblib.load(model_path)
Använda flera lokala modeller i en distribution
Även om Azure CLI, Python SDK och andra klientverktyg gör att du bara kan ange en modell per distribution i distributionsdefinitionen kan du fortfarande använda flera modeller i en distribution genom att registrera en modellmapp som innehåller alla modeller som filer eller underkataloger.
I föregående exempelmappstruktur ser du att det finns flera modeller i models
mappen. I din distributions-YAML kan du ange sökvägen till mappen på models
följande sätt:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
path: /Downloads/multi-models-sample/models/
code_configuration:
code: ../../model-1/onlinescoring/
scoring_script: score.py
environment:
conda_file: ../../model-1/environment/conda.yml
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
När du har skapat distributionen pekar miljövariabeln AZUREML_MODEL_DIR
på lagringsplatsen i Azure där dina modeller lagras. Innehåller till exempel /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1
modellerna och filstrukturen.
I det här exemplet ser innehållet i AZUREML_MODEL_DIR
mappen ut så här:
I ditt bedömningsskript (score.py
) kan du läsa in dina modeller i init()
funktionen. Följande kod läser in sample_m1.pkl
modellen:
def init():
model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "models","model_1","v1", "sample_m1.pkl ")
model = joblib.load(model_path)
Ett exempel på hur du distribuerar flera modeller till en distribution finns i Distribuera flera modeller till en distribution (CLI-exempel) och Distribuera flera modeller till en distribution (SDK-exempel).
Dricks
Om du har fler än 1 500 filer att registrera kan du överväga att komprimera filerna eller underkatalogerna som .tar.gz när du registrerar modellerna. Om du vill använda modellerna kan du avkomprimera filerna eller underkatalogerna i init()
funktionen från bedömningsskriptet. När du registrerar modellerna kan du också ange azureml.unpack
egenskapen till True
, för att automatiskt ta bort komprimera filer eller underkataloger. I båda fallen sker avkomprimering en gång i initieringssteget.
Använda modeller som är registrerade på din Azure Machine Learning-arbetsyta i en distribution
Om du vill använda en eller flera modeller som är registrerade på din Azure Machine Learning-arbetsyta anger du namnet på de registrerade modellerna i din distributions-YAML i distributionen. Följande YAML-konfiguration för distribution anger till exempel det registrerade model
namnet som azureml:local-multimodel:3
:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model: azureml:local-multimodel:3
code_configuration:
code: ../../model-1/onlinescoring/
scoring_script: score.py
environment:
conda_file: ../../model-1/environment/conda.yml
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
I det här exemplet bör du tänka på att local-multimodel:3
innehåller följande modellartefakter, som kan visas från fliken Modeller i Azure Machine Learning-studio:
När du har skapat distributionen pekar miljövariabeln AZUREML_MODEL_DIR
på lagringsplatsen i Azure där dina modeller lagras. Innehåller till exempel /var/azureml-app/azureml-models/local-multimodel/3
modellerna och filstrukturen. AZUREML_MODEL_DIR
pekar på mappen som innehåller roten för modellartefakterna.
Baserat på det här exemplet ser innehållet i AZUREML_MODEL_DIR
mappen ut så här:
I ditt bedömningsskript (score.py
) kan du läsa in dina modeller i init()
funktionen. Läs till exempel in diabetes.sav
modellen:
def init():
model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR"), "models", "diabetes", "1", "diabetes.sav")
model = joblib.load(model_path)
Förstå bedömningsskriptet
Dricks
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 måste bedömningsskriptet som anges i code_configuration.scoring_script
ha en init()
funktion och en run()
funktion.
I det här exemplet används filen score.py: score.py
import os
import logging
import json
import numpy
import joblib
def init():
"""
This function is called when the container is initialized/started, typically after create/update of the deployment.
You can write the logic here to perform init operations like caching the model in memory
"""
global model
# AZUREML_MODEL_DIR is an environment variable created during deployment.
# It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
# Please provide your model's folder name if there is one
model_path = os.path.join(
os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
)
# deserialize the model file back into a sklearn model
model = joblib.load(model_path)
logging.info("Init complete")
def run(raw_data):
"""
This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
In the example we extract the data from the json input and call the scikit-learn model's predict()
method and return the result back
"""
logging.info("model 1: request received")
data = json.loads(raw_data)["data"]
data = numpy.array(data)
result = model.predict(data)
logging.info("Request processed")
return result.tolist()
Funktionen init()
anropas när containern initieras eller startas. Initieringen sker vanligtvis strax efter att distributionen har skapats eller uppdaterats. Funktionen init
är platsen för att skriva logik 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 den gör den faktiska poängsättningen och förutsägelsen. I det här exemplet extraherar vi data från en JSON-indata, anropar scikit-learn-modellens predict()
metod och returnerar sedan resultatet.
Distribuera och felsöka lokalt med hjälp av lokala slutpunkter
Vi rekommenderar starkt att du testkör slutpunkten lokalt genom att validera och felsöka din kod och konfiguration innan du distribuerar till Azure. Azure CLI och Python SDK stöder lokala slutpunkter och distributioner, medan Azure Machine Learning-studio- och ARM-mallen inte gör det.
Om du vill distribuera lokalt måste Docker Engine installeras och köras. Docker Engine startar vanligtvis när datorn startas. Om den inte gör det kan du felsöka Docker Engine.
Dricks
Du kan använda Azure Machine Learning-inferensen HTTP Server Python-paketet för att felsöka ditt bedömningsskript lokalt utan Docker Engine. Felsökning med slutsatsdragningsservern hjälper dig att felsöka bedömningsskriptet innan du distribuerar till lokala slutpunkter så att du kan felsöka utan att påverkas av konfigurationerna av distributionscontainer.
Kommentar
Lokala slutpunkter har följande begränsningar:
- De stöder inte trafikregler, autentisering eller avsökningsinställningar.
- De stöder bara en distribution per slutpunkt.
- De stöder lokala modellfiler och miljöer med endast lokal conda-fil. Om du vill testa registrerade modeller laddar du först ned dem med CLIeller SDK och använder
path
sedan i distributionsdefinitionen för att referera till den överordnade mappen. Om du vill testa registrerade miljöer kontrollerar du miljöns kontext i Azure Machine Learning-studio och förbereder den lokala conda-filen som ska användas. Exempel i den här artikeln visar hur du använder lokal modell och miljö med lokal conda-fil, som stöder lokal distribution.
Mer information om felsökning av onlineslutpunkter lokalt innan du distribuerar till Azure finns i Felsöka onlineslutpunkter lokalt i Visual Studio Code.
Distribuera modellen lokalt
Skapa först en slutpunkt. Om du vill kan du hoppa över det här steget för en lokal slutpunkt och direkt skapa distributionen (nästa steg), vilket i sin tur skapar nödvändiga metadata. Att distribuera modeller lokalt är användbart i utvecklings- och testsyfte.
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.
Dricks
Använd Visual Studio Code till 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 distribuerades 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/län | beskrivning |
---|---|
Skapa | Resursen skapas. |
Uppdatera | Resursen uppdateras. |
Ta bort | Resursen tas bort. |
Lyckades | Åtgärden för att skapa/uppdatera lyckades. |
Misslyckades | Åtgärden create/update/delete 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 attributet i scoring_uri
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 :
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.
Dricks
- 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.
Viktigt!
Flaggan --all-traffic
i ovanstående az ml online-deployment create
allokerar 100 % av slutpunktstrafiken till den nyligen skapade blå distributionen. Även om detta är användbart i utvecklings- och testsyfte kan det vara bra att öppna trafik till den nya distributionen via ett explicit kommando för produktion. Exempel: az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100"
Dricks
- Använd Felsökning av distribution av onlineslutpunkter för att felsöka fel.
Kontrollera slutpunktens status
Kommandot show
innehåller information i provisioning_state
för slutpunkten och distributionen:
az ml online-endpoint show -n $ENDPOINT_NAME
Du kan visa en lista över alla slutpunkter i arbetsytan i tabellformat med hjälp list
av kommandot :
az ml online-endpoint list --output table
Kontrollera statusen för onlinedistributionen
Kontrollera loggarna för att se om modellen distribuerades utan fel.
Om du vill se loggutdata från en container använder du följande CLI-kommando:
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
Som standard hämtas loggarna från inferensservercontainern. Om du vill se loggar från containern för lagringsinitieraren lägger du till --container storage-initializer
flaggan. Mer information om distributionsloggar finns i Hämta containerloggar.
Anropa slutpunkten för att poängsätta data med hjälp av din modell
Du kan använda antingen kommandot invoke
eller valfri 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:
Dricks
Du kan styra vilka Microsoft Entra-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
och get-credentials
kommandon för att hämta autentiseringsuppgifterna. Observera också att vi använder --query
flaggan för att filtrera attribut till bara det vi behöver. Mer information om --query
finns i Fråga 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 .
Kommentar
Om du uppdaterar antalet instanser (för att skala distributionen) tillsammans med andra modellinställningar (till exempel kod, modell eller miljö) i ett enda update
kommando utförs skalningsåtgärden först, sedan tillämpas de andra uppdateringarna. Det är en bra idé att utföra dessa åtgärder separat i en produktionsmiljö.
Så här förstår du hur update
det 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.yml
Kommentar
Det är deklarativt att uppdatera med YAML. Det vill säga ä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.Dricks
- Du kan använda allmänna uppdateringsparametrar, till exempel parametern
--set
, med CLI-kommandotupdate
för att åsidosätta attribut i YAML eller för att ange specifika attribut utan att skicka dem i YAML-filen. Användning för--set
enkla attribut är särskilt värdefullt i utvecklings- och testscenarier. Om du till exempel vill skala uppinstance_count
värdet för den första distributionen kan du använda--set instance_count=2
flaggan. Men eftersom YAML inte uppdateras underlättar inte den här tekniken GitOps. - Det är INTE obligatoriskt att ange YAML-filen. Om du till exempel vill testa olika samtidighetsinställningar för en viss distribution kan du prova något i stil med
az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4
. Detta behåller all befintlig konfiguration men uppdaterar endast de angivna parametrarna.
- Du kan använda allmänna uppdateringsparametrar, till exempel parametern
Eftersom du har ändrat
init()
funktionen, som körs när slutpunkten skapas eller uppdateras, visas meddelandetUpdated 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.
Kommentar
Den tidigare uppdateringen av distributionen är ett exempel på en löpande uppdatering på plats.
- För en hanterad onlineslutpunkt uppdateras distributionen till den nya konfigurationen med 20 % noder åt gången. Om distributionen har 10 noder uppdateras alltså 2 noder åt gången.
- För en Kubernetes online-slutpunkt skapar systemet iterativt en ny distributionsinstans med den nya konfigurationen och tar bort den gamla.
- För produktionsanvändning bör du överväga blågrön distribution, vilket är ett säkrare alternativ för att uppdatera en webbtjänst.
(Valfritt) Konfigurera automatisk skalning
Med autoskalning körs automatiskt rätt mängd resurser för att hantera arbetsbelastningen i appen. Hanterade onlineslutpunkter stöder automatisk skalning genom integrering med autoskalningsfunktionen i Azure Monitor. Information om hur du konfigurerar automatisk skalning finns i Så här autoskalar du onlineslutpunkter.
(Valfritt) Övervaka serviceavtal med hjälp av Azure Monitor
Om du vill visa mått och ange aviseringar baserat på ditt serviceavtal slutför du stegen som beskrivs i Övervaka onlineslutpunkter.
(Valfritt) Integrera med Log Analytics
Kommandot get-logs
för CLI eller get_logs
metoden för SDK innehåller endast 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 korrekt sätt. Mer information om hur du använder loggning finns i Övervaka onlineslutpunkter.
Ta bort slutpunkten och distributionen
Om du inte använder 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
Relaterat innehåll
- Valv distribution för onlineslutpunkter
- Distribuera modeller med REST
- Så här autoskalar du hanterade onlineslutpunkter
- Övervaka hanterade onlineslutpunkter
- Få åtkomst till Azure-resurser från en onlineslutpunkt med en hanterad identitet
- Felsöka distribution av onlineslutpunkter
- Aktivera nätverksisolering med hanterade onlineslutpunkter
- Visa kostnader för en Azure Machine Learning-hanterad onlineslutpunkt
- Hantera och öka kvoter för resurser med Azure Machine Learning
- Använda batchslutpunkter för batchbedömning