Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
              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
mlextensie of de Azure Machine Learning Python SDK v2:Om de Azure CLI en de
mlextensie 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.
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 
              
              
              
              
            
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.
              
              
              
              
            
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:
              
              
              
              
            
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