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:

  • 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 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. Information om hur du visar ökningar av användnings- och begärandekvoter finns i Visa din användning och dina kvoter i Azure-portalen.

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.

Kommentar

  • 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 av path. Modellfiler laddas upp och registreras automatiskt med ett automatiskt genererat namn.
  • environment – I det här exemplet har vi infogade definitioner som innehåller path. Vi använder environment.docker.image för avbildningen. Beroendena conda_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:

  1. Skapa och koppla kubernetes-klustret 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 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:latestsom 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_DIRidentifiera 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:

A screenshot showing a folder structure containing multiple models.

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:

A screenshot of the folder structure of the storage location for multiple models.

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:

A screenshot of the folder structure showing the model artifacts of the registered model.

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:

A screenshot of the folder structure showing multiple models.

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

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 --queryfinns 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:

  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
    

    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.
  5. 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.

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