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.
torchserve/huggingface-textgen deploy-custom-container-torchserve-huggingface-textgen Implementeer Hugging Face-modellen naar een online-eindpunt en volg samen met het voorbeeld van Hugging Face Transformers TorchServe.
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 kunt zien in deze YAML-/Python-parameter:

Gereedheidsroute versus livenessroute

Een HTTP-server definieert paden voor zowel liveness als 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 machine learning-deductie kan een server 200 OK reageren op een liveness-aanvraag voordat een model wordt geladen. De server kan 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.

U ziet dat deze implementatie hetzelfde pad gebruikt voor zowel liveness als gereedheid, omdat TF-server alleen een livenessroute definieert.

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