Meer informatie over het gebruik van een aangepaste container voor het implementeren van een model naar een online-eindpunt in Azure Machine Learning.
Aangepaste containerimplementaties kunnen andere webservers gebruiken dan de standaard Python Flask-server die wordt gebruikt door Azure Machine Learning. Gebruikers van deze implementaties kunnen nog steeds profiteren van de ingebouwde bewaking, schaalaanpassing, waarschuwingen en verificatie van Azure Machine Learning.
De volgende tabel bevat verschillende implementatievoorbeelden die gebruikmaken van aangepaste containers zoals TensorFlow Serving, TorchServe, Triton Inference Server, Plumber R package en Azure Machine Learning Inference Minimal image.
Implementeer twee MLFlow-modellen met verschillende Python-vereisten voor twee afzonderlijke implementaties achter één eindpunt met behulp van de minimale installatiekopie van Azure Machine Learning.
Implementeer een Half Plus Two-model met behulp van een aangepaste TensorFlow Serving-container met het model dat is geïntegreerd in de installatiekopieën.
Een Triton-model implementeren met behulp van een aangepaste container
Dit artikel is gericht op het bedienen van een TensorFlow-model met TensorFlow (TF) Serving.
Waarschuwing
Microsoft kan mogelijk niet helpen bij het oplossen van problemen die worden veroorzaakt door een aangepaste installatiekopieën. Als u problemen ondervindt, wordt u mogelijk gevraagd om de standaardafbeelding te gebruiken of een van de afbeeldingen die Microsoft biedt om te zien of het probleem specifiek is voor uw afbeelding.
Vereisten
Voordat u de stappen in dit artikel volgt, moet u ervoor zorgen dat u over de volgende vereisten beschikt:
Een Azure Machine Learning-werkruimte. Als u er nog geen hebt, gebruikt u de stappen in de quickstart: artikel Werkruimtebronnen maken om er een te maken.
De Azure CLI en de ml extensie of de Azure Machine Learning Python SDK v2:
Zie De CLI (v2) installeren, instellen en gebruiken om de Azure CLI en extensie te installeren.
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.
Gebruik de volgende opdracht om de Python SDK v2 te installeren:
Bash
pip install azure-ai-ml azure-identity
Gebruik de volgende opdracht om een bestaande installatie van de SDK bij te werken naar de nieuwste versie:
U of de service-principal die u gebruikt, moet inzendertoegang hebben tot de Azure-resourcegroep die uw werkruimte bevat. U hebt een dergelijke resourcegroep als u uw werkruimte hebt geconfigureerd met behulp van het quickstart-artikel.
Als u lokaal wilt implementeren, moet de Docker-engine lokaal worden uitgevoerd. Deze stap wordt ten zeerste aanbevolen. Dit helpt u bij het opsporen van problemen.
Broncode downloaden
Als u deze zelfstudie wilt volgen, kloont u de broncode van GitHub.
Zie ook het voorbeeldnotitieblok, maar houd er rekening mee dat 3. Test locally in de sectie in het notitieblok ervan wordt uitgegaan dat deze wordt uitgevoerd onder de azureml-examples/sdk map.
Configureer werkruimtegegevens en haal een ingang op voor de werkruimte:
Python
# enter details of your Azure Machine Learning workspace
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace = "<AZUREML_WORKSPACE_NAME>"# get a handle to the workspace
ml_client = MLClient(
DefaultAzureCredential(), subscription_id, resource_group, workspace
)
name: De naam van het eindpunt. Deze moet uniek zijn in de Azure-regio. De naam van een eindpunt moet beginnen met een hoofdletter of kleine letter en mag alleen bestaan uit '-'s en alfanumerieke tekens. Zie eindpuntlimieten voor meer informatie over de naamgevingsregels.
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. A key verloopt niet, maar aml_token verloopt wel. Zie Verifiëren bij een online-eindpunt voor meer informatie over verificatie.
U kunt desgewenst een beschrijving, tags toevoegen aan uw eindpunt.
Python
# Creating a unique endpoint name with current datetime to avoid conflictsimport datetime
online_endpoint_name = "endpoint-" + datetime.datetime.now().strftime("%m%d%H%M%f")
# create an online endpoint
endpoint = ManagedOnlineEndpoint(
name=online_endpoint_name,
description="this is a sample online endpoint",
auth_mode="key",
tags={"foo": "bar"},
)
Online-implementatie configureren
Een implementatie is een set resources die vereist is voor het hosten van het model dat de werkelijke deductie uitvoert. Maak een implementatie voor ons eindpunt met behulp van de ManagedOnlineDeployment klasse.
Tip
name - Naam van de implementatie.
endpoint_name - Naam van het eindpunt waaronder de implementatie moet worden gemaakt.
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.
environment - De omgeving die moet worden gebruikt voor de implementatie. Deze waarde kan een verwijzing zijn naar een bestaande > versieomgeving in de werkruimte of een inline-omgevingsspecificatie.
code_configuration - de configuratie voor de broncode en het scorescript
path- Pad naar de broncodemap voor het scoren van het model
scoring_script - Relatief pad naar het scorebestand in de broncodemap
instance_type - De VM-grootte die moet worden gebruikt voor de implementatie. Zie de SKU-lijst met eindpunten voor de lijst met ondersteunde grootten.
instance_count - Het aantal exemplaren dat moet worden gebruikt voor de implementatie
Er zijn enkele belangrijke concepten die u moet noteren in deze YAML-/Python-parameter:
Basisinstallatiekopieën
De basisinstallatiekopieën worden opgegeven als een parameter in de omgeving en docker.io/tensorflow/serving:latest worden in dit voorbeeld gebruikt. Wanneer u de container inspecteert, kunt u zien dat deze server een ENTRYPOINT invoerpuntscript start, waarbij de omgevingsvariabelen, zoals MODEL_BASE_PATH en MODEL_NAME, worden gebruikt en poorten beschikbaar worden gemaakt zoals 8501. Deze details zijn allemaal specifieke informatie voor deze gekozen server. U kunt dit begrip van de server gebruiken om te bepalen hoe u de implementatie definieert. Als u bijvoorbeeld omgevingsvariabelen voor MODEL_BASE_PATH en MODEL_NAME in de implementatiedefinitie instelt, neemt de server (in dit geval TF Serving) de waarden om de server te initiëren. Als u de poort instelt voor de routes 8501 in de implementatiedefinitie, wordt de gebruikersaanvraag naar dergelijke routes correct doorgestuurd naar de TF-server.
Houd er rekening mee dat dit specifieke voorbeeld is gebaseerd op de TF Serving-case, maar u kunt alle containers gebruiken die op de hoogte blijven en reageren op aanvragen die beschikbaar zijn voor liveness, gereedheid en scoreroutes. U kunt naar andere voorbeelden verwijzen en zien hoe het dockerfile wordt gevormd (bijvoorbeeld met behulp CMD van in plaats van ENTRYPOINT) om de containers te maken.
Deductieconfiguratie
Deductieconfiguratie is een parameter in de omgeving en geeft de poort en het pad op voor drie typen van de route: liveness, gereedheid en scoreroute. Deductieconfiguratie is vereist als u uw eigen container wilt uitvoeren met een beheerd online-eindpunt.
Gereedheidsroute versus livenessroute
De API-server die u kiest, kan een manier bieden om de status van de server te controleren. Er zijn twee soorten route die u kunt opgeven: leven en gereedheid. Er wordt een livenessroute gebruikt om te controleren of de server wordt uitgevoerd. Er wordt een gereedheidsroute gebruikt om te controleren of de server gereed is voor werk. In de context van machine learning-deductie kan een server 200 OK reageren op een liveness-aanvraag voordat een model wordt geladen en kan de server 200 OK reageren op een gereedheidsaanvraag pas nadat het model in het geheugen is geladen.
Zie de Kubernetes-documentatie voor meer informatie over liveness- en gereedheidstests in het algemeen.
De liveness- en gereedheidsroutes worden bepaald door de API-server van uw keuze, zoals u zou hebben vastgesteld bij het lokaal testen van de container in een eerdere stap. Houd er rekening mee dat voor de voorbeeldimplementatie in dit artikel hetzelfde pad wordt gebruikt voor zowel liveness als gereedheid, omdat TF Serving alleen een livenessroute definieert. Raadpleeg andere voorbeelden voor verschillende patronen om de routes te definiëren.
Scoreroute
De API-server die u kiest, biedt een manier om de nettolading te ontvangen waaraan moet worden gewerkt. In de context van machine learning-deductie ontvangt een server de invoergegevens via een specifieke route. Identificeer deze route voor uw API-server tijdens het lokaal testen van de container in een eerdere stap en geef deze op wanneer u de implementatie definieert die moet worden gemaakt.
Houd er rekening mee dat het maken van de implementatie ook de scoring_uri parameter van het eindpunt bijwerkt, waarmee u kunt verifiëren az ml online-endpoint show -n <name> --query scoring_uri.
Het gekoppelde model zoeken
Wanneer u een model implementeert als een online-eindpunt, koppelt Azure Machine Learning uw model aan uw eindpunt. Met model koppelen kunt u nieuwe versies van het model implementeren zonder dat u een nieuwe Docker-installatiekopieën hoeft te maken. Standaard bevindt een model dat is geregistreerd met de naam foo en versie 1 zich op het volgende pad in uw geïmplementeerde container: /var/azureml-app/azureml-models/foo/1
Als u bijvoorbeeld een mapstructuur hebt van /azureml-examples/cli/endpoints/online/custom-container op uw lokale computer, waarbij het model de naam half_plus_two heeft:
Vervolgens bevindt uw model zich in /var/tfserving-model-mount/tfserving-deployment/1 in uw implementatie. Houd er rekening mee dat het niet meer onder azureml-app/azureml-models valt, maar onder het koppelpad dat u hebt opgegeven:
Nu u begrijpt hoe de YAML is samengesteld, maakt u uw eindpunt.
Azure CLI
az ml online-endpoint create --name tfserving-endpoint-f endpoints/online/custom-container/tfserving-endpoint.yml
Het maken van een implementatie kan enkele minuten duren.
Azure CLI
az ml online-deployment create --name tfserving-deployment-f endpoints/online/custom-container/tfserving-deployment.yml --all-traffic
Maak met behulp van het MLClient eerder gemaakte eindpunt in de werkruimte. Met deze opdracht wordt het maken van het eindpunt gestart en wordt een bevestigingsantwoord geretourneerd terwijl het maken van het eindpunt wordt voortgezet.
Python
ml_client.begin_create_or_update(endpoint)
Maak de implementatie door het volgende uit te voeren:
Python
ml_client.begin_create_or_update(blue_deployment)
Het eindpunt aanroepen
Zodra de implementatie is voltooid, controleert u of u een scoreaanvraag kunt indienen bij het geïmplementeerde eindpunt.
RESPONSE=$(az ml online-endpoint invoke -n$ENDPOINT_NAME--request-file$BASE_PATH/sample_request.json)
Met behulp van de MLClient eerder gemaakte greep krijgt u een ingang naar het eindpunt. Het eindpunt kan worden aangeroepen met behulp van de invoke opdracht met de volgende parameters:
endpoint_name - Naam van het eindpunt
request_file - Bestand met aanvraaggegevens
deployment_name - Naam van de specifieke implementatie die moet worden getest in een eindpunt
Een voorbeeldaanvraag verzenden met behulp van een JSON-bestand. De voorbeeld-JSON bevindt zich in de voorbeeldopslagplaats.
Python
# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
deployment_name="blue",
request_file="sample-request.json",
)
Het eindpunt verwijderen
Nu u uw eindpunt hebt beoordeeld, kunt u het volgende verwijderen:
Beheer gegevensopname en -voorbereiding, modeltraining en implementatie en bewaking van machine learning-oplossingen met Python, Azure Machine Learning en MLflow.