Delen via


ML-modellen bijhouden met MLflow en Azure Machine Learning

VAN TOEPASSING OP:Python SDK azureml v1

In dit artikel leert u hoe u MLflow-tracering inschakelt om Azure Machine Learning te verbinden als de back-end van uw MLflow-experimenten.

MLflow is een opensource-bibliotheek voor het beheren van de levenscyclus van uw machine learning-experimenten. MLflow Tracking is een onderdeel van MLflow waarmee metrische gegevens van uw trainingsuitvoering en modelartefacten worden bijgehouden en bijgehouden, ongeacht de omgeving van uw experiment, lokaal op uw computer, op een extern rekendoel, een virtuele machine of een Azure Databricks-cluster.

Zie MLflow en Azure Machine Learning voor alle ondersteunde MLflow- en Azure Machine Learning-functionaliteit, waaronder ondersteuning voor MLflow-projecten (preview) en modelimplementatie.

Tip

Als u experimenten wilt bijhouden die worden uitgevoerd in Azure Databricks of Azure Synapse Analytics, raadpleegt u de speciale artikelen Azure Databricks ML-experimenten bijhouden met MLflow en Azure Machine Learning of Ml-experimenten van Azure Synapse Analytics bijhouden met MLflow en Azure Machine Learning.

Notitie

De informatie in dit document is voornamelijk bedoeld voor gegevenswetenschappers en ontwikkelaars die het modeltrainingsproces willen bewaken. Als u een beheerder bent die geïnteresseerd is in het bewaken van het resourcegebruik en gebeurtenissen van Azure Machine Learning, zoals quota, voltooide trainingstaken of voltooide modelimplementaties, raadpleegt u Bewaking van Azure Machine Learning.

Vereisten

Uitvoeringen bijhouden vanaf uw lokale computer of externe berekeningen

Bijhouden met MLflow met Azure Machine Learning stelt u in staat om de vastgelegde metrische gegevens en artefacten die zijn uitgevoerd op uw lokale computer op te slaan in uw Azure Machine Learning-werkruimte.

Traceringsomgeving instellen

Als u een uitvoering wilt bijhouden die niet wordt uitgevoerd op Azure Machine Learning Compute (vanaf nu 'lokale berekening' genoemd), moet u uw lokale berekening verwijzen naar de Azure Machine Learning MLflow Tracking-URI.

Notitie

Wanneer u uitvoert op Azure Compute (Azure Notebooks, Jupyter Notebooks die worden gehost op Azure Compute Instances of Rekenclusters), hoeft u de tracerings-URI niet te configureren. Deze wordt automatisch voor u geconfigureerd.

VAN TOEPASSING OP:Python SDK azureml v1

U kunt de Azure Machine Learning MLflow-tracerings-URI ophalen met behulp van de Azure Machine Learning SDK v1 voor Python. Zorg ervoor dat de bibliotheek azureml-sdk is geïnstalleerd in het cluster dat u gebruikt. In het volgende voorbeeld wordt de unieke MLFLow-tracerings-URI ophaalt die is gekoppeld aan uw werkruimte. Vervolgens wijst de methode set_tracking_uri() de MLflow-tracerings-URI naar die URI.

  1. Het configuratiebestand voor de werkruimte gebruiken:

    from azureml.core import Workspace
    import mlflow
    
    ws = Workspace.from_config()
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

    Tip

    U kunt het configuratiebestand voor de werkruimte downloaden door:

    1. Ga naar Azure Machine Learning-studio
    2. Klik op de rechterbovenhoek van de pagina -> Configuratiebestand downloaden.
    3. Sla het bestand config.json op in dezelfde map waar u aan werkt.
  2. Met behulp van de abonnements-id, de naam van de resourcegroep en de naam van de werkruimte:

    from azureml.core import Workspace
    import mlflow
    
    #Enter details of your Azure Machine Learning workspace
    subscription_id = '<SUBSCRIPTION_ID>'
    resource_group = '<RESOURCE_GROUP>'
    workspace_name = '<AZUREML_WORKSPACE_NAME>'
    
    ws = Workspace.get(name=workspace_name,
                       subscription_id=subscription_id,
                       resource_group=resource_group)
    
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

Naam van experiment instellen

Alle MLflow-uitvoeringen worden geregistreerd in het actieve experiment. Uitvoeringen worden standaard geregistreerd bij een experiment met de naam Default dat automatisch voor u wordt gemaakt. Als u het experiment wilt configureren waaraan u wilt werken, gebruikt u de opdracht MLflow mlflow.set_experiment().

experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)

Tip

Wanneer u taken verzendt met de Azure Machine Learning SDK, kunt u de naam van het experiment instellen met behulp van de eigenschap experiment_name wanneer u deze verzendt. U hoeft deze niet te configureren in uw trainingsscript.

Trainingsuitvoering starten

Nadat u de naam van het MLflow-experiment hebt ingesteld, kunt u de trainingsuitvoering starten met start_run(). log_metric() Gebruik vervolgens om de MLflow-logboekregistratie-API te activeren en begin met het registreren van de metrische gegevens van de trainingsuitvoering.

import os
from random import random

with mlflow.start_run() as mlflow_run:
    mlflow.log_param("hello_param", "world")
    mlflow.log_metric("hello_metric", random())
    os.system(f"echo 'hello world' > helloworld.txt")
    mlflow.log_artifact("helloworld.txt")

Zie Metrische gegevens vastleggen en weergeven voor meer informatie over het vastleggen van metrische gegevens, parameters en artefacten in een uitvoering met behulp van MLflow.

Uitvoeringen bijhouden die worden uitgevoerd in Azure Machine Learning

VAN TOEPASSING OP:Python SDK azureml v1

Met externe uitvoeringen (taken) kunt u uw modellen op een robuustere en terugkerende manier trainen. Ze kunnen ook gebruikmaken van krachtigere berekeningen, zoals Machine Learning Compute-clusters. Zie Compute-doelen gebruiken voor modeltraining voor meer informatie over verschillende rekenopties.

Bij het verzenden van uitvoeringen configureert Azure Machine Learning MLflow automatisch voor gebruik met de werkruimte waarin de uitvoering wordt uitgevoerd. Dit betekent dat u de MLflow-tracerings-URI niet hoeft te configureren. Bovendien worden experimenten automatisch benoemd op basis van de details van het indienen van het experiment.

Belangrijk

Wanneer u trainingstaken naar Azure Machine Learning verzendt, hoeft u de MLflow-tracerings-URI niet te configureren in uw trainingslogica, omdat deze al voor u is geconfigureerd. U hoeft de naam van het experiment ook niet te configureren in uw trainingsroutine.

Een trainingsroutine maken

Maak eerst een src submap en maak een bestand met uw trainingscode in een train.py bestand in de src submap. Al uw trainingscode gaat naar de submap van src, met inbegrip van train.py.

De trainingscode is afkomstig uit dit MLflow-voorbeeld in de Azure Machine Learning-voorbeeldopslagplaats.

Kopieer deze code naar het bestand:

# imports
import os
import mlflow

from random import random

# define functions
def main():
    mlflow.log_param("hello_param", "world")
    mlflow.log_metric("hello_metric", random())
    os.system(f"echo 'hello world' > helloworld.txt")
    mlflow.log_artifact("helloworld.txt")


# run functions
if __name__ == "__main__":
    # run main function
    main()

Het experiment configureren

U moet Python gebruiken om het experiment naar Azure Machine Learning te verzenden. Configureer in een notebook of Python-bestand de omgeving voor reken- en trainingsuitvoering met de Environment klasse .

from azureml.core import Environment
from azureml.core.conda_dependencies import CondaDependencies

env = Environment(name="mlflow-env")

# Specify conda dependencies with scikit-learn and temporary pointers to mlflow extensions
cd = CondaDependencies.create(
    conda_packages=["scikit-learn", "matplotlib"],
    pip_packages=["azureml-mlflow", "pandas", "numpy"]
    )

env.python.conda_dependencies = cd

Maak vervolgens met ScriptRunConfig uw externe berekening als rekendoel.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory="src",
                      script=training_script,
                      compute_target="<COMPUTE_NAME>",
                      environment=env)

Met deze configuratie van reken- en trainingsuitvoering gebruikt u de Experiment.submit() methode om een uitvoering te verzenden. Met deze methode wordt automatisch de MLflow-tracerings-URI ingesteld en wordt de logboekregistratie van MLflow naar uw werkruimte verplaatst.

from azureml.core import Experiment
from azureml.core import Workspace
ws = Workspace.from_config()

experiment_name = "experiment_with_mlflow"
exp = Experiment(workspace=ws, name=experiment_name)

run = exp.submit(src)

Metrische gegevens en artefacten weergeven in uw werkruimte

De metrische gegevens en artefacten van MLflow-logboekregistratie worden bijgehouden in uw werkruimte. Als u ze op elk gewenst moment wilt bekijken, gaat u naar uw werkruimte en zoekt u het experiment op naam in uw werkruimte in Azure Machine Learning-studio. Of voer de onderstaande code uit.

Metrische uitvoeringswaarde ophalen met behulp van MLflow get_run().

from mlflow.tracking import MlflowClient

# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
run_id = mlflow_run.info.run_id
finished_mlflow_run = MlflowClient().get_run(run_id)

metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params

print(metrics,tags,params)

Als u de artefacten van een uitvoering wilt weergeven, kunt u MlFlowClient.list_artifacts() gebruiken

client.list_artifacts(run_id)

Als u een artefact wilt downloaden naar de huidige map, kunt u MLFlowClient.download_artifacts() gebruiken

client.download_artifacts(run_id, "helloworld.txt", ".")

Voor meer informatie over het ophalen van informatie uit experimenten en uitvoeringen in Azure Machine Learning met behulp van MLflow bekijkt u experimenten en uitvoeringen beheren met MLflow.

Vergelijken en query's uitvoeren

Vergelijk en bevraag alle MLflow-uitvoeringen in uw Azure Machine Learning-werkruimte met de volgende code. Meer informatie over het uitvoeren van query's met MLflow.

from mlflow.entities import ViewType

all_experiments = [exp.experiment_id for exp in MlflowClient().list_experiments()]
query = "metrics.hello_metric > 0"
runs = mlflow.search_runs(experiment_ids=all_experiments, filter_string=query, run_view_type=ViewType.ALL)

runs.head(10)

Automatische logboekregistratie

Met Azure Machine Learning en MLFlow kunnen gebruikers automatisch metrische gegevens, modelparameters en modelartefacten registreren bij het trainen van een model. Er worden diverse populaire machine learning-bibliotheken ondersteund.

Als u automatische logboekregistratie wilt inschakelen, voegt u de volgende code in vóór uw trainingscode:

mlflow.autolog()

Meer informatie over Automatische logboekregistratie met MLflow.

Modellen beheren

Registreer en volg uw modellen met het Azure Machine Learning-modelregister, dat ondersteuning biedt voor het MLflow-modelregister. Azure Machine Learning-modellen zijn afgestemd op het MLflow-modelschema, zodat u deze modellen eenvoudig kunt exporteren en importeren in verschillende werkstromen. De MLflow-gerelateerde metagegevens, zoals de uitvoerings-id, worden ook bijgehouden met het geregistreerde model voor traceerbaarheid. Gebruikers kunnen trainingsuitvoeringen indienen, modellen registreren en implementeren die zijn geproduceerd op basis van MLflow-uitvoeringen.

Zie MLflow-modellen implementeren en registreren als u uw model dat gereed is voor productie in één stap wilt implementeren en registreren.

Voer de volgende stappen uit om een model van een uitvoering te registreren en weer te geven:

  1. Zodra een uitvoering is voltooid, roept u de register_model() methode aan.

    # the model folder produced from a run is registered. This includes the MLmodel file, model.pkl and the conda.yaml.
    model_path = "model"
    model_uri = 'runs:/{}/{}'.format(run_id, model_path) 
    mlflow.register_model(model_uri,"registered_model_name")
    
  2. Bekijk het geregistreerde model in uw werkruimte met Azure Machine Learning-studio.

    In het volgende voorbeeld heeft het geregistreerde model my-model MLflow-traceringsmetagegevens gelabeld.

    register-mlflow-model

  3. Selecteer het tabblad Artefacten om alle modelbestanden weer te geven die zijn uitgelijnd met het MLflow-modelschema (conda.yaml, MLmodel, model.pkl).

    model-schema

  4. Selecteer MLmodel om het MLmodel-bestand te zien dat door de uitvoering is gegenereerd.

    MLmodel-schema

Resources opschonen

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 momenteel niet beschikbaar. Verwijder in plaats daarvan de resourcegroep met het opslagaccount en de werkruimte, zodat er geen kosten in rekening worden gebracht:

  1. Selecteer Resourcegroepen links in Azure Portal.

    Verwijderen in 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 vervolgens Verwijderen.

Voorbeeldnotebooks

De MLflow met Azure Machine Learning-notebooks laten de concepten in dit artikel zien en uitbreiden. Zie ook de door de community gestuurde opslagplaats , AzureML-Examples.

Volgende stappen