Dela via


Progressiv distribution av MLflow-modeller till onlineslutpunkter

I den här artikeln får du lära dig hur du progressivt kan uppdatera och distribuera MLflow-modeller till onlineslutpunkter utan att orsaka avbrott i tjänsten. Du använder blågrön distribution, även kallad säker distributionsstrategi, för att introducera en ny version av en webbtjänst i produktion. Med den här strategin kan du distribuera din nya version av webbtjänsten till en liten delmängd av användare eller begäranden innan du distribuerar den helt.

Om det här exemplet

Onlineslutpunkter har begreppet Slutpunkt och distribution. En slutpunkt representerar det API som kunder använder för att använda modellen, medan distributionen anger den specifika implementeringen av api:et. Den här skillnaden gör det möjligt för användare att frikoppla API:et från implementeringen och ändra den underliggande implementeringen utan att påverka konsumenten. Det här exemplet använder sådana begrepp för att uppdatera den distribuerade modellen i slutpunkter utan att införa tjänststörningar.

Den modell som vi ska distribuera baseras på datauppsättningen för UCI-hjärtsjukdomar. Databasen innehåller 76 attribut, men vi använder en delmängd av 14 av dem. Modellen försöker förutsäga förekomsten av hjärtsjukdomar hos en patient. Det är heltalsvärde från 0 (ingen närvaro) till 1 (närvaro). Den har tränats med en XGBBoost klassificerare och all nödvändig förbearbetning har paketerats som en scikit-learn pipeline, vilket gör den här modellen till en pipeline från slutpunkt till slutpunkt som går från rådata till förutsägelser.

Informationen i den här artikeln baseras på kodexempel som finns i lagringsplatsen azureml-examples . Om du vill köra kommandona lokalt utan att behöva kopiera/klistra in filer klonar du lagringsplatsen och ändrar sedan katalogerna till sdk/using-mlflow/deploy.

Följ med i Jupyter Notebooks

Du kan följa det här exemplet i följande notebook-filer. Öppna notebook-filen på den klonade lagringsplatsen: mlflow_sdk_online_endpoints_progresive.ipynb.

Förutsättningar

Innan du följer stegen i den här artikeln kontrollerar du att du har följande förutsättningar:

  • En Azure-prenumeration. Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar. Prova den kostnadsfria eller betalda versionen av Azure Machine Learning.
  • Rollbaserade åtkomstkontroller i Azure (Azure RBAC) används för att bevilja åtkomst till åtgärder i Azure Machine Learning. Om du vill utföra stegen i den här artikeln måste ditt användarkonto tilldelas rollen ägare eller deltagare för Azure Machine Learning-arbetsytan, eller en anpassad roll som tillåter Microsoft.MachineLearningServices/arbetsytor/onlineEndpoints/*. Mer information finns i Hantera åtkomst till en Azure Machine Learning-arbetsyta.

Dessutom måste du:

Anslut till din arbetsyta

Först ska vi ansluta till Azure Machine Learning-arbetsytan där vi ska arbeta med.

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

Registrera modellen i registret

Kontrollera att din modell är registrerad i Azure Machine Learning-registret. Distribution av oregistrerade modeller stöds inte i Azure Machine Learning. Du kan registrera en ny modell med hjälp av MLflow SDK:

MODEL_NAME='heart-classifier'
az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"

Skapa en onlineslutpunkt

Onlineslutpunkter är slutpunkter som används för onlineinferenser (realtid). Onlineslutpunkter innehåller distributioner som är redo att ta emot data från klienter och kan skicka svar i realtid.

Vi kommer att utnyttja den här funktionen genom att distribuera flera versioner av samma modell under samma slutpunkt. Den nya distributionen tar dock emot 0 % av trafiken vid tiggeriet. När vi är säkra på att den nya modellen fungerar korrekt kommer vi att gradvis flytta trafik från en distribution till en annan.

  1. Slutpunkter kräver ett namn som måste vara unikt i samma region. Nu ska vi se till att skapa en som inte finns:

    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. Konfigurera slutpunkten

    endpoint.yml

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

    az ml online-endpoint create -n $ENDPOINT_NAME -f endpoint.yml
    
  4. Hämta autentiseringshemligheten för slutpunkten.

    ENDPOINT_SECRET_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME | jq -r ".accessToken")
    

Skapa en blå distribution

Än så länge är slutpunkten tom. Det finns inga distributioner på den. Nu ska vi skapa den första genom att distribuera samma modell som vi arbetade med tidigare. Vi kallar den här distributionen "standard", som representerar vår "blå distribution".

  1. Konfigurera distributionen

    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. Skapa distributionen

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

    Om slutpunkten inte har utgående anslutning använder du modellpaketering (förhandsversion) genom att inkludera flaggan --with-package:

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

    Dricks

    Vi anger flaggan --all-traffic i kommandot create, som tilldelar all trafik till den nya distributionen.

  3. Tilldela all trafik till distributionen

    Än så länge har slutpunkten en distribution, men ingen av dess trafik har tilldelats den. Vi tilldelar den.

    Det här steget krävs inte i Azure CLI eftersom vi använde --all-traffic när vi skapade.

  4. Uppdatera slutpunktskonfigurationen:

    Det här steget krävs inte i Azure CLI eftersom vi använde --all-traffic när vi skapade.

  5. Skapa ett exempel på indata för att testa distributionen

    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. Testa distributionen

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

Skapa en grön distribution under slutpunkten

Anta att det finns en ny version av modellen som skapats av utvecklingsteamet och att den är redo att vara i produktion. Vi kan först försöka flyga den här modellen och när vi är säkra kan vi uppdatera slutpunkten för att dirigera trafiken till den.

  1. Registrera en ny modellversion

    MODEL_NAME='heart-classifier'
    az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"
    

    Nu ska vi hämta versionsnumret för den nya modellen:

    VERSION=$(az ml model show -n heart-classifier --label latest | jq -r ".version")
    
  2. Konfigurera en ny distribution

    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
    

    Vi namnger distributionen på följande sätt:

    GREEN_DEPLOYMENT_NAME="xgboost-model-$VERSION"
    
  3. Skapa den nya distributionen

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

    Om slutpunkten inte har utgående anslutning använder du modellpaketering (förhandsversion) genom att inkludera flaggan --with-package:

    az ml online-deployment create --with-package -n $GREEN_DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME -f green-deployment.yml
    
  4. Testa distributionen utan att ändra trafik

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

    Dricks

    Observera hur vi nu anger namnet på den distribution som vi vill anropa.

Uppdatera trafiken progressivt

Som vi är säkra på med den nya distributionen kan vi uppdatera trafiken för att dirigera en del av den till den nya distributionen. Trafiken konfigureras på slutpunktsnivå:

  1. Konfigurera trafiken:

    Det här steget krävs inte i Azure CLI

  2. Uppdatera slutpunkten

    az ml online-endpoint update --name $ENDPOINT_NAME --traffic "default=90 $GREEN_DEPLOYMENT_NAME=10"
    
  3. Om du bestämmer dig för att växla hela trafiken till den nya distributionen uppdaterar du all trafik:

    Det här steget krävs inte i Azure CLI

  4. Uppdatera slutpunkten

    az ml online-endpoint update --name $ENDPOINT_NAME --traffic "default=0 $GREEN_DEPLOYMENT_NAME=100"
    
  5. Eftersom den gamla distributionen inte tar emot någon trafik kan du ta bort den på ett säkert sätt:

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

    Dricks

    Observera att den tidigare "blå distributionen" nu har tagits bort och att den nya "gröna distributionen" har ersatts av den "blå distributionen".

Rensa resurser

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

Viktigt!

Observera att borttagning av en slutpunkt även tar bort alla distributioner under den.

Nästa steg