Delen via


Progressieve implementatie van MLflow-modellen voor online-eindpunten

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.

Vereisten

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.

  1. 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"
    
  2. Het eindpunt configureren

    endpoint.yml

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: heart-classifier-edp
    auth_mode: key
    
  3. Maak het eindpunt:

    az ml online-endpoint create -n $ENDPOINT_NAME -f endpoint.yml
    
  4. Het 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.

  1. 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: 1
    
  2. De implementatie maken

    az ml online-deployment create --endpoint-name $ENDPOINT_NAME -f blue-deployment.yml --all-traffic
    

    Als 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-traffic
    

    Tip

    We stellen de vlag --all-traffic in de opdracht maken in, waarmee al het verkeer wordt toegewezen aan de nieuwe implementatie.

  3. 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-traffic maken hebben gebruikt.

  4. Werk de eindpuntconfiguratie bij:

    Deze stap is niet vereist in de Azure CLI omdat we de stap tijdens het --all-traffic maken hebben gebruikt.

  5. 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" ]
            ]
        }
    }
    
  6. 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.

  1. 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")
    
  2. 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: 1
    

    We noemen de implementatie als volgt:

    GREEN_DEPLOYMENT_NAME="xgboost-model-$VERSION"
    
  3. De nieuwe implementatie maken

    az ml online-deployment create -n $GREEN_DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME -f green-deployment.yml
    

    Als 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.yml
    
  4. De implementatie testen zonder verkeer te wijzigen

    az ml online-endpoint invoke --name $ENDPOINT_NAME --deployment-name $GREEN_DEPLOYMENT_NAME --request-file sample.json
    

    Tip

    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:

  1. Configureer het verkeer:

    Deze stap is niet vereist in de Azure CLI

  2. Het eindpunt bijwerken

    az ml online-endpoint update --name $ENDPOINT_NAME --traffic "default=90 $GREEN_DEPLOYMENT_NAME=10"
    
  3. 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

  4. Het eindpunt bijwerken

    az ml online-endpoint update --name $ENDPOINT_NAME --traffic "default=0 $GREEN_DEPLOYMENT_NAME=100"
    
  5. Omdat de oude implementatie geen verkeer ontvangt, kunt u deze veilig verwijderen:

    az ml online-deployment delete --endpoint-name $ENDPOINT_NAME --name default
    

    Tip

    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.

Resources opschonen

az ml online-endpoint delete --name $ENDPOINT_NAME --yes

Belangrijk

Als u een eindpunt verwijdert, worden ook alle implementaties eronder verwijderd.

Volgende stappen