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.
In dit artikel leert u hoe u MLflow-modellen geleidelijk kunt bijwerken en implementeren in Online-eindpunten zonder dat dit serviceonderbreking veroorzaakt. U gebruikt blauwgroene implementatie, ook wel een veilige implementatiestrategie genoemd, om een nieuwe versie van een webservice in productie te introduceren. Met deze strategie kunt u uw nieuwe versie van de webservice implementeren voor een kleine subset van gebruikers of aanvragen voordat u deze volledig uitrolt.
Over dit voorbeeld
Online-eindpunten hebben het concept eindpunt en implementatie. Een eindpunt vertegenwoordigt de API die klanten gebruiken om het model te gebruiken, terwijl de implementatie de specifieke implementatie van die API aangeeft. Met dit onderscheid kunnen gebruikers de API loskoppelen van de implementatie en de onderliggende implementatie wijzigen zonder dat dit van invloed is op de consument. In dit voorbeeld worden dergelijke concepten gebruikt om het geïmplementeerde model in eindpunten bij te werken zonder serviceonderbreking te introduceren.
Het model dat we gaan implementeren, is gebaseerd op de UCI Heart Disease Data Set. De database bevat 76 kenmerken, maar we gebruiken een subset van 14 kenmerken. Het model probeert de aanwezigheid van hart- en vaatziekten bij een patiënt te voorspellen. Het is een geheel getal van 0 (geen aanwezigheid) tot 1 (aanwezigheid). Het is getraind met behulp van een XGBBoost classificatie en alle vereiste voorverwerking is verpakt als een scikit-learn pijplijn, waardoor dit model een end-to-end-pijplijn is die van onbewerkte gegevens naar voorspellingen gaat.
De informatie in dit artikel is gebaseerd op codevoorbeelden in de opslagplaats azureml-examples . Als u de opdrachten lokaal wilt uitvoeren zonder bestanden te hoeven kopiëren/plakken, kloont u de opslagplaats en wijzigt u de mappen sdk/using-mlflow/deployin .
Volgen in Jupyter Notebooks
U kunt dit voorbeeld volgen in de volgende notebooks. Open in de gekloonde opslagplaats het notebook: mlflow_sdk_online_endpoints_progresive.ipynb.
Prerequisites
Voordat u de stappen in dit artikel volgt, moet u ervoor zorgen dat u over de volgende vereisten beschikt:
- Een Azure-abonnement. Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint. Probeer de gratis of betaalde versie van Azure Machine Learning.
- Op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) wordt gebruikt om toegang te verlenen tot bewerkingen in Azure Machine Learning. Als u de stappen in dit artikel wilt uitvoeren, moet aan uw gebruikersaccount de rol eigenaar of inzender zijn toegewezen voor de Azure Machine Learning-werkruimte, of aan een aangepaste rol die Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*toestaat. Zie Toegang tot een Azure Machine Learning-werkruimte beheren voor meer informatie.
Daarnaast moet u het volgende doen:
- Installeer de Azure CLI en de ml-extensie in de Azure CLI. Zie De CLI (v2) installeren, instellen en gebruiken voor meer informatie.
Verbinding maken met uw werkruimte
Eerst gaan we verbinding maken met de Azure Machine Learning-werkruimte waaraan we gaan werken.
az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Het model registreren in het register
Zorg ervoor dat uw model is geregistreerd in het Azure Machine Learning-register. Implementatie van niet-geregistreerde modellen wordt niet ondersteund in Azure Machine Learning. U kunt een nieuw model registreren met behulp van de MLflow SDK:
MODEL_NAME='heart-classifier'
az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"
Een online-eindpunt maken
Online-eindpunten zijn eindpunten die worden gebruikt voor onlinedeductie (realtime). Online-eindpunten bevatten implementaties die gereed zijn om gegevens van clients te ontvangen en die reacties in realtime kunnen terugsturen.
We gaan deze functionaliteit benutten door meerdere versies van hetzelfde model onder hetzelfde eindpunt te implementeren. De nieuwe implementatie ontvangt echter 0% van het verkeer bij het smeken. Zodra we zeker weten dat het nieuwe model correct werkt, gaan we het verkeer van de ene implementatie naar de andere geleidelijk verplaatsen.
Eindpunten vereisen een naam, die uniek moet zijn in dezelfde regio. Laten we ervoor zorgen dat u er een maakt die niet bestaat:
ENDPOINT_SUFIX=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${1:-5} | head -n 1) ENDPOINT_NAME="heart-classifier-$ENDPOINT_SUFIX"Het eindpunt configureren
endpoint.yml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json name: heart-classifier-edp auth_mode: keyMaak het eindpunt:
az ml online-endpoint create -n $ENDPOINT_NAME -f endpoint.ymlHet verificatiegeheim voor het eindpunt ophalen.
ENDPOINT_SECRET_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME | jq -r ".accessToken")
Een blauwe implementatie maken
Tot nu toe is het eindpunt leeg. Er zijn geen implementaties op. We gaan de eerste maken door hetzelfde model te implementeren waarop we eerder hebben gewerkt. We noemen deze implementatie 'standaard', die onze 'blauwe implementatie' vertegenwoordigt.
De implementatie configureren
blue-deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: default endpoint_name: heart-classifier-edp model: azureml:heart-classifier@latest instance_type: Standard_DS2_v2 instance_count: 1De implementatie maken
az ml online-deployment create --endpoint-name $ENDPOINT_NAME -f blue-deployment.yml --all-trafficAls uw eindpunt geen uitgaande connectiviteit heeft, gebruikt u modelverpakking (preview) door de vlag
--with-packageop te geven:az ml online-deployment create --with-package --endpoint-name $ENDPOINT_NAME -f blue-deployment.yml --all-trafficTip
We stellen de vlag
--all-trafficin de opdracht maken in, waarmee al het verkeer wordt toegewezen aan de nieuwe implementatie.Al het verkeer toewijzen aan de implementatie
Tot nu toe heeft het eindpunt één implementatie, maar er wordt geen verkeer aan het eindpunt toegewezen. Laten we het toewijzen.
Deze stap is niet vereist in de Azure CLI omdat we de stap tijdens het
--all-trafficmaken hebben gebruikt.Werk de eindpuntconfiguratie bij:
Deze stap is niet vereist in de Azure CLI omdat we de stap tijdens het
--all-trafficmaken hebben gebruikt.Een voorbeeldinvoer maken om de implementatie te testen
sample.yml
{ "input_data": { "columns": [ "age", "sex", "cp", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal" ], "data": [ [ 48, 0, 3, 130, 275, 0, 0, 139, 0, 0.2, 1, 0, "normal" ] ] } }De implementatie testen
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file sample.json
Een groene implementatie maken onder het eindpunt
Stel dat er een nieuwe versie van het model is gemaakt door het ontwikkelteam en klaar is om in productie te zijn. We kunnen eerst proberen om dit model te vliegen en zodra we vertrouwen, kunnen we het eindpunt bijwerken om het verkeer naar het model te routeren.
Een nieuwe modelversie registreren
MODEL_NAME='heart-classifier' az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"Laten we het versienummer van het nieuwe model ophalen:
VERSION=$(az ml model show -n heart-classifier --label latest | jq -r ".version")Een nieuwe implementatie configureren
green-deployment.yml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json name: xgboost-model endpoint_name: heart-classifier-edp model: azureml:heart-classifier@latest instance_type: Standard_DS2_v2 instance_count: 1We noemen de implementatie als volgt:
GREEN_DEPLOYMENT_NAME="xgboost-model-$VERSION"De nieuwe implementatie maken
az ml online-deployment create -n $GREEN_DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME -f green-deployment.ymlAls uw eindpunt geen uitgaande connectiviteit heeft, gebruikt u modelverpakking (preview) door de vlag
--with-packageop te geven:az ml online-deployment create --with-package -n $GREEN_DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME -f green-deployment.ymlDe implementatie testen zonder verkeer te wijzigen
az ml online-endpoint invoke --name $ENDPOINT_NAME --deployment-name $GREEN_DEPLOYMENT_NAME --request-file sample.jsonTip
U ziet nu hoe we de naam aangeven van de implementatie die we willen aanroepen.
Het verkeer geleidelijk bijwerken
Een implementatie die we vertrouwen hebben, kunnen we het verkeer bijwerken om een deel ervan naar de nieuwe implementatie te leiden. Verkeer is geconfigureerd op eindpuntniveau:
Configureer het verkeer:
Deze stap is niet vereist in de Azure CLI
Het eindpunt bijwerken
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "default=90 $GREEN_DEPLOYMENT_NAME=10"Als u besluit het hele verkeer over te schakelen naar de nieuwe implementatie, werkt u al het verkeer bij:
Deze stap is niet vereist in de Azure CLI
Het eindpunt bijwerken
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "default=0 $GREEN_DEPLOYMENT_NAME=100"Omdat de oude implementatie geen verkeer ontvangt, kunt u deze veilig verwijderen:
az ml online-deployment delete --endpoint-name $ENDPOINT_NAME --name defaultTip
U ziet dat op dit moment de voormalige 'blauwe implementatie' is verwijderd en dat de nieuwe 'groene implementatie' de plaats van de 'blauwe implementatie' heeft genomen.
Opschonen van resources
az ml online-endpoint delete --name $ENDPOINT_NAME --yes
Important
Als u een eindpunt verwijdert, worden ook alle implementaties eronder verwijderd.