Share via


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

VAN TOEPASSING OP:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

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.

Opmerking Script (CLI) Beschrijving
minimaal/multimodel deploy-custom-container-minimal-multimodel Implementeer meerdere modellen in één implementatie door de minimale installatiekopie van Azure Machine Learning Uit te breiden.
minimaal/enkel model deploy-custom-container-minimal-single-model Implementeer één model door de minimale installatiekopie van Azure Machine Learning-deductie uit te breiden.
mlflow/multideployment-scikit deploy-custom-container-mlflow-multideployment-scikit 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.
r/multimodel-loodgieter deploy-custom-container-r-multimodel-plumber Drie regressiemodellen implementeren op één eindpunt met behulp van het Plumber R-pakket
tfserving/half-plus-two deploy-custom-container-tfserving-half-plus-two Implementeer een Half Plus Two-model met behulp van een aangepaste TensorFlow Serving-container met behulp van het standaardmodelregistratieproces.
tfserving/half-plus-two-integrated deploy-custom-container-tfserving-half-plus-two-integrated 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.
torchserve/densenet deploy-custom-container-torchserve-densenet Implementeer één model met behulp van een aangepaste TorchServe-container.
triton/single-model deploy-custom-container-triton-single-model 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:

      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:

      pip install --upgrade azure-ai-ml azure-identity
      

      Zie De Python SDK v2 voor Azure Machine Learning installeren voor meer informatie.

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

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

Omgevingsvariabelen initialiseren

Omgevingsvariabelen 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 dat een invoer door twee deelt en voegt 2 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 TF Serving-installatiekopieën lokaal uitvoeren om te testen of deze werkt

Gebruik docker om uw installatiekopieën lokaal uit te voeren om te testen:

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

Controleer of u liveness- en scoreaanvragen naar de afbeelding kunt verzenden

Controleer eerst of de container actief is, wat betekent dat het proces in de container nog steeds wordt uitgevoerd. U krijgt een 200 (OK)-antwoord.

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

Controleer vervolgens of u voorspellingen kunt krijgen over 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

Nu u lokaal hebt getest, stopt u de installatiekopieën:

docker stop tfserving-test

Uw online-eindpunt implementeren in Azure

Implementeer vervolgens uw online-eindpunt in Azure.

Een YAML-bestand maken voor uw eindpunt en implementatie

U kunt uw cloudimplementatie configureren met BEHULP van YAML. Bekijk de YAML-voorbeeld voor dit voorbeeld:

tfserving-endpoint.yml

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

tfserving-deployment.yml

$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

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:

Diagram met een structuurweergave van de lokale mapstructuur.

En tfserving-deployment.yml bevat:

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

Vervolgens bevindt uw model zich onder /var/azureml-app/azureml-models/tfserving-deployment/1 in uw implementatie:

Diagram met een structuurweergave van de structuur van de implementatiemap.

U kunt desgewenst uw model_mount_path. Hiermee kunt u het pad wijzigen waar het model is gekoppeld.

Belangrijk

Het model_mount_path moet een geldig absoluut pad in Linux zijn (het besturingssysteem van de containerinstallatiekopieën).

U kunt bijvoorbeeld de parameter in uw tfserving-deployment.yml hebbenmodel_mount_path:

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

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:

Diagram met een structuurweergave van de structuur van de implementatiemap wanneer u mount_model_path gebruikt.

Uw eindpunt en implementatie maken

Nu u begrijpt hoe de YAML is samengesteld, maakt u uw eindpunt.

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.

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

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)

Het eindpunt verwijderen

Nu u uw eindpunt hebt beoordeeld, kunt u het volgende verwijderen:

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