Een machine learning-model implementeren en beoordelen met behulp van een online-eindpunt
VAN TOEPASSING OP:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)
In dit artikel leert u hoe u uw model implementeert op een online-eindpunt voor gebruik in realtime deductie. U begint met het implementeren van een model op uw lokale computer om fouten op te sporen. Vervolgens implementeert en test u het model in Azure. U leert ook hoe u de implementatielogboeken kunt bekijken en de SLA (Service Level Agreement) kunt bewaken. Aan het einde van dit artikel hebt u een schaalbaar HTTPS/REST-eindpunt dat u kunt gebruiken voor realtime deductie.
Online-eindpunten zijn eindpunten die worden gebruikt voor realtime deductie. Er zijn twee soorten online-eindpunten: beheerde online-eindpunten en Kubernetes-online-eindpunten. Zie Wat zijn Azure Machine Learning-eindpunten voor meer informatie over eindpunten en verschillen tussen beheerde online-eindpunten en Kubernetes Online-eindpunten.
Met beheerde online-eindpunten kunt u uw ML-modellen op een kant-en-klare manier implementeren. Beheerde online-eindpunten werken met krachtige CPU- en GPU-machines in Azure op een schaalbare, volledig beheerde manier. Beheerde online-eindpunten zorgen voor het leveren, schalen, beveiligen en bewaken van uw modellen, waardoor u geen last meer hebt van de overhead van het instellen en beheren van de onderliggende infrastructuur.
Het belangrijkste voorbeeld in dit document maakt gebruik van beheerde online-eindpunten voor implementatie. Als u In plaats daarvan Kubernetes wilt gebruiken, raadpleegt u de notities in dit document die inline zijn met de discussie over beheerde online-eindpunten.
Vereisten
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidige)
Voordat u de stappen in dit artikel volgt, moet u ervoor zorgen dat u over de volgende vereisten beschikt:
De Azure CLI en de
ml
extensie voor de Azure CLI. Zie De CLI (v2) installeren, instellen en gebruiken voor meer informatie.Belangrijk
In de CLI-voorbeelden in dit artikel wordt ervan uitgegaan dat u de Bash-shell (of compatibele) shell gebruikt. Bijvoorbeeld vanuit een Linux-systeem of Windows-subsysteem voor Linux.
Een Azure Machine Learning-werkruimte. Als u er nog geen hebt, gebruikt u de stappen in de installatie, het instellen en gebruiken van de CLI (v2) om er een te maken.
Op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) wordt gebruikt om toegang te verlenen tot bewerkingen in Azure Machine Learning. Als u de stappen in dit artikel wilt uitvoeren, moet aan uw gebruikersaccount de rol eigenaar of inzender voor de Azure Machine Learning-werkruimte zijn toegewezen, of een aangepaste rol die toestaat
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
. Als u Studio gebruikt om online-eindpunten/implementaties te maken/beheren, hebt u een extra machtiging Microsoft.Resources/deployments/write nodig van de eigenaar van de resourcegroep. Zie Toegang tot een Azure Machine Learning-werkruimte beheren voor meer informatie.(Optioneel) Als u lokaal wilt implementeren, moet u Docker Engine installeren op uw lokale computer. We raden deze optie ten zeerste aan , dus het is eenvoudiger om problemen op te sporen.
Quotumtoewijzing voor virtuele machines voor implementatie
Voor beheerde online-eindpunten reserveert Azure Machine Learning 20% van uw rekenresources voor het uitvoeren van upgrades op sommige VM-SKU's. Als u een bepaald aantal exemplaren voor deze VM-SKU's in een implementatie aanvraagt, moet u een quotum hebben dat ceil(1.2 * number of instances requested for deployment) * number of cores for the VM SKU
beschikbaar is om te voorkomen dat er een fout optreedt. Als u bijvoorbeeld 10 exemplaren van een Standard_DS3_v2 VM aanvraagt (die wordt geleverd met 4 kernen) in een implementatie, moet u een quotum hebben voor 48 kernen (12 instances * 4 cores
) beschikbaar. Dit extra quotum is gereserveerd voor door het systeem geïniteerde bewerkingen, zoals upgrade van het besturingssysteem, VM-herstel, enzovoort, en er worden geen kosten in rekening gebracht, tenzij een dergelijke bewerking wordt uitgevoerd. Zie Uw gebruiks- en quotaverhogingen weergeven in Azure Portal om uw gebruik en quota te bekijken. Als u de kosten voor het uitvoeren van beheerde online-eindpunten wilt bekijken, raadpleegt u De kosten voor het beheerde online-eindpunt weergeven. Er zijn bepaalde VM-SKU's die zijn uitgesloten van extra quotumreservering. Als u de volledige lijst wilt bekijken, raadpleegt u de SKU-lijst met beheerde online-eindpunten.
Azure Machine Learning biedt een gedeelde quotumgroep waaruit alle gebruikers toegang hebben tot het quotum om gedurende een beperkte tijd tests uit te voeren. Wanneer u de studio gebruikt voor het implementeren van Llama-2, Phi, Nemotron, Mistral, Dolly en Deci-DeciLM-modellen uit de modelcatalogus naar een beheerd online-eindpunt, kunt u met Azure Machine Learning gedurende korte tijd toegang krijgen tot dit gedeelde quotum.
Zie Basismodellen implementeren met behulp van de studio voor meer informatie over het gebruik van het gedeelde quotum voor online-eindpuntimplementatie.
Uw systeem voorbereiden
Omgevingsvariabelen instellen
Als u de standaardinstellingen voor de Azure CLI nog niet hebt ingesteld, slaat u de standaardinstellingen op. Voer deze code uit om te voorkomen dat de waarden voor uw abonnement, werkruimte en resourcegroep meerdere keren worden doorgegeven:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
De opslagplaats met voorbeelden klonen
Als u dit artikel wilt volgen, kloont u eerst de opslagplaats met voorbeelden (azureml-examples). Voer vervolgens de volgende code uit om naar de map van cli/
de opslagplaats te gaan:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli
Tip
Gebruik --depth 1
dit om alleen de meest recente doorvoering naar de opslagplaats te klonen, waardoor de bewerking minder lang duurt.
De opdrachten in deze zelfstudie bevinden zich in de bestanden deploy-local-endpoint.sh
en deploy-managed-online-endpoint.sh
in de cli
map en de YAML-configuratiebestanden bevinden zich in de endpoints/online/managed/sample/
submap.
Notitie
De YAML-configuratiebestanden voor Online Kubernetes-eindpunten bevinden zich in de endpoints/online/kubernetes/
submap.
Het eindpunt definiëren
Als u een eindpunt wilt definiëren, moet u het volgende opgeven:
- Eindpuntnaam: de naam van het eindpunt. Deze moet uniek zijn in de Azure-regio. Zie eindpuntlimieten voor meer informatie over de naamgevingsregels.
- Verificatiemodus: de verificatiemethode voor het eindpunt. Kies tussen verificatie op basis van sleutels en verificatie op basis van azure Machine Learning-tokens. Een sleutel verloopt niet, maar een token verloopt wel. Zie Verifiëren bij een online-eindpunt voor meer informatie over verificatie.
- U kunt eventueel een beschrijving en tags toevoegen aan uw eindpunt.
Een eindpuntnaam instellen
Als u de naam van uw eindpunt wilt instellen, voert u de volgende opdracht uit (vervang door YOUR_ENDPOINT_NAME
een unieke naam).
Voer voor Linux deze opdracht uit:
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
Het eindpunt configureren
In het volgende fragment ziet u de eindpunten/online/managed/sample/endpoint.yml bestand:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key
De verwijzing voor de YAML-indeling van het eindpunt wordt beschreven in de volgende tabel. Zie de YAML-referentie voor het online-eindpunt voor meer informatie over het opgeven van deze kenmerken. Zie limieten voor online-eindpunten voor informatie over limieten met betrekking tot beheerde eindpunten.
Toets | Beschrijving |
---|---|
$schema |
(Optioneel) Het YAML-schema. Als u alle beschikbare opties in het YAML-bestand wilt zien, kunt u het schema bekijken in het voorgaande codefragment in een browser. |
name |
De naam van het eindpunt. |
auth_mode |
Gebruiken key voor verificatie op basis van sleutels. Gebruiken aml_token voor verificatie op basis van tokens op basis van Azure Machine Learning. Gebruik de az ml online-endpoint get-credentials opdracht om het meest recente token op te halen. |
De implementatie definiëren
Een implementatie is een set resources die vereist is voor het hosten van het model dat de werkelijke deductie uitvoert. Als u een model wilt implementeren, moet u het volgende hebben:
- Modelbestanden (of de naam en versie van een model dat al in uw werkruimte is geregistreerd). In het voorbeeld hebben we een scikit-learn-model dat regressie uitvoert.
- Een scorescript, dat wil gezegd, code waarmee het model wordt uitgevoerd op een bepaalde invoeraanvraag. Het scorescript ontvangt gegevens die zijn verzonden naar een geïmplementeerde webservice en geeft deze door aan het model. Het script voert vervolgens het model uit en retourneert de reactie op de client. Het scorescript is specifiek voor uw model en moet inzicht hebben in de gegevens die het model als invoer verwacht en als uitvoer retourneert. In dit voorbeeld hebben we een score.py-bestand .
- Een omgeving waarin uw model wordt uitgevoerd. De omgeving kan een Docker-installatiekopieën zijn met Conda-afhankelijkheden of een Dockerfile.
- Instellingen om het exemplaartype en de schaalcapaciteit op te geven.
In de volgende tabel worden de belangrijkste kenmerken van een implementatie beschreven:
Kenmerk | Beschrijving |
---|---|
Naam | De naam van de implementatie. |
Naam Eeindpunt | De naam van het eindpunt voor het maken van de implementatie onder. |
Model | Het model dat moet worden gebruikt voor de implementatie. Deze waarde kan een verwijzing zijn naar een bestaand versiemodel in de werkruimte of een inline modelspecificatie. |
Codepad | Het pad naar de map in de lokale ontwikkelomgeving die alle Python-broncode bevat voor het scoren van het model. U kunt geneste mappen en pakketten gebruiken. |
Scorescript | Het relatieve pad naar het scorebestand in de broncodemap. Deze Python-code moet een init() functie en een run() functie hebben. De init() functie wordt aangeroepen nadat het model is gemaakt of bijgewerkt (u kunt deze bijvoorbeeld gebruiken om het model in het geheugen op te cachen). De run() functie wordt aangeroepen bij elke aanroep van het eindpunt om de werkelijke score en voorspelling uit te voeren. |
Omgeving | De omgeving voor het hosten van het model en de code. Deze waarde kan een verwijzing zijn naar een bestaande versieomgeving in de werkruimte of een inline-omgevingsspecificatie. |
Type instantie | De VM-grootte die moet worden gebruikt voor de implementatie. Zie de lijst met beheerde online-eindpunten voor SKU's voor de lijst met ondersteunde grootten. |
Aantal exemplaren | Het aantal exemplaren dat moet worden gebruikt voor de implementatie. Baseer de waarde op de workload die u verwacht. Voor hoge beschikbaarheid raden we u aan om de waarde ten minste 3 in te stellen op . We reserveren een extra 20% voor het uitvoeren van upgrades. Zie quotatoewijzing voor virtuele machines voor implementaties voor meer informatie. |
Waarschuwing
- De model- en containerinstallatiekopieën (zoals gedefinieerd in omgeving) kunnen op elk gewenst moment door de implementatie worden verwezen wanneer de exemplaren achter de implementatie beveiligingspatches en/of andere herstelbewerkingen doorlopen. Als u een geregistreerd model of containerinstallatiekopieën in Azure Container Registry hebt gebruikt voor implementatie en het model of de containerinstallatiekopieën hebt verwijderd, kunnen de implementaties die afhankelijk zijn van deze assets mislukken wanneer het opnieuw wordt bijgewerkt. Als u het model of de containerinstallatiekopieën hebt verwijderd, moet u ervoor zorgen dat de afhankelijke implementaties opnieuw worden gemaakt of bijgewerkt met een alternatief model of een containerinstallatiekopieën.
- Het containerregister waarnaar de omgeving verwijst, kan alleen privé zijn als de eindpuntidentiteit toegang heeft via Microsoft Entra-verificatie en Azure RBAC. Om dezelfde reden worden andere privé-Docker-registers dan Azure Container Registry niet ondersteund.
Een implementatie configureren
In het volgende fragment ziet u de eindpunten/online/managed/sample/blue-deployment.yml bestand, met alle vereiste invoer voor het configureren van een implementatie:
$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
Notitie
In het bestand blue-deployment.yml hebben we de volgende implementatiekenmerken opgegeven:
model
- In dit voorbeeld geven we de modeleigenschappen inline op met behulp van depath
. Modelbestanden worden automatisch geüpload en geregistreerd met een automatisch gegenereerde naam.environment
- In dit voorbeeld hebben we inlinedefinities die depath
. We gebruikenenvironment.docker.image
deze voor de installatiekopieën. Deconda_file
afhankelijkheden worden boven op de installatiekopieën geïnstalleerd.
Tijdens de implementatie worden de lokale bestanden, zoals de Python-bron voor het scoremodel, geüpload vanuit de ontwikkelomgeving.
Zie de YAML-referentie voor het online-eindpunt voor meer informatie over het YAML-schema.
Notitie
Kubernetes gebruiken in plaats van beheerde eindpunten als rekendoel:
- Maak en koppel uw Kubernetes-cluster als rekendoel aan uw Azure Machine Learning-werkruimte met behulp van Azure Machine Learning-studio.
- Gebruik het EINDPUNT YAML om Kubernetes te targeten in plaats van op de YAML van het beheerde eindpunt. U moet de YAML bewerken om de waarde te wijzigen van
target
de naam van uw geregistreerde rekendoel. U kunt deze deployment.yaml gebruiken met aanvullende eigenschappen die van toepassing zijn op de Kubernetes-implementatie.
Alle opdrachten die in dit artikel worden gebruikt (behalve de optionele SLA-bewaking en Azure Log Analytics-integratie) kunnen worden gebruikt met beheerde eindpunten of met Kubernetes-eindpunten.
Uw model en omgeving afzonderlijk registreren
In dit voorbeeld geven we inline de path
(waar bestanden moeten worden geüpload) op. De CLI uploadt automatisch de bestanden en registreert het model en de omgeving. Als best practice voor productie moet u het model en de omgeving registreren en de geregistreerde naam en versie afzonderlijk opgeven in de YAML. Gebruik het formulier model: azureml:my-model:1
of environment: azureml:my-env:1
.
Voor registratie kunt u de YAML-definities van model
en environment
in afzonderlijke YAML-bestanden extraheren en de opdrachten az ml model create
en az ml environment create
gebruiken. Voor meer informatie over deze opdrachten voert u de opdracht uit az ml model create -h
en az ml environment create -h
.
Zie Uw model registreren als een asset in Machine Learning met behulp van de CLI voor meer informatie over het registreren van uw model als een asset. Zie Azure Machine Learning-omgevingen beheren met de CLI & SDK (v2) voor meer informatie over het maken van een omgeving.
Verschillende typen CPU- en GPU-exemplaren en -installatiekopieën gebruiken
De voorgaande definitie in het bestand blue-deployment.yml maakt gebruik van een exemplaar voor algemeen gebruik Standard_DS3_v2
en een niet-GPU Docker-installatiekopie mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
. Kies voor GPU-rekenkracht een GPU-rekentype-SKU en een GPU Docker-installatiekopie.
Zie Beheerde online-eindpunten die vm-SKU's ondersteunen voor ondersteunde typen algemeen gebruik en GPU-exemplaren. Zie Basisinstallatiekopieën van Azure Machine Learning CPU en GPU voor een lijst met basisinstallatiekopieën van Azure Machine Learning.
Notitie
Als u Kubernetes wilt gebruiken in plaats van beheerde eindpunten als rekendoel, raadpleegt u Inleiding tot het Kubernetes-rekendoel.
Modelpad identificeren met betrekking tot AZUREML_MODEL_DIR
Wanneer u uw model implementeert in Azure Machine Learning, moet u de locatie opgeven van het model dat u wilt implementeren als onderdeel van uw implementatieconfiguratie. In Azure Machine Learning wordt het pad naar uw model bijgehouden met de AZUREML_MODEL_DIR
omgevingsvariabele. Door het modelpad te identificeren met betrekking tot AZUREML_MODEL_DIR
, kunt u een of meer modellen implementeren die lokaal zijn opgeslagen op uw computer of een model implementeren dat is geregistreerd in uw Azure Machine Learning-werkruimte.
Ter illustratie verwijzen we naar de volgende lokale mapstructuur voor de eerste twee gevallen waarin u één model implementeert of meerdere modellen implementeert die lokaal zijn opgeslagen:
Eén lokaal model gebruiken in een implementatie
Als u één model wilt gebruiken dat u op uw lokale computer in een implementatie hebt, geeft u de path
waarde op in de model
YAML van uw implementatie. Hier volgt een voorbeeld van de YAML-implementatie met het pad /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
Nadat u de implementatie hebt gemaakt, verwijst de omgevingsvariabele AZUREML_MODEL_DIR
naar de opslaglocatie in Azure waar uw model wordt opgeslagen. Bevat bijvoorbeeld /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1
het model sample_m1.pkl
.
In uw scorescript (score.py
) kunt u uw model laden (in dit voorbeeld sample_m1.pkl
) in de init()
functie:
def init():
model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "sample_m1.pkl")
model = joblib.load(model_path)
Meerdere lokale modellen gebruiken in een implementatie
Hoewel u met de Azure CLI, Python SDK en andere clienthulpprogramma's slechts één model per implementatie kunt opgeven in de implementatiedefinitie, kunt u nog steeds meerdere modellen in een implementatie gebruiken door een modelmap te registreren die alle modellen als bestanden of submappen bevat.
In de vorige voorbeeldmapstructuur ziet u dat er meerdere modellen in de models
map staan. In uw YAML-implementatie kunt u het pad naar de models
map als volgt opgeven:
$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
Nadat u de implementatie hebt gemaakt, verwijst de omgevingsvariabele AZUREML_MODEL_DIR
naar de opslaglocatie in Azure waar uw modellen worden opgeslagen. Bevat bijvoorbeeld /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1
de modellen en de bestandsstructuur.
In dit voorbeeld ziet de inhoud van de AZUREML_MODEL_DIR
map er als volgt uit:
Binnen uw scorescript (score.py
) kunt u uw modellen laden in de init()
functie. Met de volgende code wordt het sample_m1.pkl
model geladen:
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)
Zie Meerdere modellen implementeren in één implementatie (CLI-voorbeeld) en Meerdere modellen implementeren in één implementatie (SDK-voorbeeld) voor een voorbeeld van het implementeren van meerdere modellen in één implementatie.
Tip
Als u meer dan 1500 bestanden wilt registreren, kunt u overwegen de bestanden of submappen te comprimeren als .tar.gz bij het registreren van de modellen. Als u de modellen wilt gebruiken, kunt u de bestanden of submappen in de init()
functie uit het scorescript opheffen. Als u de modellen registreert, kunt u de azureml.unpack
eigenschap True
ook instellen op , zodat de bestanden of submappen automatisch worden gecomprimeerd. In beide gevallen vindt uncompressie eenmaal plaats in de initialisatiefase.
Modellen gebruiken die zijn geregistreerd in uw Azure Machine Learning-werkruimte in een implementatie
Als u een of meer modellen wilt gebruiken die zijn geregistreerd in uw Azure Machine Learning-werkruimte, geeft u in uw implementatie de naam op van de geregistreerde modellen in uw YAML-implementatie. Met de volgende YAML-implementatieconfiguratie wordt bijvoorbeeld de geregistreerde model
naam opgegeven als 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
Houd voor dit voorbeeld rekening met local-multimodel:3
de volgende modelartefacten, die kunnen worden weergegeven op het tabblad Modellen in de Azure Machine Learning-studio:
Nadat u de implementatie hebt gemaakt, verwijst de omgevingsvariabele AZUREML_MODEL_DIR
naar de opslaglocatie in Azure waar uw modellen worden opgeslagen. Bevat bijvoorbeeld /var/azureml-app/azureml-models/local-multimodel/3
de modellen en de bestandsstructuur. AZUREML_MODEL_DIR
verwijst naar de map met de hoofdmap van de modelartefacten.
Op basis van dit voorbeeld ziet de inhoud van de AZUREML_MODEL_DIR
map er als volgt uit:
Binnen uw scorescript (score.py
) kunt u uw modellen laden in de init()
functie. Laad bijvoorbeeld het diabetes.sav
model:
def init():
model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR"), "models", "diabetes", "1", "diabetes.sav")
model = joblib.load(model_path)
Inzicht in het scorescript
Tip
De indeling van het scorescript voor online-eindpunten is dezelfde indeling die wordt gebruikt in de vorige versie van de CLI en in de Python SDK.
Zoals eerder vermeld, moet het scorescript dat is opgegeven, code_configuration.scoring_script
een init()
functie en een run()
functie hebben.
In dit voorbeeld wordt het score.py-bestand gebruikt: 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()
De init()
functie wordt aangeroepen wanneer de container wordt geïnitialiseerd of gestart. Initialisatie vindt meestal kort nadat de implementatie is gemaakt of bijgewerkt. De init
functie is de plaats om logica te schrijven voor wereldwijde initialisatiebewerkingen, zoals het opslaan van het model in het geheugen (zoals in dit voorbeeld).
De run()
functie wordt aangeroepen voor elke aanroep van het eindpunt en voert de werkelijke score en voorspelling uit. In dit voorbeeld extraheren we gegevens uit een JSON-invoer, roepen we de methode van predict()
het scikit-learn-model aan en retourneren we het resultaat.
Lokaal implementeren en fouten opsporen met behulp van lokale eindpunten
U wordt ten zeerste aangeraden uw eindpunt lokaal uit te voeren door uw code en configuratie te valideren en fouten op te sporen voordat u in Azure implementeert. Azure CLI en Python SDK ondersteunen lokale eindpunten en implementaties, terwijl Azure Machine Learning-studio en ARM-sjabloon dat niet doen.
Als u lokaal wilt implementeren, moet Docker Engine worden geïnstalleerd en uitgevoerd. Docker Engine wordt doorgaans gestart wanneer de computer wordt gestart. Als dat niet het probleem is, kunt u problemen met Docker Engine oplossen.
Tip
U kunt het Python-pakket van azure Machine Learning-deductieserver gebruiken om lokaal fouten in uw scorescript op te sporen zonder Docker Engine. Foutopsporing met de deductieserver helpt u bij het opsporen van fouten in het scorescript voordat u implementeert op lokale eindpunten, zodat u fouten kunt opsporen zonder dat dit wordt beïnvloed door de configuraties van de implementatiecontainer.
Notitie
Lokale eindpunten hebben de volgende beperkingen:
- Ze bieden geen ondersteuning voor verkeersregels, verificatie of testinstellingen.
- Ze ondersteunen slechts één implementatie per eindpunt.
- Ze ondersteunen alleen lokale modelbestanden en omgevingen met lokaal Conda-bestand. Als u geregistreerde modellen wilt testen, moet u ze eerst downloaden met behulp van CLI of SDK en vervolgens in de implementatiedefinitie gebruiken
path
om naar de bovenliggende map te verwijzen. Als u geregistreerde omgevingen wilt testen, controleert u de context van de omgeving in Azure Machine Learning-studio en bereidt u het lokale Conda-bestand voor om te gebruiken. In dit artikel ziet u hoe u het lokale model en de omgeving gebruikt met een lokaal Conda-bestand, dat ondersteuning biedt voor lokale implementatie.
Zie Debug online eindpunten lokaal in Visual Studio Code voor meer informatie over het lokaal opsporen van fouten in online-eindpunten voordat u implementeert in Azure.
Het model lokaal implementeren
Maak eerst een eindpunt. Optioneel kunt u voor een lokaal eindpunt deze stap overslaan en rechtstreeks de implementatie (volgende stap) maken. Hierdoor worden de vereiste metagegevens gemaakt. Het lokaal implementeren van modellen is handig voor ontwikkelings- en testdoeleinden.
az ml online-endpoint create --local -n $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Maak nu een implementatie met de naam blue
onder het eindpunt.
az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
Met --local
de vlag wordt de CLI om het eindpunt in de Docker-omgeving te implementeren.
Tip
Gebruik Visual Studio Code om uw eindpunten lokaal te testen en fouten op te sporen. Zie voor meer informatie debug online eindpunten lokaal in Visual Studio Code.
Controleren of de lokale implementatie is geslaagd
Controleer de status om te zien of het model zonder fouten is geïmplementeerd:
az ml online-endpoint show -n $ENDPOINT_NAME --local
De uitvoer moet er ongeveer uitzien als in de volgende JSON. Het provisioning_state
is Succeeded
.
{
"auth_mode": "key",
"location": "local",
"name": "docs-endpoint",
"properties": {},
"provisioning_state": "Succeeded",
"scoring_uri": "http://localhost:49158/score",
"tags": {},
"traffic": {}
}
De volgende tabel bevat de mogelijke waarden voor provisioning_state
:
Toestand | Beschrijving |
---|---|
Maken | De resource wordt gemaakt. |
Bijwerken | De resource wordt bijgewerkt. |
Verwijderen | De resource wordt verwijderd. |
Geslaagd | De bewerking voor maken/bijwerken is voltooid. |
Mislukt | De bewerking voor maken/bijwerken/verwijderen is mislukt. |
Het lokale eindpunt aanroepen om gegevens te scoren met behulp van uw model
Roep het eindpunt aan om het model te scoren met behulp van de handige opdracht invoke
en het doorgeven van queryparameters die zijn opgeslagen in een JSON-bestand:
az ml online-endpoint invoke --local --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
Als u een REST-client (zoals curl) wilt gebruiken, moet u de score-URI hebben. Voer de score-URI uit az ml online-endpoint show --local -n $ENDPOINT_NAME
om de score-URI op te halen. Zoek het scoring_uri
kenmerk in de geretourneerde gegevens. Voorbeelden van op curl gebaseerde opdrachten zijn verderop in dit document beschikbaar.
Bekijk de logboeken voor uitvoer van de aanroepbewerking
In het voorbeeldbestand score.py registreert de run()
methode uitvoer naar de console.
U kunt deze uitvoer weergeven met behulp van de get-logs
opdracht:
az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME
Uw online-eindpunt implementeren in Azure
Implementeer vervolgens uw online-eindpunt in Azure.
Implementeren op Azure
Voer de volgende code uit om het eindpunt in de cloud te maken:
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
Voer de volgende code uit om de implementatie te maken met de naam blue
onder het eindpunt:
az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
Deze implementatie kan maximaal 15 minuten duren, afhankelijk van of de onderliggende omgeving of installatiekopie voor het eerst wordt gebouwd. Volgende implementaties die gebruikmaken van dezelfde omgeving, voltooien de verwerking sneller.
Tip
- Als u de CLI-console liever niet blokkeert, kunt u de vlag
--no-wait
toevoegen aan de opdracht. Hierdoor wordt de interactieve weergave van de implementatiestatus echter gestopt.
Belangrijk
Met --all-traffic
de vlag in het bovenstaande az ml online-deployment create
wordt 100% van het eindpuntverkeer toegewezen aan de zojuist gemaakte blauwe implementatie. Hoewel dit handig is voor ontwikkelings- en testdoeleinden, kunt u voor productie verkeer naar de nieuwe implementatie openen via een expliciete opdracht. Bijvoorbeeld: az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100"
.
Tip
- Gebruik De implementatie van online-eindpunten oplossen om fouten op te sporen.
De status van het eindpunt controleren
De show
opdracht bevat informatie provisioning_state
voor het eindpunt en de implementatie:
az ml online-endpoint show -n $ENDPOINT_NAME
U kunt alle eindpunten in de werkruimte in een tabelindeling weergeven met behulp van de list
opdracht:
az ml online-endpoint list --output table
De status van de online-implementatie controleren
Controleer de logboeken om te zien of het model zonder fouten is geïmplementeerd.
Gebruik de volgende CLI-opdracht om logboekuitvoer van een container weer te geven:
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
Logboeken worden standaard opgehaald uit de container van de deductieserver. Voeg de --container storage-initializer
vlag toe om logboeken uit de container voor de opslag-initialisatiefunctie weer te geven. Zie Containerlogboeken ophalen voor meer informatie over implementatielogboeken.
Het eindpunt aanroepen om gegevens te scoren met behulp van uw model
U kunt de invoke
opdracht of een REST-client van uw keuze gebruiken om het eindpunt aan te roepen en enkele gegevens te beoordelen:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
In het volgende voorbeeld ziet u hoe u de sleutel opgeeft die wordt gebruikt voor verificatie bij het eindpunt:
Tip
U kunt bepalen welke Microsoft Entra-beveiligingsprinciplen de verificatiesleutel kunnen ophalen door ze toe te wijzen aan een aangepaste rol waarmee Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action
en Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action
. Zie Toegang tot een Azure Machine Learning-werkruimte beheren voor meer informatie.
ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)
Gebruik vervolgens curl om gegevens te scoren.
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
Let op: we gebruiken show
en get-credentials
opdrachten om de verificatiereferenties op te halen. U ziet ook dat we de --query
vlag gebruiken om kenmerken te filteren op alleen wat we nodig hebben. Zie De uitvoer van --query
de Azure CLI-opdracht query's voor meer informatie.
Als u de aanroeplogboeken wilt zien, voert u de opdracht opnieuw uit get-logs
.
Zie Verifiëren bij online-eindpunten voor informatie over het verifiëren met behulp van een token.
(Optioneel) De implementatie bijwerken
Als u de code, het model of de omgeving wilt bijwerken, werkt u het YAML-bestand bij en voert u de az ml online-endpoint update
opdracht uit.
Notitie
Als u het aantal exemplaren bijwerkt (om uw implementatie te schalen) samen met andere modelinstellingen (zoals code, model of omgeving) in één update
opdracht, wordt de schaalbewerking eerst uitgevoerd en worden de andere updates toegepast. Het is een goede gewoonte om deze bewerkingen afzonderlijk uit te voeren in een productieomgeving.
Ga als volgt te werk om te begrijpen hoe update
het werkt:
Open het bestand online/model-1/onlinescoring/score.py.
De laatste regel van de
init()
functie wijzigen: Nalogging.info("Init complete")
, toevoegenlogging.info("Updated successfully")
.Sla het bestand op.
Voer deze opdracht uit:
az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
Notitie
Bijwerken met behulp van YAML is declaratief. Dat wil gezegd, wijzigingen in de YAML worden doorgevoerd in de onderliggende Azure Resource Manager-resources (eindpunten en implementaties). Een declaratieve benadering faciliteert GitOps: alle wijzigingen in eindpunten en implementaties (zelfs
instance_count
) doorlopen de YAML.Tip
- U kunt algemene updateparameters, zoals de
--set
parameter, gebruiken met de CLI-opdrachtupdate
om kenmerken in uw YAML te overschrijven of om specifieke kenmerken in te stellen zonder deze door te geven in het YAML-bestand. Het gebruik--set
van één kenmerk is vooral waardevol in ontwikkelings- en testscenario's. Als u bijvoorbeeld de waarde voor deinstance_count
eerste implementatie omhoog wilt schalen, kunt u de--set instance_count=2
vlag gebruiken. Omdat de YAML echter niet wordt bijgewerkt, faciliteert deze techniek GitOps niet. - Het opgeven van het YAML-bestand is NIET verplicht. Als u bijvoorbeeld een andere gelijktijdigheidsinstelling voor een bepaalde implementatie wilt testen, kunt u iets proberen als
az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4
. Hiermee blijft alle bestaande configuratie behouden, maar worden alleen de opgegeven parameters bijgewerkt.
- U kunt algemene updateparameters, zoals de
Omdat u de
init()
functie hebt gewijzigd, die wordt uitgevoerd wanneer het eindpunt wordt gemaakt of bijgewerkt, wordt het berichtUpdated successfully
in de logboeken weergegeven. Haal de logboeken op door het volgende uit te voeren:az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
De update
opdracht werkt ook met lokale implementaties. Gebruik dezelfde az ml online-deployment update
opdracht met de --local
vlag.
Notitie
De vorige update voor de implementatie is een voorbeeld van een doorlopende update.
- Voor een beheerd online-eindpunt wordt de implementatie bijgewerkt naar de nieuwe configuratie met 20% knooppunten tegelijk. Als de implementatie dus 10 knooppunten heeft, worden 2 knooppunten tegelijk bijgewerkt.
- Voor een Online-eindpunt van Kubernetes maakt het systeem iteratief een nieuw implementatie-exemplaar met de nieuwe configuratie en verwijdert het oude exemplaar.
- Voor productiegebruik moet u een blauwgroene implementatie overwegen, die een veiliger alternatief biedt voor het bijwerken van een webservice.
(Optioneel) Automatische schaalaanpassing configureren
Automatisch schalen wordt uitgevoerd met de juiste hoeveelheid resources om de belasting van uw toepassing te verwerken. Beheerde online-eindpunten bieden ondersteuning voor automatisch schalen via integratie met de functie voor automatische schaalaanpassing van Azure Monitor. Als u automatische schaalaanpassing wilt configureren, raadpleegt u Online-eindpunten automatisch schalen.
(Optioneel) SLA bewaken met behulp van Azure Monitor
Als u metrische gegevens wilt weergeven en waarschuwingen wilt instellen op basis van uw SLA, voert u de stappen uit die worden beschreven in Online-eindpunten bewaken.
(Optioneel) Integreren met Log Analytics
De get-logs
opdracht voor CLI of de get_logs
methode voor SDK biedt alleen de laatste honderd regels logboeken van een automatisch geselecteerd exemplaar. Log Analytics biedt echter een manier om logboeken duurzaam op te slaan en te analyseren. Zie Online-eindpunten bewaken voor meer informatie over het gebruik van logboekregistratie.
Het eindpunt en de implementatie verwijderen
Als u de implementatie niet gaat gebruiken, moet u deze verwijderen door de volgende code uit te voeren (het eindpunt en alle onderliggende implementaties worden verwijderd):
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
Gerelateerde inhoud
- Veilige implementatie voor online-eindpunten
- Modellen implementeren met REST
- Beheerde online-eindpunten automatisch schalen
- Beheerde online-eindpunten bewaken
- Toegang tot Azure-resources vanaf een online-eindpunt met een beheerde identiteit
- Problemen met de implementatie van online eindpunten oplossen
- Netwerkisolatie met beheerde online-eindpunten inschakelen
- Kosten weergeven voor een online-eindpunt dat door Azure Machine Learning wordt beheerd
- Quota voor resources beheren en verhogen met Azure Machine Learning
- Batch-eindpunten gebruiken voor batchgewijs scoren