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-invoegtoepassingazureml-mlflow
voor MLflow als volgt: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. Dit pakket wordt aanbevolen voor gebruikers die voornamelijk de MLflow-mogelijkheden voor tracering en logboekregistratie nodig hebben zonder de volledige suite met functies te importeren, inclusief implementaties.Een Azure Machine Learning-werkruimte maken Zie Resources maken die u nodig hebt om aan de slag te gaan om een werkruimte te maken. Controleer de toegangsmachtigingen die u nodig hebt om uw MLflow-bewerkingen uit te voeren in uw werkruimte.
Als u externe tracering wilt uitvoeren of experimenten wilt 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_names
of 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 metmetrics.*
,params.*
oftags.*
in de parameterorder_by
wordt momenteel niet ondersteund. Gebruik in plaats daarvan desort_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
=
,like
en!=
worden ondersteund voor filterenparameters
.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
attributes
moeten 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_id
volgende 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 MlflowClient
volgende 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.
De MLflow met Azure Machine Learning-notebooks laten zien en uitbreiden op concepten die in dit artikel worden gepresenteerd.
- Een classificatie trainen en bijhouden met MLflow: demonstreert hoe u experimenten kunt bijhouden met behulp van MLflow, logboekmodellen en meerdere smaken kunt combineren in pijplijnen.
- Experimenten en uitvoeringen beheren met MLflow: demonstreert hoe u query's uitvoert op experimenten, uitvoeringen, metrische gegevens, parameters en artefacten van Azure Machine Learning met behulp van MLflow.
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.