Spåra Azure Databricks ML-experiment med MLflow och Azure Machine Learning
MLflow är ett bibliotek med öppen källkod för att hantera livscykeln för dina maskininlärningsexperiment. Du kan använda MLflow för att integrera Azure Databricks med Azure Machine Learning för att säkerställa att du får ut det bästa av båda produkterna.
I den här artikeln lär du dig att:
- De bibliotek som krävs för att använda MLflow med Azure Databricks och Azure Machine Learning.
- Så här spårar du Azure Databricks-körningar med MLflow i Azure Machine Learning.
- Så här loggar du modeller med MLflow för att få dem registrerade i Azure Machine Learning.
- Så här distribuerar och använder du modeller som registrerats i Azure Machine Learning.
Förutsättningar
azureml-mlflow
Installera paketet, som hanterar anslutningen med Azure Machine Learning, inklusive autentisering.- En Azure Databricks-arbetsyta och ett kluster.
- Skapa en Azure Machine Learning-arbetsyta.
Exempelnotebook-filer
Träningsmodellerna i Azure Databricks och distributionen av dem i Azure Machine Learning visar hur du tränar modeller i Azure Databricks och distribuerar dem i Azure Machine Learning. Den innehåller även hur du hanterar fall där du också vill spåra experimenten och modellerna med MLflow-instansen i Azure Databricks och använda Azure Machine Learning för distribution.
Installera bibliotek
Om du vill installera bibliotek i klustret går du till fliken Bibliotek och väljer Installera ny
I fältet Paket skriver du azureml-mlflow och väljer sedan installera. Upprepa det här steget efter behov för att installera andra ytterligare paket i klustret för experimentet.
Spåra Azure Databricks-körningar med MLflow
Azure Databricks kan konfigureras för att spåra experiment med MLflow på två sätt:
- Spåra på både Azure Databricks-arbetsytan och Azure Machine Learning-arbetsytan (dubbel spårning)
- Spåra exklusivt på Azure Machine Learning
Som standard konfigureras dubbel spårning åt dig när du har länkat din Azure Databricks-arbetsyta.
Dubbel spårning i Azure Databricks och Azure Machine Learning
Genom att länka DIN ADB-arbetsyta till din Azure Machine Learning-arbetsyta kan du spåra dina experimentdata på Azure Machine Learning-arbetsytan och Azure Databricks-arbetsytan på samma gång. Detta kallas dubbelspårning.
Varning
Dubbelspårning i en privat länkaktiverad Azure Machine Learning-arbetsyta stöds inte för tillfället. Konfigurera exklusiv spårning med din Azure Machine Learning-arbetsyta i stället.
Varning
Dubbelspårning i stöds inte i Microsoft Azure som drivs av 21Vianet för tillfället. Konfigurera exklusiv spårning med din Azure Machine Learning-arbetsyta i stället.
Om du vill länka DIN ADB-arbetsyta till en ny eller befintlig Azure Machine Learning-arbetsyta,
- Logga in på Azure-portal.
- Gå till ADB-arbetsytans översiktssida.
- Välj knappen Länka Azure Machine Learning-arbetsyta längst ned till höger.
När du har länkat din Azure Databricks-arbetsyta till din Azure Machine Learning-arbetsyta kommer MLflow Tracking automatiskt att spåras på alla följande platser:
- Den länkade Azure Machine Learning-arbetsytan.
- Din ursprungliga ADB-arbetsyta.
Du kan använda MLflow i Azure Databricks på samma sätt som du är van vid. I följande exempel anges experimentnamnet som det vanligtvis görs i Azure Databricks och börjar logga några parametrar:
import mlflow
experimentName = "/Users/{user_name}/{experiment_folder}/{experiment_name}"
mlflow.set_experiment(experimentName)
with mlflow.start_run():
mlflow.log_param('epochs', 20)
pass
Kommentar
Till skillnad från spårning stöder modellregister inte registrering av modeller samtidigt på både Azure Machine Learning och Azure Databricks. Antingen den ena eller den andra måste användas. Mer information finns i avsnittet Registrera modeller i registret med MLflow .
Spåra exklusivt på Azure Machine Learning-arbetsytan
Om du föredrar att hantera dina spårade experiment på en central plats kan du ange att MLflow-spårning endast ska spåras på din Azure Machine Learning-arbetsyta. Den här konfigurationen har fördelen att du kan aktivera enklare distributionsväg med hjälp av Distributionsalternativ för Azure Machine Learning.
Varning
För en privat länkaktiverad Azure Machine Learning-arbetsyta måste du distribuera Azure Databricks i ditt eget nätverk (VNet-inmatning) för att säkerställa korrekt anslutning.
Du måste konfigurera URI:n för MLflow-spårning så att den enbart pekar på Azure Machine Learning, vilket visas i följande exempel:
Konfigurera spårnings-URI
Hämta spårnings-URI:n för din arbetsyta:
GÄLLER FÖR:Azure CLI ml extension v2 (aktuell)
Logga in och konfigurera din arbetsyta:
az account set --subscription <subscription> az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Du kan hämta spårnings-URI:n med kommandot
az ml workspace
:az ml workspace show --query mlflow_tracking_uri
Konfigurera spårnings-URI:n:
Sedan pekar metoden
set_tracking_uri()
MLflow-spårnings-URI:n till den URI:n.import mlflow mlflow.set_tracking_uri(mlflow_tracking_uri)
Dricks
När du arbetar med delade miljöer, till exempel ett Azure Databricks-kluster, Azure Synapse Analytics-kluster eller liknande, är det användbart att ställa in miljövariabeln
MLFLOW_TRACKING_URI
på klusternivå för att automatiskt konfigurera MLflow-spårnings-URI:n så att den pekar på Azure Machine Learning för alla sessioner som körs i klustret i stället för att göra det per session.När miljövariabeln har konfigurerats spåras alla experiment som körs i ett sådant kluster i Azure Machine Learning.
Konfigurera autentisering
När spårningen har konfigurerats måste du också konfigurera hur autentiseringen ska ske på den associerade arbetsytan. Som standard utför Azure Machine Learning-plugin-programmet för MLflow interaktiv autentisering genom att öppna standardwebbläsaren för att fråga efter autentiseringsuppgifter. Se Konfigurera MLflow för Azure Machine Learning: Konfigurera autentisering till ytterligare sätt att konfigurera autentisering för MLflow på Azure Machine Learning-arbetsytor.
För interaktiva jobb där en användare är ansluten till sessionen kan du förlita dig på interaktiv autentisering och därför krävs ingen ytterligare åtgärd.
Varning
Interaktiv webbläsarautentisering blockerar kodkörning när du frågar efter autentiseringsuppgifter. Det är inte ett lämpligt alternativ för autentisering i obevakade miljöer som träningsjobb. Vi rekommenderar att du konfigurerar annat autentiseringsläge.
För de scenarier där obevakad körning krävs måste du konfigurera ett huvudnamn för tjänsten för att kommunicera med Azure Machine Learning.
import os
os.environ["AZURE_TENANT_ID"] = "<AZURE_TENANT_ID>"
os.environ["AZURE_CLIENT_ID"] = "<AZURE_CLIENT_ID>"
os.environ["AZURE_CLIENT_SECRET"] = "<AZURE_CLIENT_SECRET>"
Dricks
När du arbetar med delade miljöer rekommenderar vi att du konfigurerar dessa miljövariabler vid beräkningen. Vi rekommenderar att du hanterar dem som hemligheter i en instans av Azure Key Vault när det är möjligt. I Azure Databricks kan du till exempel använda hemligheter i miljövariabler enligt följande i klusterkonfigurationen: AZURE_CLIENT_SECRET={{secrets/<scope-name>/<secret-name>}}
. Se Referens till en hemlighet i en miljövariabel för hur du gör det i Azure Databricks eller se liknande dokumentation på din plattform.
Experimentets namn i Azure Machine Learning
När MLflow har konfigurerats för att uteslutande spåra experiment på Azure Machine Learning-arbetsytan måste experimentets namngivningskonvention följa den som används av Azure Machine Learning. I Azure Databricks namnges experiment med sökvägen till där experimentet sparas som /Users/alice@contoso.com/iris-classifier
. I Azure Machine Learning måste du dock ange experimentnamnet direkt. Precis som i föregående exempel skulle samma experiment namnges iris-classifier
direkt:
mlflow.set_experiment(experiment_name="experiment-name")
Spåra parametrar, mått och artefakter
Du kan använda MLflow i Azure Databricks på samma sätt som du är van vid. Mer information finns i Logga och visa mått och loggfiler.
Loggningsmodeller med MLflow
När din modell har tränats kan du logga den till spårningsservern med mlflow.<model_flavor>.log_model()
metoden . <model_flavor>
, refererar till det ramverk som är associerat med modellen. Lär dig vilka modellsmaker som stöds. I följande exempel registreras en modell som skapats med Spark-biblioteket MLLib:
mlflow.spark.log_model(model, artifact_path = "model")
Det är värt att nämna att smaken spark
inte motsvarar det faktum att vi tränar en modell i ett Spark-kluster, men på grund av träningsramverket användes den (du kan träna en modell perfekt med TensorFlow med Spark och därför skulle smaken att använda vara tensorflow
).
Modeller loggas inuti körningen som spåras. Det innebär att modeller är tillgängliga i både Azure Databricks och Azure Machine Learning (standard) eller uteslutande i Azure Machine Learning om du har konfigurerat spårnings-URI:n så att den pekar på den.
Viktigt!
Observera att parametern registered_model_name
inte har angetts här. Läs avsnittet Registrera modeller i registret med MLflow för mer information om konsekvenserna av en sådan parameter och hur registret fungerar.
Registrera modeller i registret med MLflow
Till skillnad från spårning kan modellregister inte fungera samtidigt i Azure Databricks och Azure Machine Learning. Antingen den ena eller den andra måste användas. Som standard används Azure Databricks-arbetsytan för modellregister. såvida du inte har valt att ange att MLflow Tracking endast ska spåras på din Azure Machine Learning-arbetsyta är modellregistret Azure Machine Learning-arbetsytan.
Med tanke på att du använder standardkonfigurationen loggar följande rad en modell i motsvarande körningar av både Azure Databricks och Azure Machine Learning, men den registrerar den endast på Azure Databricks:
mlflow.spark.log_model(model, artifact_path = "model",
registered_model_name = 'model_name')
Om det inte finns någon registrerad modell med namnet registrerar metoden en ny modell, skapar version 1 och returnerar ett ModelVersion MLflow-objekt.
Om det redan finns en registrerad modell med namnet skapar metoden en ny modellversion och returnerar versionsobjektet.
Använda Azure Machine Learning Registry med MLflow
Om du vill använda Azure Machine Learning Model Registry i stället för Azure Databricks rekommenderar vi att du anger att MLflow Tracking endast ska spåras på din Azure Machine Learning-arbetsyta. Detta tar bort tvetydigheten i var modeller registreras och förenklar komplexiteten.
Men om du vill fortsätta använda funktionerna för dubbel spårning men registrera modeller i Azure Machine Learning kan du instruera MLflow att använda Azure Machine Learning för modellregister genom att konfigurera MLflow Model Registry URI. Den här URI:n har exakt samma format och värde som URI:n för MLflow-spårning.
mlflow.set_registry_uri(azureml_mlflow_uri)
Kommentar
Värdet azureml_mlflow_uri
för erhölls på samma sätt som det demostraterades i Ange MLflow-spårning för att endast spåra på din Azure Machine Learning-arbetsyta
Ett fullständigt exempel på det här scenariot finns i exemplet Träningsmodeller i Azure Databricks och distribuera dem i Azure Machine Learning.
Distribuera och använda modeller som registrerats i Azure Machine Learning
Modeller som registrerats i Azure Machine Learning Service med MLflow kan användas som:
En Azure Machine Learning-slutpunkt (realtid och batch): Med den här distributionen kan du använda Azure Machine Learning-distributionsfunktioner för både realtids- och batchinferens i Azure Container Instances (ACI), Azure Kubernetes (AKS) eller våra slutpunkter för hanterad slutsatsdragning.
MLFlow-modellobjekt eller Pandas UDF:er, som kan användas i Azure Databricks-notebook-filer i strömnings- eller batchpipelines.
Distribuera modeller till Azure Machine Learning-slutpunkter
Du kan använda plugin-programmet azureml-mlflow
för att distribuera en modell till din Azure Machine Learning-arbetsyta. Kontrollera hur du distribuerar MLflow-modeller för en fullständig information om hur du distribuerar modeller till de olika målen.
Viktigt!
Modeller måste registreras i Azure Machine Learning-registret för att kunna distribuera dem. Om dina modeller råkar vara registrerade i MLflow-instansen i Azure Databricks måste du registrera dem igen i Azure Machine Learning. Om så är fallet kontrollerar du exempel på träningsmodeller i Azure Databricks och distribuerar dem i Azure Machine Learning
Distribuera modeller till ADB för batchbedömning med hjälp av UDF:er
Du kan välja Azure Databricks-kluster för batchbedömning. Genom att använda Mlflow kan du lösa alla modeller från registret som du är ansluten till. Du använder vanligtvis någon av följande två metoder:
- Om din modell har tränats och skapats med Spark-bibliotek (till exempel
MLLib
) kan du användamlflow.pyfunc.spark_udf
för att läsa in en modell och använda den som en Spark Pandas UDF för att poängsätta nya data. - Om din modell inte har tränats eller skapats med Spark-bibliotek använder
mlflow.pyfunc.load_model
du ellermlflow.<flavor>.load_model
läser in modellen i klusterdrivrutinen. Observera att alla parallelliseringar eller arbetsdistributioner som du vill ska ske i klustret på det här sättet måste samordnas av dig. Observera också att MLflow inte installerar något bibliotek som din modell kräver för att köras. Dessa bibliotek måste installeras i klustret innan du kör det.
I följande exempel visas hur du läser in en modell från registret med namnet uci-heart-classifier
och använder den som en Spark Pandas UDF för att poängsätta nya data.
from pyspark.sql.types import ArrayType, FloatType
model_name = "uci-heart-classifier"
model_uri = "models:/"+model_name+"/latest"
#Create a Spark UDF for the MLFlow model
pyfunc_udf = mlflow.pyfunc.spark_udf(spark, model_uri)
Dricks
Mer information om hur du refererar till modeller från registret finns i Läsa in modeller från registret .
När modellen har lästs in kan du använda för att poängsätta nya data:
#Load Scoring Data into Spark Dataframe
scoreDf = spark.table({table_name}).where({required_conditions})
#Make Prediction
preds = (scoreDf
.withColumn('target_column_name', pyfunc_udf('Input_column1', 'Input_column2', ' Input_column3', …))
)
display(preds)
Rensa resurser
Om du vill behålla din Azure Databricks-arbetsyta, men inte längre behöver Azure Machine Learning-arbetsytan, kan du ta bort Azure Machine Learning-arbetsytan. Den här åtgärden resulterar i att din Azure Databricks-arbetsyta och Azure Machine Learning-arbetsytan kopplas bort.
Om du inte planerar att använda de loggade måtten och artefakterna på din arbetsyta är möjligheten att ta bort dem individuellt inte tillgänglig just nu. Ta i stället bort resursgruppen som innehåller lagringskontot och arbetsytan, så att du inte debiteras några avgifter:
I Azure-portalen väljer du Resursgrupper längst till vänster.
Välj den resursgrupp i listan som du har skapat.
Välj Ta bort resursgrupp.
Ange resursgruppsnamnet. Välj sedan ta bort.