Lär dig hur du använder en anpassad container för att distribuera en modell till en onlineslutpunkt i Azure Machine Learning.
Anpassade containerdistributioner kan använda andra webbservrar än den Python Flask-standardserver som används av Azure Machine Learning. Användare av dessa distributioner kan fortfarande dra nytta av Azure Machine Learnings inbyggda övervakning, skalning, aviseringar och autentisering.
I följande tabell visas olika distributionsexempel som använder anpassade containrar, till exempel TensorFlow Serving, TorchServe, Triton Inference Server, Plumber R-paket och Azure Machine Learning Inference Minimal avbildning.
Distribuera två MLFlow-modeller med olika Python-krav till två separata distributioner bakom en enda slutpunkt med azure machine learning-slutsatsdragningen Minimal avbildning.
Distribuera en Triton-modell med en anpassad container
Den här artikeln fokuserar på att betjäna en TensorFlow-modell med TensorFlow -servering (TF).
Varning
Microsoft kanske inte kan hjälpa till att felsöka problem som orsakas av en anpassad avbildning. Om du får problem kan du bli ombedd att använda standardbilden eller någon av de bilder som Microsoft tillhandahåller för att se om problemet är specifikt för din bild.
Förutsättningar
Innan du följer stegen i den här artikeln kontrollerar du att du har följande förutsättningar:
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.
Om du vill installera Python SDK v2 använder du följande kommando:
pip install azure-ai-ml azure-identity
Om du vill uppdatera en befintlig installation av SDK:et till den senaste versionen använder du följande kommando:
Du, eller tjänstens huvudnamn som du använder, måste ha deltagaråtkomst till den Azure-resursgrupp som innehåller din arbetsyta. Du har en sådan resursgrupp om du har konfigurerat din arbetsyta med hjälp av snabbstartsartikeln.
Om du vill distribuera lokalt måste Docker-motorn köras lokalt. Det här steget rekommenderas starkt. Det hjälper dig att felsöka problem.
Ladda ned källkod
Om du vill följa med i den här självstudien klonar du källkoden från GitHub.
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli
Se även exempelanteckningsboken, men observera att 3. Test locally avsnittet i notebook-filen förutsätter att den körs under azureml-examples/sdk katalogen.
Anslut till din Azure Machine Learning-arbetsyta, konfigurera information om arbetsytan och få en handtag till arbetsytan på följande sätt:
Importera de bibliotek som krävs:
# import required libraries
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
ManagedOnlineEndpoint,
ManagedOnlineDeployment,
Model,
Environment,
CodeConfiguration,
)
from azure.identity import DefaultAzureCredential
Konfigurera information om arbetsytan och få ett handtag till arbetsytan:
# enter details of your Azure Machine Learning workspace
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace = "<AZUREML_WORKSPACE_NAME>"
# get a handle to the workspace
ml_client = MLClient(
DefaultAzureCredential(), subscription_id, resource_group, workspace
)
name: Namnet på slutpunkten. Den måste vara unik i Azure-regionen. Namnet på en slutpunkt måste börja med en versal eller gemen bokstav och endast bestå av '-'s och alfanumeriska tecken. Mer information om namngivningsreglerna finns i slutpunktsgränser.
auth_mode : Används key för nyckelbaserad autentisering. Används aml_token för tokenbaserad autentisering i Azure Machine Learning. A key upphör inte att gälla, men aml_token upphör att gälla. Mer information om autentisering finns i Autentisera till en onlineslutpunkt.
Du kan också lägga till beskrivning, taggar till slutpunkten.
# Creating a unique endpoint name with current datetime to avoid conflicts
import datetime
online_endpoint_name = "endpoint-" + datetime.datetime.now().strftime("%m%d%H%M%f")
# create an online endpoint
endpoint = ManagedOnlineEndpoint(
name=online_endpoint_name,
description="this is a sample online endpoint",
auth_mode="key",
tags={"foo": "bar"},
)
Konfigurera onlinedistribution
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. Skapa en distribution för slutpunkten med hjälp av ManagedOnlineDeployment klassen .
Tips
name - Namnet på distributionen.
endpoint_name – Namnet på slutpunkten som distributionen ska skapas under.
model – 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.
environment – Den miljö som ska användas för distributionen. Det här värdet kan antingen vara en referens till en befintlig > version av miljön på arbetsytan eller en infogad miljöspecifikation.
code_configuration – konfigurationen för källkoden och bedömningsskriptet
path– Sökväg till källkodskatalogen för bedömning av modellen
scoring_script – Relativ sökväg till bedömningsfilen i källkodskatalogen
instance_type – Den VM-storlek som ska användas för distributionen. En lista över storlekar som stöds finns i SKU-listan för slutpunkter.
instance_count – Antalet instanser som ska användas för distributionen
Det finns några viktiga begrepp att tänka på i den här YAML/Python-parametern:
Basavbildning
Basavbildningen anges som en parameter i miljön och docker.io/tensorflow/serving:latest används i det här exemplet. När du inspekterar containern kan du se att den här servern använder ENTRYPOINT för att starta ett startpunktsskript som tar miljövariablerna som MODEL_BASE_PATH och MODEL_NAMEoch exponerar portar som 8501. Den här informationen är all specifik information för den valda servern. Du kan använda den här förståelsen för servern för att avgöra hur distributionen ska definieras. Om du till exempel anger miljövariabler för MODEL_BASE_PATH och MODEL_NAME i distributionsdefinitionen tar servern (i det här fallet TF-servering) värdena för att initiera servern. Om du anger att porten för vägarna ska finnas 8501 i distributionsdefinitionen dirigeras användarens begäran till sådana vägar korrekt till TF-serverservern.
Observera att det här specifika exemplet baseras på TF-serveringsfallet, men du kan använda alla containrar som håller sig uppe och svarar på begäranden som kommer till liveness, beredskap och bedömningsvägar. Du kan se andra exempel och se hur dockerfile skapas (till exempel genom att använda CMD i stället för ENTRYPOINT) för att skapa containrarna.
Slutsatsdragningskonfiguration
Inferenskonfiguration är en parameter i miljön och anger port och sökväg för 3 typer av vägen: liveness, readiness och scoring route. Inferenskonfiguration krävs om du vill köra en egen container med hanterad onlineslutpunkt.
Beredskapsväg jämfört med liveness-väg
Den API-server som du väljer kan vara ett sätt att kontrollera serverns status. Det finns två typer av vägen som du kan ange: livskraft och beredskap. En liveness-väg används för att kontrollera om servern körs. En beredskapsväg används för att kontrollera om servern är redo att fungera. I samband med maskininlärningsinferens kan en server svara 200 OK på en liveness-begäran innan en modell läses in, och servern kan svara 200 OK på en beredskapsbegäran först när modellen har lästs in i minnet.
Mer information om liveness- och beredskapsavsökningar i allmänhet finns i Kubernetes-dokumentationen.
De aktiva vägarna och beredskapsvägarna bestäms av valfri API-server, som du skulle ha identifierat när du testade containern lokalt i tidigare steg. Observera att exempeldistributionen i den här artikeln använder samma sökväg för både liveness och beredskap, eftersom TF-servering endast definierar en liveness-väg. Se andra exempel för olika mönster för att definiera vägarna.
Bedömningsväg
Den API-server som du väljer skulle vara ett sätt att ta emot nyttolasten att arbeta med. När det gäller maskininlärningsinferenser skulle en server ta emot indata via en specifik väg. Identifiera den här vägen för DIN API-server när du testar containern lokalt i tidigare steg och ange den när du definierar distributionen som ska skapas.
Observera att distributionen kommer att uppdatera scoring_uri-parametern för slutpunkten, som du kan verifiera med az ml online-endpoint show -n <name> --query scoring_uri.
Hitta den monterade modellen
När du distribuerar en modell som en onlineslutpunkt monterar Azure Machine Learning din modell till slutpunkten. Med modellmontering kan du distribuera nya versioner av modellen utan att behöva skapa en ny Docker-avbildning. Som standard finns en modell registrerad med namnet foo och version 1 på följande sökväg i den distribuerade containern: /var/azureml-app/azureml-models/foo/1
Om du till exempel har en katalogstruktur med /azureml-examples/cli/endpoints/online/custom-container på den lokala datorn, där modellen heter half_plus_two:
Sedan finns din modell på /var/tfserving-model-mount/tfserving-deployment/1 i distributionen. Observera att den inte längre finns under azureml-app/azureml-models, utan under den monteringssökväg som du angav:
Nu när du förstår hur YAML skapades skapar du slutpunkten.
az ml online-endpoint create --name tfserving-endpoint -f endpoints/online/custom-container/tfserving-endpoint.yml
Det kan ta några minuter att skapa en distribution.
az ml online-deployment create --name tfserving-deployment -f endpoints/online/custom-container/tfserving-deployment.yml --all-traffic
Skapa slutpunkten på arbetsytan med hjälp av den MLClient som skapades tidigare. Det här kommandot startar skapandet av slutpunkten och returnerar ett bekräftelsesvar medan skapandet av slutpunkten fortsätter.
ml_client.begin_create_or_update(endpoint)
Skapa distributionen genom att köra:
ml_client.begin_create_or_update(blue_deployment)
Anropa slutpunkten
När distributionen är klar kan du se om du kan göra en bedömningsbegäran till den distribuerade slutpunkten.
RESPONSE=$(az ml online-endpoint invoke -n $ENDPOINT_NAME --request-file $BASE_PATH/sample_request.json)
Med hjälp av det som skapades MLClient tidigare får du ett handtag till slutpunkten. Slutpunkten kan anropas med kommandot invoke med följande parametrar:
endpoint_name – Slutpunktens namn
request_file – Fil med begärandedata
deployment_name – Namnet på den specifika distribution som ska testas i en slutpunkt
Skicka en exempelbegäran med hjälp av en JSON-fil. JSON-exemplet finns i exempellagringsplatsen.
# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
deployment_name="blue",
request_file="sample-request.json",
)
Ta bort slutpunkten
Nu när du har gjort mål med slutpunkten kan du ta bort den:
Hantera datainmatning och förberedelse, modellträning och distribution samt övervakning av maskininlärningslösningar med Python, Azure Machine Learning och MLflow.