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 standaard Python Flask-server die door Azure Machine Learning wordt 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 minimale installatiekopie van Azure Machine Learning.
  • 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:

    Om de Azure CLI en de ml extensie te installeren, zie 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-subsysteem voor Linux.

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

  • Docker Engine, installed and running locally. This prerequisite is highly recommended. U hebt het nodig om een model lokaal te implementeren en het is handig voor foutopsporing.

Deployment examples

The following table lists deployment examples that use custom containers and take advantage of various tools and technologies.

Example Azure CLI-script Description
minimal/multimodel deploy-custom-container-minimal-multimodel Hiermee worden meerdere modellen ingezet naar één enkele implementatie door de minimale image van Azure Machine Learning uit te breiden.
minimal/single-model deploy-custom-container-minimal-single-model Implementeert een enkel model door het minimale containerimage voor Azure Machine Learning inference uit te breiden.
mlflow/multideployment-scikit deploy-custom-container-mlflow-multideployment-scikit Hiermee worden twee MLFlow-modellen met verschillende Python-vereisten geïmplementeerd op twee afzonderlijke implementaties achter één eindpunt. Maakt gebruik van de minimale installatiekopie voor modelinferentie 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 voorbeeld tfserving/half plus-twee 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

The steps in this article use code samples from the azureml-examples repository. 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 over niet-gelabelde gegevens kunt krijgen:

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

Voer de stappen in de volgende secties uit om uw online-eindpunt in Azure te implementeren.

YAML-bestanden maken voor uw eindpunt en implementatie

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

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

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

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

Base image

In de environment sectie in YAML of de Environment constructor in Python specificeert u de basisafbeelding 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. Als u wilt zien hoe u een Dockerfile maakt om een container te maken, raadpleegt u andere voorbeelden. Sommige servers gebruiken CMD instructies in plaats van ENTRYPOINT instructies.

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: To check whether a server is running, you use a liveness route.
  • Readiness routes: To check whether a server is ready to do work, you use a readiness route.

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.

Scoring routes

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

When you deploy a model as an online endpoint, Azure Machine Learning mounts your model to your endpoint. Wanneer het model is gemonteerd, kunt u nieuwe versies van het model uitrollen zonder dat u een nieuwe Docker-image hoeft te maken. By default, a model registered with the name my-model and version 1 is located on the following path inside your deployed container: /var/azureml-app/azureml-models/my-model/1.

Denk bijvoorbeeld aan de volgende installatie:

  • Een directorystructuur 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 model de sectie bevat. In deze sectie verwijst de name waarde 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

Wanneer u een implementatie maakt, bevindt uw model zich in dit geval onder de volgende map: /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 gastbesturingssystem van de containerinstallatiekopieën).

Important

model_mount_path is alleen bruikbaar in BYOC-scenario (Bring Your Own Container). In het BYOC-scenario moet de omgeving die door de online-implementatie wordt gebruikt, parameters hebben inference_config geconfigureerd. U kunt Azure ML CLI of Python SDK gebruiken om de parameter op te geven inference_config bij het maken van de omgeving. Studio UI 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 vervolgens op /var/tfserving-model-mount/tfserving-mounted/1. Het bevindt zich niet meer onder azureml-app/azureml-models, maar onder het koppelpad 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