Spåra Maskininlärningsexperiment i Azure Databricks med MLflow och Azure Mašinsko učenje
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 Mašinsko učenje för att säkerställa att du får ut det bästa av båda produkterna.
I den här artikel får du lära dig om:
- De bibliotek som krävs för att använda MLflow med Azure Databricks och Azure Mašinsko učenje.
- Så här spårar du Azure Databricks-körningar med MLflow i Azure Mašinsko učenje.
- Så här loggar du modeller med MLflow för att få dem registrerade i Azure Mašinsko učenje.
- Så här distribuerar och använder du modeller som registrerats i Azure Mašinsko učenje.
Förutsättningar
- Paketet
azureml-mlflow
, som hanterar anslutningen med Azure Mašinsko učenje, inklusive autentisering. - En Azure Databricks-arbetsyta och ett kluster.
- En Azure Mašinsko učenje-arbetsyta.
Se vilka åtkomstbehörigheter du behöver för att utföra dina MLflow-åtgärder med din arbetsyta.
Exempelnotebook-filer
Träningsmodellerna i Azure Databricks och distributionen av dem på Azure Mašinsko učenje-lagringsplatsen visar hur du tränar modeller i Azure Databricks och distribuerar dem i Azure Mašinsko učenje. Den beskriver också hur du spårar experiment och modeller med MLflow-instansen i Azure Databricks. Den beskriver hur du använder Azure Mašinsko učenje för distribution.
Installera bibliotek
Så här installerar du bibliotek i klustret:
Gå till fliken Bibliotek och välj 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 paket i klustret för experimentet.
Spåra Azure Databricks-körningar med MLflow
Du kan konfigurera Azure Databricks för att spåra experiment med MLflow på två sätt:
- Spåra på både Azure Databricks-arbetsytan och Azure Mašinsko učenje-arbetsytan (dubbel spårning)
- Spåra exklusivt på Azure Mašinsko učenje
När du länkar din Azure Databricks-arbetsyta konfigureras dubbelspårning som standard åt dig.
Dubbelspår på Azure Databricks och Azure Mašinsko učenje
Genom att länka din Azure Databricks-arbetsyta till din Azure Mašinsko učenje-arbetsyta kan du spåra dina experimentdata på Arbetsytan Azure Mašinsko učenje och Azure Databricks på samma gång. Den här konfigurationen kallas dubbelspårning.
Dubbel spårning i en privat länk aktiverad Azure Mašinsko učenje arbetsyta stöds inte för närvarande. Konfigurera exklusiv spårning med din Azure Mašinsko učenje-arbetsyta i stället.
Dubbel spårning stöds för närvarande inte i Microsoft Azure som drivs av 21Vianet. Konfigurera exklusiv spårning med din Azure Mašinsko učenje-arbetsyta i stället.
Så här länkar du din Azure Databricks-arbetsyta till en ny eller befintlig Azure Mašinsko učenje-arbetsyta:
Logga in på Azure-portalen.
Gå till översiktssidan för Azure Databricks-arbetsytan.
Välj Länka Azure Mašinsko učenje arbetsyta.
När du har länkat din Azure Databricks-arbetsyta till din Azure Mašinsko učenje-arbetsyta spåras MLflow-spårning automatiskt på följande platser:
- Den länkade Azure Mašinsko učenje-arbetsytan.
- Din ursprungliga Azure Databricks-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 vanligt i Azure Databricks och några parametrar börjar loggas.
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
I stället för spårning stöder modellregister inte registrering av modeller samtidigt på både Azure Mašinsko učenje och Azure Databricks. Mer information finns i Registrera modeller i registret med MLflow.
Spåra exklusivt på Azure Mašinsko učenje-arbetsyta
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-Mašinsko učenje arbetsyta. Den här konfigurationen har fördelen att du kan aktivera enklare distributionsväg med hjälp av Distributionsalternativ för Azure Mašinsko učenje.
Varning
För privat länkaktiverad Azure Mašinsko učenje-arbetsyta måste du distribuera Azure Databricks i ditt eget nätverk (VNet-inmatning) för att säkerställa korrekt anslutning.
Konfigurera URI:n för MLflow-spårning så att den endast pekar på Azure Mašinsko učenje, som du ser 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-tillägget v2 (aktuellt)
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 hjälp av
az ml workspace
kommandot .az ml workspace show --query mlflow_tracking_uri
Konfigurera spårnings-URI:n.
Metoden
set_tracking_uri()
pekar 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, kan du ange miljövariabeln MLFLOW_TRACKING_URI
på klusternivå. Med den här metoden kan du automatiskt konfigurera MLflow-spårnings-URI:n så att den pekar på Azure Mašinsko učenje för alla sessioner som körs i klustret i stället för att göra det per session.
När du har konfigurerat miljövariabeln spåras alla experiment som körs i ett sådant kluster i Azure Mašinsko učenje.
Konfigurera autentisering
När du har konfigurerat spårning konfigurerar du hur du autentiserar till den associerade arbetsytan. Som standard öppnar Azure Mašinsko učenje-plugin-programmet för MLflow en webbläsare för att interaktivt fråga efter autentiseringsuppgifter. Andra sätt att konfigurera autentisering för MLflow i Azure Mašinsko učenje-arbetsytor finns i Konfigurera MLflow för Azure Mašinsko učenje: Konfigurera autentisering.
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 den frågar efter autentiseringsuppgifter. Den här metoden är inte lämplig för autentisering i obevakade miljöer som träningsjobb. Vi rekommenderar att du konfigurerar ett 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 Mašinsko učenje.
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.
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>}}
. Mer information om hur du implementerar den här metoden i Azure Databricks finns i Referens till en hemlighet i en miljövariabel eller i dokumentationen för din plattform.
Namnexperiment i Azure Mašinsko učenje
När du konfigurerar MLflow för att uteslutande spåra experiment i Azure Mašinsko učenje arbetsyta måste namngivningskonventionen för experiment följa den som används av Azure Mašinsko učenje. I Azure Databricks namnges experiment med sökvägen till där experimentet sparas, till exempel /Users/alice@contoso.com/iris-classifier
. I Azure Mašinsko učenje anger du dock experimentnamnet direkt. Samma experiment skulle namnges iris-classifier
direkt.
mlflow.set_experiment(experiment_name="experiment-name")
Spåra parametrar, mått och artefakter
Efter den här konfigurationen kan du 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.
Loggmodeller 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")
Smaken spark
motsvarar inte det faktum att du tränar en modell i ett Spark-kluster. I stället följer det av träningsramverket som används. Du kan träna en modell med TensorFlow med Spark. Den smak som ska användas är tensorflow
.
Modeller loggas inuti körningen som spåras. Det innebär att modeller är tillgängliga i både Azure Databricks och Azure Mašinsko učenje (standard) eller exklusivt i Azure Mašinsko učenje om du har konfigurerat spårnings-URI:n så att den pekar på den.
Viktigt!
Parametern registered_model_name
har inte angetts. Mer information om den här parametern och registret finns i Registrera modeller i registret med MLflow.
Registrera modeller i registret med MLflow
Till skillnad från spårning kan modellregister inte fungera samtidigt i Azure Databricks och Azure Mašinsko učenje. De måste använda antingen den ena eller den andra. Som standard använder modellregister Azure Databricks-arbetsytan. Om du väljer att ange att MLflow-spårning endast ska spåras i din Azure Mašinsko učenje-arbetsyta är modellregistret Azure Mašinsko učenje-arbetsytan.
Om du använder standardkonfigurationen loggar följande kod en modell i motsvarande körningar av både Azure Databricks och Azure Mašinsko učenje, men den registrerar den bara 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 Mašinsko učenje-registret med MLflow
Om du vill använda Azure Mašinsko učenje Model Registry i stället för Azure Databricks rekommenderar vi att du anger att MLflow-spårning endast ska spåras på din Azure Mašinsko učenje-arbetsyta. Den här metoden tar bort tvetydigheten i var modeller registreras och förenklar konfigurationen.
Om du vill fortsätta använda funktionerna för dubbel spårning men registrera modeller i Azure Mašinsko učenje kan du instruera MLflow att använda Azure Mašinsko učenje för modellregister genom att konfigurera URI:n för MLflow Model Registry. Den här URI:n har samma format och värde som det MLflow som spårar URI.
mlflow.set_registry_uri(azureml_mlflow_uri)
Kommentar
Värdet azureml_mlflow_uri
för erhölls på samma sätt som beskrivs i Ange MLflow-spårning för att endast spåra i din Azure Mašinsko učenje-arbetsyta.
Ett fullständigt exempel på det här scenariot finns i Träningsmodeller i Azure Databricks och distribuera dem i Azure Mašinsko učenje.
Distribuera och använda modeller som registrerats i Azure Mašinsko učenje
Modeller som registrerats i Azure Mašinsko učenje Service med MLflow kan användas som:
- En Azure-Mašinsko učenje slutpunkt (realtid och batch). Med den här distributionen kan du använda Distributionsfunktioner i Azure Mašinsko učenje för både realtids- och batchinferens i Azure Container Instances, Azure Kubernetes eller Managed Inference Endpoints.
- MLFlow-modellobjekt eller användardefinierade Pandas-funktioner (UDF: er), som kan användas i Notebook-filer i Azure Databricks i strömnings- eller batchpipelines.
Distribuera modeller till Azure Mašinsko učenje-slutpunkter
Du kan använda plugin-programmet azureml-mlflow
för att distribuera en modell till din Azure Mašinsko učenje-arbetsyta. Mer information om hur du distribuerar modeller till de olika målen Så här distribuerar du MLflow-modeller.
Viktigt!
Modeller måste registreras i Azure Mašinsko učenje-registret för att kunna distribuera dem. Om dina modeller är registrerade i MLflow-instansen i Azure Databricks registrerar du dem igen i Azure Mašinsko učenje. Mer information finns i Träningsmodeller i Azure Databricks och distribuera dem i Azure Mašinsko učenje
Distribuera modeller till Azure Databricks för batchbedömning med hjälp av UDF:er
Du kan välja Azure Databricks-kluster för batchbedömning. Med mlflow kan du lösa alla modeller från registret som du är ansluten till. Du använder vanligtvis någon av följande metoder:
- Om din modell har tränats och skapats med Spark-bibliotek som
MLLib
använder dumlflow.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. Du måste samordna alla parallelliseringar eller arbetsdistributioner som du vill ska ske i klustret. MLflow installerar inte 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)
Fler sätt att referera 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 det här kommandot 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 Mašinsko učenje-arbetsytan, kan du ta bort Azure Mašinsko učenje-arbetsytan. Den här åtgärden resulterar i att din Azure Databricks-arbetsyta och Azure Mašinsko učenje-arbetsytan kopplas bort.
Om du inte planerar att använda de loggade måtten och artefakterna på arbetsytan tar du bort resursgruppen som innehåller lagringskontot och arbetsytan.
- Sök efter Resursgrupper i Azure-portalen. Under tjänster väljer du Resursgrupper.
- I listan Resursgrupper letar du upp och väljer den resursgrupp som du skapade för att öppna den.
- På sidan Översikt väljer du Ta bort resursgrupp.
- Om du vill verifiera borttagningen anger du resursgruppens namn.