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:

Vereisten

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

mlflow with azure databricks

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 DB install mlflow library

Azure Databricks-uitvoeringen bijhouden met MLflow

Azure Databricks kan op twee manieren worden geconfigureerd om experimenten bij te houden met behulp van MLflow:

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,

  1. Meld u aan bij de Azure-portal.
  2. Navigeer naar de overzichtspagina van uw ADB-werkruimte.
  3. Selecteer de knop Azure Machine Learning-werkruimte koppelen rechtsonder.

Link Azure DB and Azure Machine Learning workspaces

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

  1. Haal de tracerings-URI voor uw werkruimte op:

    VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidige)

    1. Meld u aan en configureer uw werkruimte:

      az account set --subscription <subscription>
      az configure --defaults workspace=<workspace> group=<resource-group> location=<location> 
      
    2. U kunt de tracerings-URI ophalen met behulp van de az ml workspace opdracht:

      az ml workspace show --query mlflow_tracking_uri
      
  2. 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.

    Configure the environment variables in an Azure Databricks cluster

    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), gebruikt mlflow.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 of mlflow.<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:

  1. Selecteer Resourcegroepen links in Azure Portal.

    Delete in the Azure portal

  2. Selecteer de resourcegroep die u eerder hebt gemaakt uit de lijst.

  3. Selecteer Resourcegroep verwijderen.

  4. Voer de naam van de resourcegroup in. Selecteer daarna Verwijderen.

Volgende stappen