Delen via


Een aangepaste container gebruiken om een model te implementeren op een online-eindpunt

APPLIES TO:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

In Azure Machine Learning kunt u een aangepaste container gebruiken om een model te implementeren op een online-eindpunt. Aangepaste containerimplementaties kunnen andere webservers gebruiken dan de standaardserver Python Flask-server die Azure Machine Learning gebruikt.

Wanneer u een aangepaste implementatie gebruikt, kunt u het volgende doen:

  • Gebruik verschillende hulpprogramma's en technologieën, zoals TensorFlow Serving (TF Serving), TorchServe, Triton Inference Server, het Plumber R-pakket en de Azure Machine Learning minimale afbeelding van deductie.
  • Profiteer nog steeds van de ingebouwde bewaking, schaalaanpassing, waarschuwingen en verificatie die Azure Machine Learning biedt.

In dit artikel leest u hoe u een TF Serving-installatiekopieën gebruikt om een TensorFlow-model te leveren.

Prerequisites

  • Een Azure Machine Learning werkruimte. Zie De werkruimte maken voor instructies voor het maken van een werkruimte.

  • De Azure CLI en de ml-extensie of de Azure Machine Learning Python SDK v2:

    Als u de Azure CLI en de ml-extensie wilt installeren, raadpleeg dan De CLI (v2) installeren en instellen.

    In de voorbeelden in dit artikel wordt ervan uitgegaan dat u een Bash-shell of een compatibele shell gebruikt. U kunt bijvoorbeeld een shell gebruiken op een Linux-systeem of Windows Subsystem for Linux.

  • Een Azure resourcegroep die uw werkruimte bevat en waartoe u of de service-principal toegang als bijdragende heeft. Als u de stappen in De werkruimte maken gebruikt om uw werkruimte te configureren, voldoet u aan deze vereiste.

  • Docker Engine, lokaal geïnstalleerd en uitgevoerd. Deze vereiste wordt ten zeerste aanbevolen. U hebt het nodig om een model lokaal te implementeren en het is handig voor foutopsporing.

Implementatievoorbeelden

De volgende tabel bevat voorbeelden van deployment die gebruikmaken van aangepaste containers en gebruikmaken van verschillende hulpprogramma's en technologieën.

Example Azure CLI script Description
minimal/multimodel deploy-custom-container-minimal-multimodel Hiermee worden meerdere modellen naar één enkele implementatie gedeployed door de Azure Machine Learning minimale afbeelding uit te breiden.
minimal/single-model deploy-eigen-container-minimaal-enkel-model Hiermee wordt één model geïmplementeerd door de minimale afbeelding van Azure Machine Learning uit te breiden.
mlflow/multideployment-scikit deploy-custom-container-mlflow-multideployment-scikit Hiermee worden twee MLFlow-modellen met verschillende Python vereisten geïmplementeerd voor twee afzonderlijke implementaties achter één eindpunt. Maakt gebruik van de minimale inferentie-image van Azure Machine Learning.
r/multimodel-plumber deploy-custom-container-r-multimodel-plumber Implementeert drie regressiemodellen naar één eindpunt. Maakt gebruik van het Plumber R-pakket.
tfserving/half-plus-two deploy-custom-container-tfserving-half-plus-two Hiermee wordt een Half Plus Two-model geïmplementeerd met behulp van een aangepaste TF Serving-container. Maakt gebruik van het standaardmodelregistratieproces.
tfserving/half-plus-two-integrated deploy-custom-container-tfserving-half-plus-two-integrated Hiermee wordt een Half Plus Two-model geïmplementeerd met behulp van een aangepaste TF Serving-container met het model dat is geïntegreerd in het containerbeeld.
torchserve/densenet deploy-custom-container-torchserve-densenet Hiermee wordt één model geïmplementeerd met behulp van een aangepaste TorchServe-container.
triton/single-model deploy-custom-container-triton-single-model Hiermee wordt een Triton-model geïmplementeerd met behulp van een aangepaste container.

In dit artikel leest u hoe u het tfserving/half-plus-two voorbeeld gebruikt.

Warning

Microsoft-ondersteuningsteams kunnen 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 of een van de afbeeldingen te gebruiken die Microsoft biedt om te zien of het probleem specifiek is voor uw afbeelding.

De broncode downloaden

In de stappen in dit artikel worden codevoorbeelden uit de opslagplaats azureml-examples gebruikt. Gebruik de volgende opdrachten om de opslagplaats te klonen:

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

Omgevingsvariabelen initialiseren

Als u een TensorFlow-model wilt gebruiken, hebt u verschillende omgevingsvariabelen nodig. Voer de volgende opdrachten uit om deze variabelen te definiëren:

BASE_PATH=endpoints/online/custom-container/tfserving/half-plus-two
AML_MODEL_NAME=tfserving-mounted
MODEL_NAME=half_plus_two
MODEL_BASE_PATH=/var/azureml-app/azureml-models/$AML_MODEL_NAME/1

Een TensorFlow-model downloaden

Download en pak een model uit waarmee een invoerwaarde wordt gedeeld door twee en voegt er twee toe aan het resultaat:

wget https://aka.ms/half_plus_two-model -O $BASE_PATH/half_plus_two.tar.gz
tar -xvf $BASE_PATH/half_plus_two.tar.gz -C $BASE_PATH

Een TensorFlow Serving-afbeelding lokaal testen

Gebruik Docker om uw image lokaal uit te voeren voor testdoeleinden.

docker run --rm -d -v $PWD/$BASE_PATH:$MODEL_BASE_PATH -p 8501:8501 \
 -e MODEL_BASE_PATH=$MODEL_BASE_PATH -e MODEL_NAME=$MODEL_NAME \
 --name="tfserving-test" docker.io/tensorflow/serving:latest
sleep 10

Verzoeken voor liveness en score naar de afbeelding verzenden

Verzend een liveness-aanvraag om te controleren of het proces in de container wordt uitgevoerd. U moet een antwoordstatuscode van 200 OK krijgen.

curl -v http://localhost:8501/v1/models/$MODEL_NAME

Verzend een scoreaanvraag om te controleren of u voorspellingen kunt krijgen voor niet-gelabelde gegevens:

curl --header "Content-Type: application/json" \
  --request POST \
  --data @$BASE_PATH/sample_request.json \
  http://localhost:8501/v1/models/$MODEL_NAME:predict

De afbeelding stoppen

Wanneer u klaar bent met lokaal testen, stopt u de image:

docker stop tfserving-test

Uw online-eindpunt implementeren in Azure

Als u uw online-eindpunt wilt implementeren in Azure, voert u de stappen in de volgende secties uit.

YAML-bestanden maken voor uw eindpunt en implementatie

U kunt uw cloudimplementatie configureren met behulp van YAML. Als u bijvoorbeeld uw eindpunt wilt configureren, maakt u een YAML-bestand met de naam tfserving-endpoint.yml die de volgende regels bevat:

$schema: https://azuremlsdk2.blob.core.windows.net/latest/managedOnlineEndpoint.schema.json
name: tfserving-endpoint
auth_mode: aml_token

Als u uw implementatie wilt configureren, maakt u een YAML-bestand met de naam tfserving-deployment.yml die de volgende regels bevat:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
  name: tfserving-mounted
  version: <model-version>
  path: ./half_plus_two
environment_variables:
  MODEL_BASE_PATH: /var/azureml-app/azureml-models/tfserving-mounted/<model-version>
  MODEL_NAME: half_plus_two
environment:
  #name: tfserving
  #version: 1
  image: docker.io/tensorflow/serving:latest
  inference_config:
    liveness_route:
      port: 8501
      path: /v1/models/half_plus_two
    readiness_route:
      port: 8501
      path: /v1/models/half_plus_two
    scoring_route:
      port: 8501
      path: /v1/models/half_plus_two:predict
instance_type: Standard_DS3_v2
instance_count: 1

In de volgende secties worden belangrijke concepten besproken over de YAML- en Python parameters.

Basisafbeelding

Geef in de sectie environment in YAML of de Environment constructor in Python de basisafbeelding op als parameter. In dit voorbeeld wordt docker.io/tensorflow/serving:latest als de image waarde gebruikt.

Als u de container inspecteert, kunt u zien dat deze server opdrachten gebruikt ENTRYPOINT om een invoerpuntscript te starten. Dat script gebruikt omgevingsvariabelen zoals MODEL_BASE_PATH en MODEL_NAME, en het maakt poorten beschikbaar, zoals 8501. Deze details hebben allemaal betrekking op deze server en u kunt deze informatie gebruiken om te bepalen hoe u uw implementatie definieert. Als u bijvoorbeeld de MODEL_BASE_PATH en MODEL_NAME omgevingsvariabelen in uw implementatiedefinitie instelt, gebruikt TF Serving deze waarden om de server te initiëren. Evenzo, als u de poort voor elke route instelt op 8501 in de implementatiedefinitie, worden gebruikersaanvragen naar deze routes correct gerouteerd naar de TF Serving-server.

Dit voorbeeld is gebaseerd op TF Serving. U kunt echter elke container gebruiken die op de hoogte blijft en reageert op aanvragen die naar liveness, gereedheid en scoreroutes gaan. Raadpleeg andere voorbeelden om te zien hoe u een Dockerfile kunt vormen om een container te maken. Sommige servers gebruiken CMD instructies in plaats van ENTRYPOINT instructies.

Aanbeveling

Zet voor productie-implementaties vast op een specifieke imageversie (bijvoorbeeld docker.io/tensorflow/serving:2.18.0) in plaats van :latest te gebruiken om ervoor te zorgen dat implementaties reproduceerbaar zijn.

De inference_config-parameter

In de environment sectie of de Environment klasse is inference_config een parameter. Hiermee geeft u de poort en het pad op voor drie soorten routes: liveness, gereedheid en scoreroutes. De inference_config parameter is vereist als u uw eigen container wilt uitvoeren met een beheerd online-eindpunt.

Gereedheidsroutes versus levensroutes

Sommige API-servers bieden een manier om de status van de server te controleren. Er zijn twee soorten routes die u kunt opgeven om de status te controleren:

  • Liveness routes: Om te controleren of een server draait, gebruikt u een liveness route.
  • Gereedheidsroutes : Gebruik een gereedheidsroute om te controleren of een server gereed is voor werk.

In de context van machine learning-deductie kan een server reageren met een statuscode van 200 OK op een liveness-aanvraag voordat een model wordt geladen. De server reageert mogelijk alleen met een statuscode van 200 OK op een gereedheidsaanvraag nadat het model in het geheugen is geladen.

Zie Liveness, Readiness en Startup Probes configureren voor meer informatie over liveness- en gereedheidstests.

De API-server die u kiest, bepaalt de liveness- en gereedheidsroutes. U identificeert die server in een eerdere stap wanneer u de container lokaal test. In dit artikel gebruikt de voorbeeldimplementatie hetzelfde pad voor de liveness- en gereedheidsroutes, omdat TF-server alleen een livenessroute definieert. Zie andere voorbeelden voor andere manieren om de routes te definiëren.

Scoreroutes berekenen

De API-server die u gebruikt, biedt een manier om de nettolading te ontvangen waaraan u kunt werken. In de context van machine learning-deductie ontvangt een server de invoergegevens via een specifieke route. Identificeer die route voor uw API-server wanneer u de container lokaal in een eerdere stap test. Geef die route op als scoreroute wanneer u de implementatie definieert die moet worden gemaakt.

Het maken van de implementatie werkt ook de scoring_uri parameter van het eindpunt bij. U kunt dit feit controleren door de volgende opdracht uit te voeren: az ml online-endpoint show -n <endpoint-name> --query scoring_uri.

Het gekoppelde model zoeken

Wanneer u een model implementeert als een online-eindpunt, Azure Machine Learning mounts uw model naar uw eindpunt. Wanneer het model is gemonteerd, kunt u nieuwe versies van het model uitrollen zonder dat u een nieuwe Docker-image hoeft te maken. Standaard bevindt een model dat is geregistreerd met de naam mijn model en versie 1 zich op het volgende pad in uw geïmplementeerde container: /var/azureml-app/azureml-models/my-model/1.

Denk bijvoorbeeld aan de volgende installatie:

  • Een mapstructuur op uw lokale computer van /azureml-examples/cli/endpoints/online/custom-container
  • Een modelnaam van half_plus_two

Schermopname van een structuurweergave van een lokale mapstructuur. Het pad /azureml-examples/cli/endpoints/online/custom-container is zichtbaar.

Stel dat uw tfserving-deployment.yml bestand de volgende regels in de model sectie bevat. In deze sectie verwijst de waarde name naar de naam die u gebruikt om het model te registreren in Azure Machine Learning.

model:
    name: tfserving-mounted
    version: 1
    path: ./half_plus_two

In dit geval bevindt uw model zich onder de volgende map wanneer u een implementatie maakt: /var/azureml-app/azureml-models/tfserving-mounted/1

Schermopname van een structuurweergave van de implementatiemap. Het pad var/azureml-app/azureml-models/tfserving-mounted/1 is zichtbaar.

U kunt eventueel uw model_mount_path waarde configureren. Door deze instelling aan te passen, kunt u het pad wijzigen waar het model is gekoppeld.

Important

De model_mount_path waarde moet een geldig absoluut pad in Linux zijn (in het gastbesturingssysteem van de containerimage).

Important

U kunt alleen gebruiken model_mount_path in een BYOC-scenario (Bring Your Own Container). In een BYOC-scenario moet de omgeving die door de online-implementatie wordt gebruikt, de inference_config parameter hebben geconfigureerd. Gebruik de Azure Machine Learning CLI of de Python SDK om de parameter inference_config op te geven bij het maken van de omgeving. De studio biedt momenteel geen ondersteuning voor het opgeven van deze parameter.

Wanneer u de waarde wijzigt model_mount_path, moet u ook de MODEL_BASE_PATH omgevingsvariabele bijwerken. Stel MODEL_BASE_PATH deze waarde in op dezelfde waarde als model_mount_path om een mislukte implementatie te voorkomen vanwege een fout over het basispad dat niet wordt gevonden.

U kunt bijvoorbeeld de model_mount_path parameter toevoegen aan uw tfserving-deployment.yml bestand. U kunt ook de MODEL_BASE_PATH waarde in dat bestand bijwerken:

name: tfserving-deployment
endpoint_name: tfserving-endpoint
model:
  name: tfserving-mounted
  version: 1
  path: ./half_plus_two
model_mount_path: /var/tfserving-model-mount
environment_variables:
  MODEL_BASE_PATH: /var/tfserving-model-mount
...

In uw implementatie bevindt uw model zich in /var/tfserving-model-mount/tfserving-mounted/1. Het bevindt zich niet langer onder azureml-app/azureml-models, maar onder het aankoppelpad dat u opgeeft:

Schermopname van een structuurweergave van de structuur van de implementatiemap. Het pad /var/tfserving-model-mount/tfserving-mounted/1 is zichtbaar.

Uw eindpunt en implementatie maken

Nadat u uw YAML-bestand hebt gemaakt, gebruikt u de volgende opdracht om uw eindpunt te maken:

az ml online-endpoint create --name tfserving-endpoint -f endpoints/online/custom-container/tfserving/half-plus-two/tfserving-endpoint.yml

Gebruik de volgende opdracht om uw implementatie te maken. Deze stap kan enkele minuten worden uitgevoerd.

az ml online-deployment create --name tfserving-deployment -f endpoints/online/custom-container/tfserving/half-plus-two/tfserving-deployment.yml --all-traffic

Het eindpunt aanroepen

Wanneer uw implementatie is voltooid, moet u een scoreaanvraag indienen bij het geïmplementeerde eindpunt.

RESPONSE=$(az ml online-endpoint invoke -n $ENDPOINT_NAME --request-file $BASE_PATH/sample_request.json)

Het eindpunt verwijderen

Als u uw eindpunt niet meer nodig hebt, voert u de volgende opdracht uit om het te verwijderen:

az ml online-endpoint delete --name tfserving-endpoint