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, visar distributionsloggarna och övervakar 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 Mašinsko učenje slutpunkter?
Med hanterade onlineslutpunkter kan du distribuera användningsklara maskininlärningsmodeller. 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.
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 podsistem za Linux.
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 Mašinsko učenje-arbetsytan eller en anpassad roll som tillåter Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Om du använder studion för att skapa/hantera onlineslutpunkter/distributioner behöver du en extra behörighet "Microsoft.Resources/deployments/write" från resursgruppens ägare. Mer information finns i Hantera åtkomst till en Azure Mašinsko učenje-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.
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 Mašinsko učenje-arbetsytan eller en anpassad roll som tillåter Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Mer information finns i Hantera åtkomst till en Azure Mašinsko učenje-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.
Innan du följer stegen i den här artikeln kontrollerar du att du har följande förutsättningar:
En Azure Mašinsko učenje-arbetsyta och en beräkningsinstans. Om du inte har dessa resurser och vill skapa dem använder du stegen i artikeln Snabbstart: Skapa arbetsyteresurser .
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 Mašinsko učenje-arbetsytan eller en anpassad roll som tillåter Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Mer information finns i Hantera åtkomst till en Azure Mašinsko učenje-arbetsyta.
Kommentar
Även om Azure CLI- och CLI-tillägget för maskininlärning används i de här stegen är de inte huvudfokus. de används mer som verktyg, skickar mallar till Azure och kontrollerar statusen för malldistributioner.
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 podsistem za Linux.
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 Mašinsko učenje-arbetsytan eller en anpassad roll som tillåter Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Mer information finns i Hantera åtkomst till en Azure Mašinsko učenje-arbetsyta.
Se till att du har tillräckligt med kvoter för virtuella datorer (VM) allokerade för distribution. Azure Mašinsko učenje reserverar 20 % av dina beräkningsresurser för att utföra uppgraderingar på vissa VM-SKU:er. Om du till exempel begär 10 instanser i en distribution måste du ha en kvot på 12 för varje antal kärnor för den virtuella datorns SKU. Om du inte tar hänsyn till de extra beräkningsresurserna resulterar det i ett fel. Det finns vissa VM-SKU:er som är undantagna från den extra kvotreservationen. Mer information om kvotallokering finns i kvotallokering för virtuella datorer för distribution.
Du kan också använda kvoten från Azure Mašinsko učenje delade kvotpool under en begränsad tid. Azure Mašinsko učenje tillhandahåller en delad kvotpool från vilken användare i olika regioner kan komma åt kvoten för att utföra testning under en begränsad tid, beroende på tillgänglighet.
När du använder studion för att distribuera Llama-2-, Phi-, Nemotron-, Mistral-, Dolly- och Deci-DeciLM-modeller från modellkatalogen till en hanterad onlineslutpunkt kan du med Azure Mašinsko učenje få åtkomst till dess delade kvotpool under en kort tid så att du kan utföra testning. Mer information om den delade kvotpoolen finns i Azure Mašinsko učenje delad kvot.
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>
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/ .
Arbetsytan är resursen på den översta nivån för Azure Mašinsko učenje, vilket ger en central plats där du kan arbeta med alla artefakter som du skapar när du använder Azure Mašinsko učenje. I det här avsnittet ansluter du till arbetsytan där du ska utföra distributionsuppgifter. Om du vill följa med öppnar du anteckningsboken online-endpoints-simple-deployment.ipynb .
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
Kommentar
Om du använder Kubernetes onlineslutpunkt importerar KubernetesOnlineEndpoint du klassen och KubernetesOnlineDeployment från azure.ai.ml.entities biblioteket.
Konfigurera information om arbetsytan och få ett handtag till arbetsytan:
För att ansluta till en arbetsyta behöver du identifierarparametrar – en prenumeration, en resursgrupp och ett arbetsytenamn. Du använder den här informationen i MLClient från azure.ai.ml för att få ett handtag till den nödvändiga Azure-Mašinsko učenje-arbetsytan. I det här exemplet används standardautentiseringen för Azure.
# 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
)
Om du har Git installerat på den lokala datorn kan du följa anvisningarna för att klona exempellagringsplatsen. Annars följer du anvisningarna för att ladda ned filer från exempellagringsplatsen.
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/cli/endpoints/online/model-1
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.
Ladda ned filer från exempellagringsplatsen
Om du klonade exempellagringsplatsen har den lokala datorn redan kopior av filerna för det här exemplet och du kan gå vidare till nästa avsnitt. Om du inte klonade lagringsplatsen kan du ladda ned den till den lokala datorn.
Gå till <> knappen Kod på sidan och välj sedan Ladda ned ZIP på fliken Lokal .
Leta upp mappen /cli/endpoints/online/model-1/model och filen /cli/endpoints/online/model-1/onlinescoring/score.py.
Ange miljövariabler
Ange följande miljövariabler som de används i exemplen i den här artikeln. Ersätt värdena med ditt Azure-prenumerations-ID, Den Azure-region där din arbetsyta finns, resursgruppen som innehåller arbetsytan och namnet på arbetsytan:
export SUBSCRIPTION_ID="your Azure subscription ID"
export LOCATION="Azure region where your workspace is located"
export RESOURCE_GROUP="Azure resource group that contains your workspace"
export WORKSPACE="Azure Machine Learning workspace name"
Ett par mallexempel kräver att du laddar upp filer till Azure Blob Store för din arbetsyta. Följande steg frågar arbetsytan och lagrar den här informationen i miljövariabler som används i exemplen:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
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.
Definiera slutpunkten
Om du vill definiera en onlineslutpunkt anger du slutpunktsnamnet och autentiseringsläget. Mer information om hanterade onlineslutpunkter finns i Onlineslutpunkter.
Kör följande kommando för att ange slutpunktsnamnet. Ersätt YOUR_ENDPOINT_NAME med ett namn som är unikt i Azure-regionen. Mer information om namngivningsreglerna finns i slutpunktsgränser.
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 :
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änd aml_token för Azure Mašinsko učenje tokenbaserad autentisering. Använd aad_token för Microsoft Entra-tokenbaserad autentisering (förhandsversion). Mer information om autentisering finns i Autentisera klienter för onlineslutpunkter.
Konfigurera en slutpunkt
Definiera först namnet på onlineslutpunkten och konfigurera sedan slutpunkten.
Slutpunktsnamnet måste vara unikt i Azure-regionen. Mer information om namngivningsreglerna finns i slutpunktsgränser.
# Define an endpoint name
endpoint_name = "my-endpoint"
# Example way to define a random name
import datetime
endpoint_name = "endpt-" + datetime.datetime.now().strftime("%m%d%H%M%f")
# create an online endpoint
endpoint = ManagedOnlineEndpoint(
name = endpoint_name,
description="this is a sample endpoint",
auth_mode="key"
)
Den tidigare koden använder key för nyckelbaserad autentisering. Om du vill använda Azure Mašinsko učenje tokenbaserad autentisering använder du aml_token. Om du vill använda Microsoft Entra-tokenbaserad autentisering (förhandsversion) använder du aad_token. Mer information om autentisering finns i Autentisera klienter för onlineslutpunkter.
Konfigurera en slutpunkt
När du distribuerar till Azure från studion skapar du en slutpunkt och en distribution att lägga till i den. Då uppmanas du att ange namn för slutpunkten och distributionen.
Ange ett slutpunktsnamn
Kör följande kommando för att ange slutpunktsnamnet. Ersätt YOUR_ENDPOINT_NAME med ett namn som är unikt i Azure-regionen. Mer information om namngivningsreglerna finns i slutpunktsgränser.
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. I det här exemplet distribuerar du en scikit-learn-modell som utför regression och använder ett bedömningsskript score.py för att köra modellen på en viss indatabegäran.
Mer information om nyckelattributen för en distribution finns i Onlinedistributioner.
Konfigurera en distribution
Distributionskonfigurationen använder platsen för den modell som du vill distribuera.
Filen blue-deployment.yml anger följande distributionsattribut:
model – anger modellegenskaperna infogade med hjälp av path (var du kan ladda upp filer från). CLI laddar automatiskt upp modellfilerna och registrerar modellen med ett automatiskt genererat namn.
environment – Med hjälp av infogade definitioner som inkluderar var du ska ladda upp filer från laddar CLI automatiskt upp conda.yaml filen och registrerar miljön. Senare, för att skapa miljön, använder distributionen image (i det här exemplet är mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latestdet ) för basavbildningen och beroendena conda_file installeras ovanpå basavbildningen.
code_configuration – 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-slutpunkter i stället för hanterade onlineslutpunkter som beräkningsmål:
Skapa och koppla ditt Kubernetes-kluster som beräkningsmål till din Azure Mašinsko učenje-arbetsyta med hjälp av Azure Mašinsko učenje 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 compute 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 en Kubernetes-distribution.
Alla kommandon som används i den här artikeln för hanterade onlineslutpunkter gäller även för Kubernetes-slutpunkter, förutom följande funktioner som inte gäller för Kubernetes-slutpunkter:
Model – anger modellegenskaperna infogade med hjälp av path (var du kan ladda upp filer från). SDK laddar automatiskt upp modellfilerna och registrerar modellen med ett automatiskt genererat namn.
Environment – Med hjälp av infogade definitioner som inkluderar var du ska ladda upp filer från laddar SDK automatiskt upp conda.yaml filen och registrerar miljön. Senare, för att skapa miljön, använder distributionen image (i det här exemplet är mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latestdet ) för basavbildningen och beroendena conda_file installeras ovanpå basavbildningen.
CodeConfiguration – Under distributionen laddas de lokala filerna, till exempel Python-källan för bedömningsmodellen, upp från utvecklingsmiljön.
När du distribuerar till Azure skapar du en slutpunkt och en distribution att lägga till i den. Då uppmanas du att ange namn för slutpunkten och distributionen.
Bedömningsskriptet som anges i code_configuration.scoring_script måste ha en init() funktion och en run() funktion.
Bedömningsskriptet måste ha en init() funktion och en run() funktion.
Bedömningsskriptet måste ha en init() funktion och en run() funktion.
Bedömningsskriptet måste ha en init() funktion och en run() funktion. I den här artikeln används filen score.py.
När du använder en mall för distribution måste du först ladda upp bedömningsfilerna till ett Azure Blob Store och sedan registrera den:
Följande kod använder Azure CLI-kommandot az storage blob upload-batch för att ladda upp bedömningsfilerna:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/score -s cli/endpoints/online/model-1/onlinescoring --account-name $AZURE_STORAGE_ACCOUNT
Följande kod registrerar koden med hjälp av en mall:
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/code-version.json \
--parameters \
workspaceName=$WORKSPACE \
codeAssetName="score-sklearn" \
codeUri="https://$AZURE_STORAGE_ACCOUNT.blob.core.windows.net/$AZUREML_DEFAULT_CONTAINER/score"
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 visas i den här score.py filen).
Funktionen run() anropas varje gång slutpunkten anropas och den gör den faktiska bedömningen och förutsägelsen. I den här score.py filen run() extraherar funktionen data från en JSON-indata, anropar scikit-learn-modellens predict() metod och returnerar sedan förutsägelseresultatet.
Distribuera och felsöka lokalt med hjälp av en lokal slutpunkt
Vi rekommenderar starkt att du testkör slutpunkten lokalt för att verifiera och felsöka koden och konfigurationen innan du distribuerar till Azure. Azure CLI och Python SDK stöder lokala slutpunkter och distributioner, medan Azure Mašinsko učenje studio- och ARM-mall 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 Mašinsko učenje http-server python-paket 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.
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.
Anropa slutpunkten för att poängsätta modellen med hjälp invoke av kommandot 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.
Anropa slutpunkten för att poängsätta modellen med hjälp invoke av kommandot och skicka frågeparametrar som lagras i en JSON-fil.
Om du vill använda en REST-klient (t.ex. curl) måste du ha bedömnings-URI:n. Kör följande kod för att hämta bedömnings-URI:n. Leta upp attributet i scoring_uri de returnerade data.
Studion stöder inte lokala slutpunkter. Se flikarna Azure CLI eller Python för steg för att testa slutpunkten lokalt.
Mallen stöder inte lokala slutpunkter. Se flikarna Azure CLI eller Python för steg för att testa slutpunkten lokalt.
Distribuera din onlineslutpunkt till Azure
Distribuera sedan din onlineslutpunkt till Azure. Som bästa praxis för produktion rekommenderar vi att du registrerar den modell och miljö som du ska använda i distributionen.
Registrera din modell och miljö
Vi rekommenderar att du registrerar din modell och miljö innan du distribuerar till Azure så att du kan ange deras registrerade namn och versioner under distributionen. Genom att registrera dina tillgångar kan du återanvända dem utan att behöva ladda upp dem varje gång du skapar distributioner, vilket ökar reproducerbarheten och spårbarheten.
Kommentar
Till skillnad från distribution till Azure stöder inte lokal distribution användning av registrerade modeller och miljöer. I stället använder lokal distribution lokala modellfiler och använder miljöer endast med lokala filer.
För distribution till Azure kan du använda antingen lokala eller registrerade tillgångar (modeller och miljöer). I det här avsnittet i artikeln använder distributionen till Azure registrerade tillgångar, men du har möjlighet att använda lokala tillgångar i stället. Ett exempel på en distributionskonfiguration som laddar upp lokala filer som ska användas för lokal distribution finns i Konfigurera en distribution.
Om du vill registrera modellen och miljön använder du 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.
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes
file_model = Model(
path="../../model-1/model/",
type=AssetTypes.CUSTOM_MODEL,
name="my-model",
description="Model created from local file.",
)
ml_client.models.create_or_update(file_model)
Registrera miljön:
from azure.ai.ml.entities import Environment
env_docker_conda = Environment(
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04",
conda_file="../../model-1/environment/conda.yaml",
name="my-env",
description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env_docker_conda)
En modellregistrering är en logisk entitet på arbetsytan som kan innehålla en enskild modellfil eller en katalog med flera filer. Som bästa praxis för produktion bör du registrera modellen och miljön. Innan du skapar slutpunkten och distributionen i den här artikeln bör du registrera modellmappen som innehåller modellen.
Följ dessa steg för att registrera exempelmodellen:
I det vänstra navigeringsfältet väljer du sidan Modeller .
Välj Registrera och välj sedan Från lokala filer.
Välj Ospecificerad typ för modelltypen.
Välj Bläddra och välj Bläddra mapp.
\azureml-examples\cli\endpoints\online\model-1\model Välj mappen från den lokala kopian av lagringsplatsen som du klonade eller laddade ned tidigare. När du uppmanas till det väljer du Ladda upp och väntar tills uppladdningen har slutförts.
Välj Nästa när mappuppladdningen har slutförts.
Ange ett eget namn för modellen. Stegen i den här artikeln förutsätter att modellen heter model-1.
Välj Nästa och sedan Registrera för att slutföra registreringen.
I det vänstra navigeringsfältet väljer du sidan Miljöer .
Välj Skapa.
På sidan Inställningar anger du ett namn, till exempel my-env för miljön.
För "Välj miljökälla" väljer du Använd befintlig docker-avbildning med valfri conda-källa.
Välj Nästa för att gå till sidan Anpassa.
Kopiera innehållet i \azureml-examples\cli\endpoints\online\model-1\environment\conda.yaml filen från den lokala kopian av lagringsplatsen som du klonade eller laddade ned tidigare.
Om du vill registrera modellen med hjälp av en mall måste du först ladda upp modellfilen till ett Azure Blob Store. I följande exempel används az storage blob upload-batch kommandot för att ladda upp en fil till standardlagringen för din arbetsyta:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s cli/endpoints/online/model-1/model --account-name $AZURE_STORAGE_ACCOUNT
När du har laddat upp filen använder du mallen för att skapa en modellregistrering. I följande exempel innehåller parametern modelUri sökvägen till modellen:
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/model-version.json \
--parameters \
workspaceName=$WORKSPACE \
modelAssetName="sklearn" \
modelUri="azureml://subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/workspaces/$WORKSPACE/datastores/$AZUREML_DEFAULT_DATASTORE/paths/model/sklearn_regression_model.pkl"
En del av miljön är en conda-fil som anger de modellberoenden som krävs för att vara värd för modellen. I följande exempel visas hur du läser innehållet i conda-filen i miljövariabler:
I följande exempel visas hur du använder mallen för att registrera miljön. Innehållet i conda-filen från föregående steg skickas till mallen med hjälp av parametern condaFile :
Använd registrerade tillgångar (modell och miljö) i distributionsdefinitionen. Följande kodfragment visar endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml filen med alla nödvändiga indata för att konfigurera en distribution:
När du distribuerar från studion skapar du en slutpunkt och en distribution att lägga till i den. Då uppmanas du att ange namn för slutpunkten och distributionen.
Du kan ange typer och avbildningar för CPU- eller GPU-instanser i distributionsdefinitionen för både lokal distribution och distribution till Azure.
Distributionsdefinitionen i blue-deployment-with-registered-assets.yml-filen använde en generell typinstans Standard_DS3_v2 och en docker-avbildning mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latestsom inte är GPU. För GPU-beräkning väljer du en SKU för GPU-beräkningstyp och en GPU Docker-avbildning.
Du kan ange typer och avbildningar för CPU- eller GPU-instanser i distributionskonfigurationen för både lokal distribution och distribution till Azure.
Tidigare konfigurerade du en distribution som använde en instans av generell typ Standard_DS3_v2 och en docker-avbildning mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latestsom inte är GPU. För GPU-beräkning väljer du en SKU för GPU-beräkningstyp och en GPU Docker-avbildning.
När du använder studion för att distribuera till Azure uppmanas du att ange beräkningsegenskaperna (instanstyp och antal instanser) och den miljö som ska användas för distributionen.
Föregående registrering av miljön anger en docker-avbildning mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04 som inte är GPU genom att skicka värdet till mallen environment-version.json med hjälp av parametern dockerImage . För en GPU-beräkning anger du ett värde för en GPU Docker-avbildning till mallen (med hjälp av parametern dockerImage ) och anger en SKU för GPU-beräkningstypen till mallen online-endpoint-deployment.json (med hjälp av parametern skuName ).
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Skapa distributionen med namnet blue under slutpunkten.
az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml --all-traffic
Det kan ta upp till 15 minuter att skapa distributionen, beroende på om den underliggande miljön eller avbildningen skapas för första gången. Efterföljande distributioner som använder samma miljö bearbetas snabbare.
Dricks
Om du föredrar att inte blockera CLI-konsolen kan du lägga till flaggan --no-wait i kommandot. Det här alternativet stoppar dock den interaktiva visningen av distributionsstatusen.
Viktigt!
Flaggan --all-traffic i koden az ml online-deployment create som används för att skapa distributionen 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 dirigera trafik till den nya distributionen via ett explicit kommando för produktion. Exempel: az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100"
Skapa slutpunkten:
Med hjälp av du endpoint definierade tidigare och du MLClient skapade tidigare kan du nu skapa slutpunkten på arbetsytan. Det här kommandot startar skapandet av slutpunkten och returnerar ett bekräftelsesvar medan skapandet av slutpunkten fortsätter.
Med hjälp av blue_deployment_with_registered_assets det som du definierade tidigare och du MLClient skapade tidigare kan du nu skapa distributionen på arbetsytan. Det här kommandot startar distributionen och returnerar ett bekräftelsesvar medan distributionen fortsätter.
Om du föredrar att inte blockera Python-konsolen kan du lägga till flaggan no_wait=True i parametrarna. Det här alternativet stoppar dock den interaktiva visningen av distributionsstatusen.
Skapa en hanterad onlineslutpunkt och distribution
Använd studion för att skapa en hanterad onlineslutpunkt direkt i webbläsaren. När du skapar en hanterad onlineslutpunkt i studion måste du definiera en inledande distribution. Du kan inte skapa en tom hanterad onlineslutpunkt.
Ett sätt att skapa en hanterad onlineslutpunkt i studion är från sidan Modeller . Den här metoden ger också ett enkelt sätt att lägga till en modell i en befintlig hanterad onlinedistribution. Så här distribuerar du modellen med namnet model-1 som du registrerade tidigare i avsnittet Registrera din modell och miljö :
Välj Nästa tills du kommer till sidan "Distribution". Här kan du växla Application Insights-diagnostik till Aktiverad så att du kan visa grafer över slutpunktens aktiviteter i studion senare och analysera mått och loggar med Application Insights.
Välj Nästa för att gå till sidan Kod + miljö. Välj följande alternativ här:
Välj ett bedömningsskript för slutsatsdragning: Bläddra och välj \azureml-examples\cli\endpoints\online\model-1\onlinescoring\score.py filen från lagringsplatsen som du klonade eller laddade ned tidigare.
Välj miljöavsnitt : Välj Anpassade miljöer och välj sedan den my-env:1-miljö som du skapade tidigare.
Välj Nästa, acceptera standardvärden tills du uppmanas att skapa distributionen.
Granska distributionsinställningarna och välj knappen Skapa .
Du kan också skapa en hanterad onlineslutpunkt från sidan Slutpunkter i studion.
I det vänstra navigeringsfältet väljer du sidan Slutpunkter.
Välj + Skapa.
Den här åtgärden öppnar ett fönster där du kan välja din modell och ange information om slutpunkten och distributionen. Ange inställningar för slutpunkten och distributionen enligt beskrivningen tidigare och skapa sedan distributionen.
Visa en lista över alla slutpunkter i arbetsytan i tabellformat med hjälp list av metoden:
for endpoint in ml_client.online_endpoints.list():
print(endpoint.name)
Metoden returnerar en lista (iterator) över ManagedOnlineEndpoint entiteter.
Du kan få mer information genom att ange fler parametrar. Du kan till exempel mata ut listan över slutpunkter som en tabell:
print("Kind\tLocation\tName")
print("-------\t----------\t------------------------")
for endpoint in ml_client.online_endpoints.list():
print(f"{endpoint.kind}\t{endpoint.location}\t{endpoint.name}")
Visa hanterade onlineslutpunkter
Du kan visa alla dina hanterade onlineslutpunkter på sidan Slutpunkter . Gå till slutpunktens informationssida för att hitta viktig information, inklusive slutpunkts-URI, status, testverktyg, aktivitetsövervakare, distributionsloggar och exempelförbrukningskod:
I det vänstra navigeringsfältet väljer du Slutpunkter. Här kan du se en lista över alla slutpunkter på arbetsytan.
(Valfritt) Skapa ett filter för beräkningstyp för att endast visa hanterade beräkningstyper.
Välj ett slutpunktsnamn för att visa slutpunktens informationssida.
Dricks
Även om mallar är användbara för att distribuera resurser kan de inte användas för att lista, visa eller anropa resurser. Använd Azure CLI, Python SDK eller studio för att utföra dessa åtgärder. Följande kod använder Azure CLI.
show Använd kommandot för att visa information i provisioning_state för slutpunkten och distributionen:
az ml online-endpoint show -n $ENDPOINT_NAME
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.
Du kan visa loggutdata med hjälp get_logs av metoden:
Som standard hämtas loggarna från inferensservercontainern. Lägg till container_type="storage-initializer" alternativet om du vill se loggar från containern för lagringsinitieraren. Mer information om distributionsloggar finns i Hämta containerloggar.
Om du vill visa loggutdata väljer du fliken Loggar på slutpunktens sida. Om du har flera distributioner i slutpunkten använder du listrutan för att välja den distribution vars logg du vill se.
Som standard hämtas loggar från slutsatsdragningsservern. Om du vill se loggar från containern för lagringsinitiering använder du Azure CLI eller Python SDK (se varje flik för mer information). Loggar från containern för lagringsinitieraren innehåller information om huruvida kod- och modelldata har laddats ned till containern. Mer information om distributionsloggar finns i Hämta containerloggar.
Dricks
Även om mallar är användbara för att distribuera resurser kan de inte användas för att lista, visa eller anropa resurser. Använd Azure CLI, Python SDK eller studio för att utföra dessa åtgärder. Följande kod använder Azure CLI.
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
Använd 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
Hämta 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 om hur du hanterar auktorisering för arbetsytor finns i Hantera åtkomst till en Azure Mašinsko učenje-arbetsyta.
ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)
Använd 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 du använder show och get-credentials kommandon för att hämta autentiseringsuppgifterna. Observera också att du använder --query flaggan för att endast filtrera de attribut som behövs. Mer information om flaggan finns i --query Fråga azure CLI-kommandoutdata.
Om du vill se anropsloggarna kör du get-logs igen.
Använd det som skapades MLClient tidigare och hämta ett handtag till slutpunkten. Slutpunkten kan sedan anropas med hjälp av invoke kommandot 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 .
# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
endpoint_name=endpoint_name,
deployment_name="blue",
request_file="../model-1/sample-request.json",
)
Använd fliken Test på slutpunktens informationssida för att testa din hanterade onlinedistribution. Ange exempelindata och visa resultatet.
Välj fliken Test på slutpunktens informationssida.
Använd listrutan för att välja den distribution som du vill testa.
Även om mallar är användbara för att distribuera resurser kan de inte användas för att lista, visa eller anropa resurser. Använd Azure CLI, Python SDK eller studio för att utföra dessa åtgärder. Följande kod använder Azure CLI.
Använd 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 cli/endpoints/online/model-1/sample-request.json
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ö.
Ändra den sista raden i init() funktionen: Efter logging.info("Init complete")lägger du till logging.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-with-registered-assets.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-kommandot update 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 upp instance_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.
Eftersom du har ändrat init() funktionen, som 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.
Om du vill uppdatera koden, modellen eller miljön uppdaterar du konfigurationen och kör MLClientonline_deployments.begin_create_or_update sedan -metoden för att skapa eller uppdatera en distribution.
Kommentar
Om du uppdaterar antalet instanser (för att skala distributionen) tillsammans med andra modellinställningar (till exempel kod, modell eller miljö) i en enda begin_create_or_update metod 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 begin_create_or_update det fungerar:
Eftersom du har ändrat init() funktionen, som körs när slutpunkten skapas eller uppdateras, visas meddelandet Updated successfully i loggarna. Hämta loggarna genom att köra:
Metoden begin_create_or_update fungerar också med lokala distributioner. Använd samma metod med local=True flaggan.
För närvarande gör studio att du bara kan göra uppdateringar av instansantalet för en distribution. Använd följande instruktioner för att skala upp eller ned en enskild distribution genom att justera antalet instanser:
Öppna sidan Information för slutpunkten och leta reda på kortet för den distribution som du vill uppdatera.
Uppdatera antalet instanser som är associerade med distributionen. Du kan välja mellan Standard eller Målanvändning för "Distributionsskalningstyp".
Om du väljer Standard anger du även ett numeriskt värde för antalet instanser.
Om du väljer Målanvändning kan du ange värden som ska användas för parametrar vid automatisk skalning av distributionen.
Välj Uppdatera för att slutföra uppdateringen av antalet instanser för distributionen.
Det finns för närvarande inget alternativ för att uppdatera distributionen med hjälp av en ARM-mall.
Kommentar
Uppdateringen av distributionen i det här avsnittet ä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.
Om du inte använder slutpunkten och distributionen bör du ta bort dem. Genom att ta bort slutpunkten tar du också bort alla dess underliggande distributioner.