Experimenten en uitvoeringen opvragen en vergelijken met MLflow

Experimenten en taken (of uitvoeringen) in Azure Machine Learning kunnen worden opgevraagd met behulp van MLflow. U hoeft geen specifieke SDK te installeren om te beheren wat er gebeurt in een trainingstaak, waardoor een naadloze overgang tussen lokale uitvoeringen en de cloud ontstaat door cloudspecifieke afhankelijkheden te verwijderen. In dit artikel leert u hoe u experimenten opvraagt en vergelijkt en uitvoert in uw werkruimte met behulp van Azure Machine Learning en MLflow SDK in Python.

Met MLflow kunt u het volgende doen:

  • Experimenten in een werkruimte maken, doorzoeken, verwijderen en zoeken.
  • Query's uitvoeren, verwijderen en zoeken naar uitvoeringen in een werkruimte.
  • Metrische gegevens, parameters, artefacten en modellen bijhouden en ophalen uit uitvoeringen.

Zie ondersteuningsmatrix voor het uitvoeren van query's en experimenten in Azure Machine Learning voor een gedetailleerde vergelijking tussen opensource-MLflow en MLflow wanneer u verbinding hebt met Azure Machine Learning.

Notitie

De Azure Machine Learning Python SDK v2 biedt geen systeemeigen mogelijkheden voor logboekregistratie of tracering. Dit geldt niet alleen voor logboekregistratie, maar ook voor het uitvoeren van query's op de vastgelegde metrische gegevens. Gebruik in plaats daarvan MLflow om experimenten en uitvoeringen te beheren. In dit artikel wordt uitgelegd hoe u MLflow gebruikt voor het beheren van experimenten en uitvoeringen in Azure Machine Learning.

U kunt ook query's uitvoeren op experimenten en uitvoeringen met behulp van de MLflow REST API. Zie MLflow REST gebruiken met Azure Machine Learning voor een voorbeeld over hoe u deze kunt gebruiken.

Vereisten

  • Installeer het MLflow SDK-pakket mlflow en de Azure Machine Learning-invoegtoepassing voor MLflow azureml-mlflow.

    pip install mlflow azureml-mlflow
    

    Tip

    U kunt het mlflow-skinny pakket gebruiken. Dit is een lichtgewicht MLflow-pakket zonder SQL-opslag-, server-, UI- of data science-afhankelijkheden. mlflow-skinny wordt aanbevolen voor gebruikers die voornamelijk de mogelijkheden voor tracering en logboekregistratie van MLflow nodig hebben zonder de volledige suite met functies, waaronder implementaties, te importeren.

  • Een Azure Machine Learning-werkruimte. U kunt er een maken door de zelfstudie Machine Learning-resources maken te volgen.

  • Als u externe tracering uitvoert (dat wil gezegd, experimenten bijhouden die buiten Azure Machine Learning worden uitgevoerd), configureert u MLflow zodat deze verwijst naar de tracerings-URI van uw Azure Machine Learning-werkruimte. Zie MLflow configureren voor Azure Machine Learning voor meer informatie over het verbinden van MLflow met uw werkruimte.

Query- en zoekexperimenten

Gebruik MLflow om te zoeken naar experimenten in uw werkruimte. Zie de volgende voorbeelden:

  • Alle actieve experimenten ophalen:

    mlflow.search_experiments()
    

    Notitie

    Gebruik in oudere versies van MLflow (<2.0) in plaats daarvan de methode mlflow.list_experiments() .

  • Haal alle experimenten op, inclusief gearchiveerd:

    from mlflow.entities import ViewType
    
    mlflow.search_experiments(view_type=ViewType.ALL)
    
  • Een specifiek experiment op naam ophalen:

    mlflow.get_experiment_by_name(experiment_name)
    
  • Een specifiek experiment ophalen op basis van id:

    mlflow.get_experiment('1234-5678-90AB-CDEFG')
    

Experimenten zoeken

Met de search_experiments() methode, beschikbaar sinds Mlflow 2.0, kunt u zoeken naar experimenten die voldoen aan criteria met behulp van filter_string.

  • Meerdere experimenten ophalen op basis van hun id's:

    mlflow.search_experiments(filter_string="experiment_id IN ("
        "'CDEFG-1234-5678-90AB', '1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')"
    )
    
  • Alle experimenten ophalen die na een bepaalde tijd zijn gemaakt:

    import datetime
    
    dt = datetime.datetime(2022, 6, 20, 5, 32, 48)
    mlflow.search_experiments(filter_string=f"creation_time > {int(dt.timestamp())}")
    
  • Alle experimenten met een bepaalde tag ophalen:

    mlflow.search_experiments(filter_string=f"tags.framework = 'torch'")
    

Query- en zoekuitvoeringen

Met MLflow kunt u zoeken naar uitvoeringen binnen elk experiment, inclusief meerdere experimenten tegelijk. De methode mlflow.search_runs() accepteert het argument experiment_ids en experiment_name geeft aan welke experimenten u wilt zoeken. U kunt ook aangeven search_all_experiments=True of u in alle experimenten in de werkruimte wilt zoeken:

  • Op experimentnaam:

    mlflow.search_runs(experiment_names=[ "my_experiment" ])
    
  • Op experiment-id:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ])
    
  • Zoeken in alle experimenten in de werkruimte:

    mlflow.search_runs(filter_string="params.num_boost_round='100'", search_all_experiments=True)
    

U ziet dat experiment_ids u ondersteuning biedt voor een matrix van experimenten, zodat u, indien nodig, kunt zoeken in meerdere experimenten. Dit kan handig zijn als u uitvoeringen van hetzelfde model wilt vergelijken wanneer het wordt geregistreerd in verschillende experimenten (bijvoorbeeld door verschillende personen of verschillende projectiteraties).

Belangrijk

Als experiment_ids, experiment_namesof search_all_experiments niet is opgegeven, zoekt MLflow standaard in het huidige actieve experiment. U kunt het actieve experiment instellen met behulp van mlflow.set_experiment().

Standaard retourneert MLflow de gegevens in Pandas-indeling Dataframe , waardoor het handig is bij het verder verwerken van onze analyse van de uitvoeringen. Geretourneerde gegevens bevatten kolommen met:

  • Basisinformatie over de uitvoering.
  • Parameters met de naam params.<parameter-name>van de kolom.
  • Metrische gegevens (laatst vastgelegde waarde van elk) met de naam metrics.<metric-name>van de kolom.

Alle metrische gegevens en parameters worden ook geretourneerd bij het uitvoeren van query's. Voor metrische gegevens die meerdere waarden bevatten (bijvoorbeeld een verliescurve of een PULL-curve), wordt alleen de laatste waarde van de metrische waarde geretourneerd. Als u alle waarden van een bepaalde metrische waarde wilt ophalen, gebruikt u mlflow.get_metric_history de methode. Zie Parameters en metrische gegevens ophalen uit een uitvoering voor een voorbeeld.

Orderuitvoeringen

Experimenten worden standaard in aflopende volgorde uitgevoerd start_time. Dit is het tijdstip waarop het experiment in de wachtrij is geplaatst in Azure Machine Learning. U kunt deze standaardinstelling echter wijzigen met behulp van de parameter order_by.

  • Volgorde wordt uitgevoerd op kenmerken, zoals start_time:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ],
                       order_by=["attributes.start_time DESC"])
    
  • Orderuitvoeringen en limietresultaten. In het volgende voorbeeld wordt de laatste enkele uitvoering in het experiment geretourneerd:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       max_results=1, order_by=["attributes.start_time DESC"])
    
  • Volgorde wordt uitgevoerd op het kenmerk duration:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       order_by=["attributes.duration DESC"])
    

    Tip

    attributes.duration is niet aanwezig in MLflow OSS, maar is voor het gemak beschikbaar in Azure Machine Learning.

  • Volgorde wordt uitgevoerd op basis van de waarden van metrische gegevens:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ]).sort_values("metrics.accuracy", ascending=False)
    

    Waarschuwing

    Het gebruik met order_by expressies met metrics.*, params.*of tags.* in de parameter order_by wordt momenteel niet ondersteund. Gebruik in plaats daarvan de order_values methode van Pandas, zoals wordt weergegeven in het voorbeeld.

Filteruitvoeringen

U kunt ook zoeken naar een uitvoering met een specifieke combinatie in de hyperparameters met behulp van de parameter filter_string. Gebruik params deze functie voor toegang tot de parameters van de uitvoering, metrics voor toegang tot metrische gegevens die zijn vastgelegd in de uitvoering en attributes voor toegang tot details van uitvoeringsinformatie. MLflow biedt ondersteuning voor expressies die zijn gekoppeld aan het EN-trefwoord (de syntaxis biedt geen ondersteuning voor OF):

  • Zoekopdrachten worden uitgevoerd op basis van de waarde van een parameter:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="params.num_boost_round='100'")
    

    Waarschuwing

    Alleen operators =, likeen != worden ondersteund voor filteren parameters.

  • Zoekopdrachten worden uitgevoerd op basis van de waarde van een metrische waarde:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="metrics.auc>0.8")
    
  • Zoekopdrachten worden uitgevoerd met een bepaalde tag:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="tags.framework='torch'")
    
  • Zoekuitvoeringen die door een bepaalde gebruiker zijn gemaakt:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="attributes.user_id = 'John Smith'")
    
  • Zoekuitvoeringen die zijn mislukt. Zie Filter wordt uitgevoerd op status voor mogelijke waarden:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="attributes.status = 'Failed'")
    
  • Zoekopdrachten worden na een bepaalde tijd gemaakt:

    import datetime
    
    dt = datetime.datetime(2022, 6, 20, 5, 32, 48)
    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string=f"attributes.creation_time > '{int(dt.timestamp())}'")
    

    Tip

    Voor de sleutel attributesmoeten waarden altijd tekenreeksen zijn en daarom tussen aanhalingstekens worden gecodeerd.

  • Zoekuitvoeringen die langer dan één uur duren:

    duration = 360 * 1000 # duration is in milliseconds
    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string=f"attributes.duration > '{duration}'")
    

    Tip

    attributes.duration is niet aanwezig in MLflow OSS, maar is voor het gemak beschikbaar in Azure Machine Learning.

  • Zoekuitvoeringen met de id in een bepaalde set:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="attributes.run_id IN ('1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')")
    

Filteruitvoeringen op status

Wanneer u filtert op status, gebruikt MLflow een andere conventie om de verschillende mogelijke status van een uitvoering te noemen in vergelijking met Azure Machine Learning. In de volgende tabel ziet u de mogelijke waarden:

Azure Machine Learning-taakstatus MLFlow's attributes.status Betekenis
Niet gestart Scheduled De taak/uitvoering is ontvangen door Azure Machine Learning.
Queue Scheduled De taak/uitvoering is gepland voor uitvoering, maar deze is nog niet gestart.
Voorbereiden Scheduled De taak/uitvoering is nog niet gestart, maar er is een rekenproces toegewezen voor de uitvoering en de omgeving en de bijbehorende invoer wordt voorbereid.
Wordt uitgevoerd Running De taak/uitvoering is momenteel actief.
Voltooid Finished De taak/uitvoering is zonder fouten voltooid.
Mislukt Failed De taak/uitvoering is voltooid met fouten.
Geannuleerd Killed De taak/uitvoering is geannuleerd door de gebruiker of beëindigd door het systeem.

Voorbeeld:

mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                   filter_string="attributes.status = 'Failed'")

Metrische gegevens, parameters, artefacten en modellen ophalen

De methode search_runs retourneert een Pandas Dataframe die standaard een beperkte hoeveelheid informatie bevat. U kunt Indien nodig Python-objecten ophalen. Dit kan handig zijn om details over deze objecten op te halen. Gebruik de output_format parameter om te bepalen hoe uitvoer wordt geretourneerd:

runs = mlflow.search_runs(
    experiment_ids=[ "1234-5678-90AB-CDEFG" ],
    filter_string="params.num_boost_round='100'",
    output_format="list",
)

Details kunnen vervolgens worden geopend vanuit het info lid. In het volgende voorbeeld ziet u hoe u het run_idvolgende kunt ophalen:

last_run = runs[-1]
print("Last run ID:", last_run.info.run_id)

Parameters en metrische gegevens ophalen uit een uitvoering

Wanneer uitvoeringen worden geretourneerd met behulp van output_format="list", kunt u eenvoudig toegang krijgen tot parameters met behulp van de sleutel data:

last_run.data.params

Op dezelfde manier kunt u query's uitvoeren op metrische gegevens:

last_run.data.metrics

Voor metrische gegevens die meerdere waarden bevatten (bijvoorbeeld een verliescurve of een PULL-curve), wordt alleen de laatst vastgelegde waarde van de metrische waarde geretourneerd. Als u alle waarden van een bepaalde metrische waarde wilt ophalen, gebruikt u mlflow.get_metric_history de methode. Voor deze methode moet u het MlflowClientvolgende gebruiken:

client = mlflow.tracking.MlflowClient()
client.get_metric_history("1234-5678-90AB-CDEFG", "log_loss")

Artefacten ophalen uit een uitvoering

MLflow kan query's uitvoeren op elk artefact dat is vastgelegd door een uitvoering. Artefacten kunnen niet worden geopend met behulp van het uitvoeringsobject zelf en in plaats daarvan moet de MLflow-client worden gebruikt:

client = mlflow.tracking.MlflowClient()
client.list_artifacts("1234-5678-90AB-CDEFG")

De voorgaande methode bevat alle artefacten die zijn vastgelegd in de uitvoering, maar blijven opgeslagen in het artefactenarchief (Azure Machine Learning-opslag). Als u een van deze wilt downloaden, gebruikt u de methode download_artifact:

file_path = mlflow.artifacts.download_artifacts(
    run_id="1234-5678-90AB-CDEFG", artifact_path="feature_importance_weight.png"
)

Notitie

Gebruik in oudere versies van MLflow (<2.0) de methode MlflowClient.download_artifacts() .

Modellen ophalen uit een uitvoering

Modellen kunnen ook worden aangemeld bij de uitvoering en vervolgens rechtstreeks uit de uitvoering worden opgehaald. Als u een model wilt ophalen, moet u het pad naar het artefact weten waar het is opgeslagen. De methode list_artifacts kan worden gebruikt om artefacten te vinden die een model vertegenwoordigen, omdat MLflow-modellen altijd mappen zijn. U kunt een model downloaden door het pad op te geven waar het model is opgeslagen, met behulp van de download_artifact methode:

artifact_path="classifier"
model_local_path = mlflow.artifacts.download_artifacts(
  run_id="1234-5678-90AB-CDEFG", artifact_path=artifact_path
)

Vervolgens kunt u het model weer laden vanuit de gedownloade artefacten met behulp van de typische functie load_model in de naamruimte die specifiek is voor smaak. In het volgende voorbeeld wordt gebruikgemaakt van xgboost:

model = mlflow.xgboost.load_model(model_local_path)

Met MLflow kunt u beide bewerkingen tegelijk uitvoeren en het model in één instructie downloaden en laden. MLflow downloadt het model naar een tijdelijke map en laadt het van daaruit. De methode load_model gebruikt een URI-indeling om aan te geven waar het model moet worden opgehaald. In het geval van het laden van een model vanaf een uitvoering, is de URI-structuur als volgt:

model = mlflow.xgboost.load_model(f"runs:/{last_run.info.run_id}/{artifact_path}")

Tip

Zie Modellenregisters beheren in Azure Machine Learning met MLflow als u modellen wilt opvragen en laden die zijn geregistreerd in het modelregister.

Onderliggende (geneste) uitvoeringen ophalen

MLflow ondersteunt het concept van onderliggende (geneste) uitvoeringen. Deze uitvoeringen zijn handig wanneer u trainingsroutines moet uitschakelen die onafhankelijk van het hoofdtrainingsproces moeten worden bijgehouden. Optimalisatieprocessen voor hyperparameters of Azure Machine Learning-pijplijnen zijn typische voorbeelden van taken die meerdere onderliggende uitvoeringen genereren. U kunt een query uitvoeren op alle onderliggende uitvoeringen van een specifieke uitvoering met behulp van de eigenschapstag mlflow.parentRunId, die de uitvoerings-id van de bovenliggende uitvoering bevat.

hyperopt_run = mlflow.last_active_run()
child_runs = mlflow.search_runs(
    filter_string=f"tags.mlflow.parentRunId='{hyperopt_run.info.run_id}'"
)

Taken en modellen vergelijken in Azure Machine Learning-studio (preview)

Als u de kwaliteit van uw taken en modellen in Azure Machine Learning-studio wilt vergelijken en evalueren, gebruikt u het voorbeeldvenster om de functie in te schakelen. Zodra deze optie is ingeschakeld, kunt u de parameters, metrische gegevens en tags vergelijken tussen de taken en/of modellen die u hebt geselecteerd.

Belangrijk

Items die in dit artikel zijn gemarkeerd (preview) zijn momenteel beschikbaar als openbare preview. De preview-versie wordt aangeboden zonder Service Level Agreement en wordt niet aanbevolen voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.

Schermopname van het voorbeeldvenster waarin wordt getoond hoe u taken en modellen in Azure Machine Learning-studio kunt vergelijken.

De MLflow met Azure Machine Learning-notebooks laten zien en uitbreiden op concepten die in dit artikel worden gepresenteerd.

Ondersteuningsmatrix voor het uitvoeren van query's en experimenten

De MLflow SDK biedt verschillende methoden om uitvoeringen op te halen, inclusief opties om te bepalen wat er wordt geretourneerd en hoe. Gebruik de volgende tabel voor meer informatie over welke van deze methoden momenteel worden ondersteund in MLflow wanneer deze zijn verbonden met Azure Machine Learning:

Functie Ondersteund door MLflow Ondersteund door Azure Machine Learning
Volgorde wordt uitgevoerd op kenmerken
Volgorde wordt uitgevoerd op basis van metrische gegevens 1
Volgorde wordt uitgevoerd op parameters 1
Volgorde wordt uitgevoerd op tags 1
Filteren wordt uitgevoerd op kenmerken
Uitvoeringen filteren op metrische gegevens
Filteren wordt uitgevoerd op metrische gegevens met speciale tekens (escaped)
Filteren wordt uitgevoerd op parameters
Filteren wordt uitgevoerd op tags
Filters worden uitgevoerd met numerieke vergelijkingen (metrische gegevens), waaronder =, , >!=, >=, , <en<=
Filteren wordt uitgevoerd met tekenreeksvergelijkingen (parameters, tags en kenmerken): = en != 2
Filteren wordt uitgevoerd met tekenreeksvergelijkingen (parameters, tags en kenmerken): LIKE/ILIKE
Filteruitvoeringen met comparators AND
Filteruitvoeringen met comparators OR
De naam van experimenten wijzigen

Notitie

  • 1 Controleer of de sectieVolgorde wordt uitgevoerd voor instructies en voorbeelden over het bereiken van dezelfde functionaliteit in Azure Machine Learning.
  • 2!= voor tags wordt niet ondersteund.