Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
Prerequisites
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:
- Installera Azure CLI och ml-tillägget till Azure CLI. Mer information finns i Installera, konfigurera och använda CLI (v2).
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.
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"Konfigurera slutpunkten
endpoint.yml
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json name: heart-classifier-edp auth_mode: keySkapa slutpunkten:
az ml online-endpoint create -n $ENDPOINT_NAME -f endpoint.ymlHä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".
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: 1Skapa distributionen
az ml online-deployment create --endpoint-name $ENDPOINT_NAME -f blue-deployment.yml --all-trafficOm 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-trafficTip
Vi anger flaggan
--all-traffici kommandot create, som tilldelar all trafik till den nya distributionen.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-trafficnär vi skapade.Uppdatera slutpunktskonfigurationen:
Det här steget krävs inte i Azure CLI eftersom vi använde
--all-trafficnär vi skapade.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" ] ] } }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.
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")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: 1Vi namnger distributionen på följande sätt:
GREEN_DEPLOYMENT_NAME="xgboost-model-$VERSION"Skapa den nya distributionen
az ml online-deployment create -n $GREEN_DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME -f green-deployment.ymlOm 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.ymlTesta distributionen utan att ändra trafik
az ml online-endpoint invoke --name $ENDPOINT_NAME --deployment-name $GREEN_DEPLOYMENT_NAME --request-file sample.jsonTip
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å:
Konfigurera trafiken:
Det här steget krävs inte i Azure CLI
Uppdatera slutpunkten
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "default=90 $GREEN_DEPLOYMENT_NAME=10"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
Uppdatera slutpunkten
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "default=0 $GREEN_DEPLOYMENT_NAME=100"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 defaultTip
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
Important
Observera att borttagning av en slutpunkt även tar bort alla distributioner under den.