Azure Databricks ML-experimenten bijhouden met MLflow en Azure Machine Learning
MLflow is een opensource-bibliotheek voor het beheren van de levenscyclus van uw machine learning-experimenten. U kunt MLflow gebruiken om Azure Databricks te integreren met Azure Machine Learning om ervoor te zorgen dat u het beste van beide producten krijgt.
In dit artikel leert u het volgende:
- De vereiste bibliotheken die nodig zijn voor het gebruik van MLflow met Azure Databricks en Azure Machine Learning.
- Azure Databricks-uitvoeringen bijhouden met MLflow in Azure Machine Learning.
- Modellen registreren met MLflow om ze geregistreerd te krijgen in Azure Machine Learning.
- Modellen implementeren en gebruiken die zijn geregistreerd in Azure Machine Learning.
Vereisten
- Installeer het
azureml-mlflow
pakket, dat de connectiviteit met Azure Machine Learning afhandelt, inclusief verificatie. - Een Azure Databricks-werkruimte en -cluster.
- Maak een Azure Machine Learning-werkruimte.
Voorbeeldnotebooks
De trainingsmodellen in Azure Databricks en het implementeren ervan in Azure Machine Learning laten zien hoe u modellen traint in Azure Databricks en implementeert in Azure Machine Learning. Het omvat ook hoe u cases kunt afhandelen waarin u ook de experimenten en modellen wilt bijhouden met het MLflow-exemplaar in Azure Databricks en azure Machine Learning wilt gebruiken voor implementatie.
Bibliotheken installeren
Als u bibliotheken in uw cluster wilt installeren, gaat u naar het tabblad Bibliotheken en selecteert u Nieuw installeren
Typ in het veld Pakket azureml-mlflow en selecteer vervolgens Installeren. Herhaal deze stap indien nodig om andere extra pakketten te installeren in uw cluster voor uw experiment.
Azure Databricks-uitvoeringen bijhouden met MLflow
Azure Databricks kan op twee manieren worden geconfigureerd om experimenten bij te houden met behulp van MLflow:
- Bijhouden in zowel de Azure Databricks-werkruimte als de Azure Machine Learning-werkruimte (dual-tracking)
- Exclusief bijhouden in Azure Machine Learning
Standaard wordt dual-tracking voor u geconfigureerd wanneer u uw Azure Databricks-werkruimte hebt gekoppeld.
Dual-tracking in Azure Databricks en Azure Machine Learning
Als u uw ADB-werkruimte koppelt aan uw Azure Machine Learning-werkruimte, kunt u uw experimentgegevens tegelijkertijd bijhouden in de Azure Machine Learning-werkruimte en Azure Databricks-werkruimte. Dit wordt dual-tracking genoemd.
Waarschuwing
Dual-tracking in een Azure Machine Learning-werkruimte met private link wordt momenteel niet ondersteund. Configureer in plaats daarvan exclusieve tracering met uw Azure Machine Learning-werkruimte .
Waarschuwing
Dual-tracking wordt momenteel niet ondersteund in Microsoft Azure beheerd door 21Vianet. Configureer in plaats daarvan exclusieve tracering met uw Azure Machine Learning-werkruimte .
Als u uw ADB-werkruimte wilt koppelen aan een nieuwe of bestaande Azure Machine Learning-werkruimte,
- Meld u aan bij de Azure-portal.
- Navigeer naar de overzichtspagina van uw ADB-werkruimte.
- Selecteer de knop Azure Machine Learning-werkruimte koppelen rechtsonder.
Nadat u uw Azure Databricks-werkruimte hebt gekoppeld aan uw Azure Machine Learning-werkruimte, wordt MLflow Tracking automatisch ingesteld op alle volgende locaties:
- De gekoppelde Azure Machine Learning-werkruimte.
- Uw oorspronkelijke ADB-werkruimte.
U kunt vervolgens MLflow in Azure Databricks op dezelfde manier gebruiken als u gewend bent. In het volgende voorbeeld wordt de naam van het experiment ingesteld, omdat dit meestal wordt gedaan in Azure Databricks en begint u met het vastleggen van enkele parameters:
import mlflow
experimentName = "/Users/{user_name}/{experiment_folder}/{experiment_name}"
mlflow.set_experiment(experimentName)
with mlflow.start_run():
mlflow.log_param('epochs', 20)
pass
Notitie
Net als bijhouden bieden modelregisters geen ondersteuning voor het tegelijkertijd registreren van modellen op zowel Azure Machine Learning als Azure Databricks. Een of de andere moet worden gebruikt. Lees de sectie Modellen registreren in het register met MLflow voor meer informatie.
Exclusief bijhouden in Azure Machine Learning-werkruimte
Als u uw bijgehouden experimenten liever op een centrale locatie wilt beheren, kunt u MLflow-tracering zo instellen dat ze alleen worden bijgehouden in uw Azure Machine Learning-werkruimte. Deze configuratie heeft het voordeel dat u eenvoudiger implementatiepad kunt inschakelen met behulp van Azure Machine Learning-implementatieopties.
Waarschuwing
Voor een Azure Machine Learning-werkruimte waarvoor Private Link is ingeschakeld, moet u Azure Databricks implementeren in uw eigen netwerk (VNet-injectie) om de juiste connectiviteit te garanderen.
U moet de MLflow-tracerings-URI zo configureren dat deze uitsluitend verwijst naar Azure Machine Learning, zoals wordt weergegeven in het volgende voorbeeld:
Tracerings-URI configureren
Haal de tracerings-URI voor uw werkruimte op:
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidige)
Meld u aan en configureer uw werkruimte:
az account set --subscription <subscription> az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
U kunt de tracerings-URI ophalen met behulp van de
az ml workspace
opdracht:az ml workspace show --query mlflow_tracking_uri
De tracerings-URI configureren:
Vervolgens wijst de methode
set_tracking_uri()
de MLflow-tracerings-URI naar die URI.import mlflow mlflow.set_tracking_uri(mlflow_tracking_uri)
Tip
Wanneer u werkt aan gedeelde omgevingen, zoals een Azure Databricks-cluster, Azure Synapse Analytics-cluster of vergelijkbaar, is het handig om de omgevingsvariabele
MLFLOW_TRACKING_URI
op clusterniveau in te stellen om de MLflow-tracerings-URI automatisch te configureren om te verwijzen naar Azure Machine Learning voor alle sessies die in het cluster worden uitgevoerd in plaats van dit per sessie te doen.Zodra de omgevingsvariabele is geconfigureerd, wordt elk experiment dat in een dergelijk cluster wordt uitgevoerd, bijgehouden in Azure Machine Learning.
Verificatie configureren
Zodra het bijhouden is geconfigureerd, moet u ook configureren hoe de verificatie moet gebeuren met de gekoppelde werkruimte. De Azure Machine Learning-invoegtoepassing voor MLflow voert standaard interactieve verificatie uit door de standaardbrowser te openen om om referenties te vragen. Raadpleeg MLflow configureren voor Azure Machine Learning: verificatie configureren voor aanvullende manieren om verificatie voor MLflow in Azure Machine Learning-werkruimten te configureren.
Voor interactieve taken waarbij er een gebruiker is verbonden met de sessie, kunt u vertrouwen op interactieve verificatie en hoeft u dus geen verdere actie te ondernemen.
Waarschuwing
Met interactieve browserverificatie wordt de uitvoering van code geblokkeerd wanneer u om referenties wordt gevraagd. Het is geen geschikte optie voor verificatie in omgevingen zonder toezicht, zoals trainingstaken. U wordt aangeraden andere verificatiemodus te configureren.
Voor deze scenario's waarbij uitvoering zonder toezicht is vereist, moet u een service-principal configureren om te communiceren met 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>"
Tip
Wanneer u aan gedeelde omgevingen werkt, is het raadzaam om deze omgevingsvariabelen te configureren op de berekening. Als best practice kunt u ze waar mogelijk beheren als geheimen in een exemplaar van Azure Key Vault. In Azure Databricks kunt u bijvoorbeeld geheimen in omgevingsvariabelen als volgt gebruiken in de clusterconfiguratie: AZURE_CLIENT_SECRET={{secrets/<scope-name>/<secret-name>}}
Zie Verwijzen naar een geheim in een omgevingsvariabele om dit te doen in Azure Databricks of raadpleeg vergelijkbare documentatie in uw platform.
De namen van het experiment in Azure Machine Learning
Wanneer MLflow is geconfigureerd voor het exclusief bijhouden van experimenten in de Azure Machine Learning-werkruimte, moet de naamconventie van het experiment worden gevolgd die wordt gebruikt door Azure Machine Learning. In Azure Databricks worden experimenten benoemd met het pad naar waar het experiment wordt opgeslagen, zoals /Users/alice@contoso.com/iris-classifier
. In Azure Machine Learning moet u echter de naam van het experiment rechtstreeks opgeven. Net als in het vorige voorbeeld wordt hetzelfde experiment rechtstreeks benoemd iris-classifier
:
mlflow.set_experiment(experiment_name="experiment-name")
Parameters, metrische gegevens en artefacten bijhouden
U kunt vervolgens MLflow in Azure Databricks op dezelfde manier gebruiken als u gewend bent. Zie logboekgegevens en logboekbestanden voor meer informatie.
Modellen vastleggen met MLflow
Nadat uw model is getraind, kunt u het registreren bij de traceringsserver met de mlflow.<model_flavor>.log_model()
methode. <model_flavor>
, verwijst naar het framework dat is gekoppeld aan het model. Meer informatie over welke modelsmaak wordt ondersteund. In het volgende voorbeeld wordt een model dat is gemaakt met de Spark-bibliotheek MLLib geregistreerd:
mlflow.spark.log_model(model, artifact_path = "model")
Het is de moeite waard om te vermelden dat de smaak spark
niet overeenkomt met het feit dat we een model trainen in een Spark-cluster, maar vanwege het trainingsframework dat is gebruikt (u kunt een model perfect trainen met Behulp van TensorFlow met Spark en dus de smaak die u moet gebruiken tensorflow
).
Modellen worden geregistreerd in de uitvoering die wordt bijgehouden. Dat betekent dat modellen beschikbaar zijn in zowel Azure Databricks als Azure Machine Learning (standaard) of uitsluitend in Azure Machine Learning als u de tracerings-URI zo hebt geconfigureerd dat deze verwijst.
Belangrijk
U ziet dat hier de parameter registered_model_name
niet is opgegeven. Lees de sectie Modellen registreren in het register met MLflow voor meer informatie over de gevolgen van deze parameter en hoe het register werkt.
Modellen registreren in het register met MLflow
Net als bijhouden kunnen modelregisters niet tegelijkertijd worden uitgevoerd in Azure Databricks en Azure Machine Learning. Een of de andere moet worden gebruikt. De Azure Databricks-werkruimte wordt standaard gebruikt voor modelregisters; tenzij u ervoor kiest om MLflow Tracking in te stellen om alleen bij te houden in uw Azure Machine Learning-werkruimte, is het modelregister de Azure Machine Learning-werkruimte.
Als u vervolgens de standaardconfiguratie gebruikt, registreert de volgende regel een model in de bijbehorende uitvoeringen van Zowel Azure Databricks als Azure Machine Learning, maar wordt het alleen geregistreerd in Azure Databricks:
mlflow.spark.log_model(model, artifact_path = "model",
registered_model_name = 'model_name')
Als er geen geregistreerd model met de naam bestaat, registreert de methode een nieuw model, maakt u versie 1 en retourneert u een ModelVersion MLflow-object.
Als er al een geregistreerd model met de naam bestaat, maakt de methode een nieuwe modelversie en retourneert het versieobject.
Azure Machine Learning Registry gebruiken met MLflow
Als u Azure Machine Learning Model Registry wilt gebruiken in plaats van Azure Databricks, raden we u aan MLflow Tracking in te stellen om alleen bij te houden in uw Azure Machine Learning-werkruimte. Hierdoor wordt de dubbelzinnigheid verwijderd van waar modellen worden geregistreerd en wordt de complexiteit vereenvoudigd.
Als u echter de mogelijkheden voor dubbel bijhouden wilt blijven gebruiken, maar modellen wilt registreren in Azure Machine Learning, kunt u MLflow instrueren om Azure Machine Learning te gebruiken voor modelregisters door de register-URI van het MLflow-model te configureren. Deze URI heeft dezelfde indeling en waarde als de MLflow-tracerings-URI.
mlflow.set_registry_uri(azureml_mlflow_uri)
Notitie
De waarde van azureml_mlflow_uri
is op dezelfde manier verkregen als in MLflow-tracering instellen om alleen bij te houden in uw Azure Machine Learning-werkruimte
Voor een volledig voorbeeld van dit scenario controleert u de voorbeeldtrainingsmodellen in Azure Databricks en implementeert u deze in Azure Machine Learning.
Modellen implementeren en gebruiken die zijn geregistreerd in Azure Machine Learning
Modellen die zijn geregistreerd in Azure Machine Learning Service met behulp van MLflow, kunnen worden gebruikt als:
Een Azure Machine Learning-eindpunt (realtime en batch): met deze implementatie kunt u gebruikmaken van azure Machine Learning-implementatiemogelijkheden voor zowel realtime als batchdeductie in Azure Container Instances (ACI), Azure Kubernetes (AKS) of onze beheerde deductie-eindpunten.
MLFlow-modelobjecten of Pandas UDF's, die kunnen worden gebruikt in Azure Databricks-notebooks in streaming- of batchpijplijnen.
Modellen implementeren in Azure Machine Learning-eindpunten
U kunt de azureml-mlflow
invoegtoepassing gebruiken om een model te implementeren in uw Azure Machine Learning-werkruimte. Controleer de pagina MLflow-modellen implementeren voor een volledig detail over het implementeren van modellen op de verschillende doelen.
Belangrijk
Modellen moeten worden geregistreerd in het Azure Machine Learning-register om ze te kunnen implementeren. Als uw modellen worden geregistreerd in het MLflow-exemplaar in Azure Databricks, moet u ze opnieuw registreren in Azure Machine Learning. Als dit het geval is, controleert u de voorbeeldtrainingsmodellen in Azure Databricks en implementeert u deze in Azure Machine Learning
Modellen implementeren in ADB voor batchgewijs scoren met behulp van UDF's
U kunt Azure Databricks-clusters kiezen voor batchgewijs scoren. Door mlflow te gebruiken, kunt u elk model oplossen vanuit het register waaraan u bent verbonden. Doorgaans gebruikt u een van de volgende twee methoden:
- Als uw model is getraind en gebouwd met Spark-bibliotheken (zoals
MLLib
), gebruiktmlflow.pyfunc.spark_udf
u om een model te laden en gebruikt als Spark Pandas UDF om nieuwe gegevens te scoren. - Als uw model niet is getraind of gebouwd met Spark-bibliotheken, gebruikt
mlflow.pyfunc.load_model
ofmlflow.<flavor>.load_model
laadt u het model in het clusterstuurprogramma. U ziet dat op deze manier alle parallelle uitvoeringen of werkdistributie die u in het cluster wilt uitvoeren, door u moeten worden ingedeeld. U ziet ook dat MLflow geen bibliotheek installeert die uw model moet uitvoeren. Deze bibliotheken moeten worden geïnstalleerd in het cluster voordat u deze uitvoert.
In het volgende voorbeeld ziet u hoe u een model laadt uit het register met de naam uci-heart-classifier
en gebruikt als spark Pandas UDF om nieuwe gegevens te scoren.
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)
Tip
Controleer het laden van modellen uit het register voor meer manieren om te verwijzen naar modellen uit het register.
Zodra het model is geladen, kunt u nieuwe gegevens scoren:
#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)
Resources opschonen
Als u uw Azure Databricks-werkruimte wilt behouden, maar de Azure Machine Learning-werkruimte niet meer nodig hebt, kunt u de Azure Machine Learning-werkruimte verwijderen. Deze actie resulteert in het ontkoppelen van uw Azure Databricks-werkruimte en de Azure Machine Learning-werkruimte.
Als u niet van plan bent om de vastgelegde metrische gegevens en artefacten in uw werkruimte te gebruiken, is de mogelijkheid om ze afzonderlijk te verwijderen op dit moment niet beschikbaar. Verwijder in plaats daarvan de resourcegroep die het opslagaccount en de werkruimte bevat, zodat er geen kosten in rekening worden gebracht:
Selecteer Resourcegroepen links in Azure Portal.
Selecteer de resourcegroep die u eerder hebt gemaakt uit de lijst.
Selecteer Resourcegroep verwijderen.
Voer de naam van de resourcegroup in. Selecteer daarna Verwijderen.