Fråga och jämför experiment och körningar med MLflow
Experiment och jobb (eller körningar) i Azure Machine Learning kan efterfrågas med MLflow. Du behöver inte installera någon specifik SDK för att hantera vad som händer i ett träningsjobb, vilket skapar en smidigare övergång mellan lokala körningar och molnet genom att ta bort molnspecifika beroenden. I den här artikeln får du lära dig hur du frågar efter och jämför experiment och körs på din arbetsyta med hjälp av Azure Machine Learning och MLflow SDK i Python.
Med MLflow kan du:
- Skapa, fråga, ta bort och sök efter experiment på en arbetsyta.
- Fråga, ta bort och sök efter körningar på en arbetsyta.
- Spåra och hämta mått, parametrar, artefakter och modeller från körningar.
En detaljerad jämförelse mellan MLflow och MLflow med öppen källkod när de är anslutna till Azure Machine Learning finns i Supportmatris för frågekörningar och experiment i Azure Machine Learning.
Kommentar
Azure Machine Learning Python SDK v2 tillhandahåller inte inbyggda funktioner för loggning eller spårning. Detta gäller inte bara för loggning utan även för att köra frågor mot de mått som loggas. Använd I stället MLflow för att hantera experiment och körningar. Den här artikeln beskriver hur du använder MLflow för att hantera experiment och körningar i Azure Machine Learning.
Du kan också köra frågor mot och söka efter experiment och körningar med hjälp av MLflow REST API. Se Använda MLflow REST med Azure Machine Learning för ett exempel på hur du använder det.
Förutsättningar
Installera MLflow SDK-paketet
mlflow
och Azure Machine Learning-plugin-programmetazureml-mlflow
för MLflow på följande sätt:pip install mlflow azureml-mlflow
Dricks
Du kan använda
mlflow-skinny
paketet, som är ett enkelt MLflow-paket utan SQL-lagring, server, användargränssnitt eller datavetenskapsberoenden. Det här paketet rekommenderas för användare som främst behöver MLflow-spårnings- och loggningsfunktionerna utan att importera hela sviten med funktioner, inklusive distributioner.Skapa en Azure Machine Learning-arbetsyta. Information om hur du skapar en arbetsyta finns i Skapa resurser som du behöver för att komma igång. Granska de åtkomstbehörigheter du behöver för att utföra dina MLflow-åtgärder på din arbetsyta.
Om du vill utföra fjärrspårning eller spåra experiment som körs utanför Azure Machine Learning konfigurerar du MLflow så att det pekar på spårnings-URI:n för din Azure Machine Learning-arbetsyta. Mer information om hur du ansluter MLflow till din arbetsyta finns i Konfigurera MLflow för Azure Machine Learning.
Fråge- och sökexperiment
Använd MLflow för att söka efter experiment i din arbetsyta. Se följande exempel:
Hämta alla aktiva experiment:
mlflow.search_experiments()
Kommentar
I äldre versioner av MLflow (<2.0) använder du metoden
mlflow.list_experiments()
i stället.Hämta alla experiment, inklusive arkiverade:
from mlflow.entities import ViewType mlflow.search_experiments(view_type=ViewType.ALL)
Hämta ett specifikt experiment efter namn:
mlflow.get_experiment_by_name(experiment_name)
Hämta ett specifikt experiment efter ID:
mlflow.get_experiment('1234-5678-90AB-CDEFG')
Sökexperiment
Med search_experiments()
metoden, som är tillgänglig sedan Mlflow 2.0, kan du söka efter experiment som matchar kriterierna med hjälp av filter_string
.
Hämta flera experiment baserat på deras ID:n:
mlflow.search_experiments(filter_string="experiment_id IN (" "'CDEFG-1234-5678-90AB', '1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')" )
Hämta alla experiment som skapats efter en viss tid:
import datetime dt = datetime.datetime(2022, 6, 20, 5, 32, 48) mlflow.search_experiments(filter_string=f"creation_time > {int(dt.timestamp())}")
Hämta alla experiment med en viss tagg:
mlflow.search_experiments(filter_string=f"tags.framework = 'torch'")
Fråge- och sökkörningar
Med MLflow kan du söka efter körningar i alla experiment, inklusive flera experiment samtidigt. Metoden mlflow.search_runs()
accepterar argumentet experiment_ids
och experiment_name
anger vilka experiment du vill söka i. Du kan också ange search_all_experiments=True
om du vill söka i alla experiment på arbetsytan:
Efter experimentnamn:
mlflow.search_runs(experiment_names=[ "my_experiment" ])
Efter experiment-ID:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ])
Sök i alla experiment på arbetsytan:
mlflow.search_runs(filter_string="params.num_boost_round='100'", search_all_experiments=True)
Observera att experiment_ids
stöder tillhandahålla en matris med experiment, så att du kan söka körningar över flera experiment, om det behövs. Detta kan vara användbart om du vill jämföra körningar av samma modell när den loggas i olika experiment (till exempel av olika personer eller olika projekt iterationer).
Viktigt!
Om experiment_ids
, experiment_names
eller search_all_experiments
inte anges, söker MLflow som standard i det aktuella aktiva experimentet. Du kan ange det aktiva experimentet med .mlflow.set_experiment()
Som standard returnerar MLflow data i Pandas-format Dataframe
, vilket gör det praktiskt när vi bearbetar vår analys av körningarna ytterligare. Returnerade data innehåller kolumner med:
- Grundläggande information om körningen.
- Parametrar med kolumnens namn
params.<parameter-name>
. - Mått (senast loggat värde för varje) med kolumnens namn
metrics.<metric-name>
.
Alla mått och parametrar returneras också när du kör frågor. För mått som innehåller flera värden (till exempel en förlustkurva eller en PR-kurva) returneras dock endast måttets sista värde. Om du vill hämta alla värden för ett visst mått använder du mlflow.get_metric_history
metoden. Ett exempel finns i Hämta params och mått från en körning .
Orderkörningar
Som standard är experimenten i fallande ordning start_time
efter , vilket är den tid då experimentet köades i Azure Machine Learning. Du kan dock ändra den här standardinställningen med hjälp av parametern order_by
.
Orderkörningar efter attribut, till exempel
start_time
:mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], order_by=["attributes.start_time DESC"])
Orderkörningar och begränsa resultat. I följande exempel returneras den sista enskilda körningen i experimentet:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], max_results=1, order_by=["attributes.start_time DESC"])
Orderkörningar med attributet
duration
:mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], order_by=["attributes.duration DESC"])
Dricks
attributes.duration
finns inte i MLflow OSS, men tillhandahålls i Azure Machine Learning för enkelhetens skull.Orderkörningar efter måttets värden:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ]).sort_values("metrics.accuracy", ascending=False)
Varning
Användning
order_by
med uttryck som innehållermetrics.*
,params.*
ellertags.*
i parameternorder_by
stöds inte för närvarande. Användorder_values
i stället metoden från Pandas som du ser i exemplet.
Filterkörningar
Du kan också söka efter en körning med en specifik kombination i hyperparametrar med hjälp av parametern filter_string
. Använd params
för att komma åt körningens parametrar, metrics
för att komma åt mått som loggas i körningen och attributes
för att få åtkomst till körningsinformation. MLflow stöder uttryck som är kopplade till nyckelordet AND (syntaxen stöder inte OR):
Sökkörningar baserat på en parameters värde:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="params.num_boost_round='100'")
Varning
Endast operatorer
=
,like
och!=
stöds för filtreringparameters
.Sökkörningar baserat på ett måtts värde:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="metrics.auc>0.8")
Sökkörningar med en viss tagg:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="tags.framework='torch'")
Sökkörningar som skapats av en viss användare:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.user_id = 'John Smith'")
Sökkörningar som misslyckades. Se Filtrera körningar efter status för möjliga värden:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.status = 'Failed'")
Sökkörningar som skapats efter en viss tid:
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())}'")
Dricks
För nyckeln
attributes
ska värden alltid vara strängar och därmed kodade mellan citattecken.Sökkörningar som tar längre tid än en timme:
duration = 360 * 1000 # duration is in milliseconds mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string=f"attributes.duration > '{duration}'")
Dricks
attributes.duration
finns inte i MLflow OSS, men tillhandahålls i Azure Machine Learning för enkelhetens skull.Sökkörningar som har ID:t i en viss uppsättning:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.run_id IN ('1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')")
Filtrera körningar efter status
När du filtrerar körningar efter status använder MLflow en annan konvention för att namnge olika möjliga status för en körning jämfört med Azure Machine Learning. Följande tabell visar möjliga värden:
Status för Azure Machine Learning-jobb | MLFlow's attributes.status |
Innebörd |
---|---|---|
Inte startat | Scheduled |
Jobbet/körningen togs emot av Azure Machine Learning. |
Queue | Scheduled |
Jobbet/körningen är schemalagd för körning, men den har inte startat ännu. |
Förbereda | Scheduled |
Jobbet/körningen har inte startat ännu, men en beräkning allokerades för dess körning och förbereder miljön och dess indata. |
Körs | Running |
Jobbet/körningen är för närvarande under aktiv körning. |
Slutförd | Finished |
Jobbet/körningen slutfördes utan fel. |
Misslyckad | Failed |
Jobbet/körningen slutfördes med fel. |
Avbruten | Killed |
Jobbet/körningen avbröts av användaren eller avslutades av systemet. |
Exempel:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ],
filter_string="attributes.status = 'Failed'")
Hämta mått, parametrar, artefakter och modeller
Metoden search_runs
returnerar en Pandas Dataframe
som innehåller en begränsad mängd information som standard. Du kan hämta Python-objekt om det behövs, vilket kan vara användbart för att få information om dem. Använd parametern output_format
för att styra hur utdata returneras:
runs = mlflow.search_runs(
experiment_ids=[ "1234-5678-90AB-CDEFG" ],
filter_string="params.num_boost_round='100'",
output_format="list",
)
Information kan sedan nås från info
medlemmen. Följande exempel visar hur du run_id
hämtar :
last_run = runs[-1]
print("Last run ID:", last_run.info.run_id)
Hämta params och mått från en körning
När körningar returneras med kan output_format="list"
du enkelt komma åt parametrar med hjälp av nyckeln data
:
last_run.data.params
På samma sätt kan du fråga efter mått:
last_run.data.metrics
För mått som innehåller flera värden (till exempel en förlustkurva eller en PR-kurva) returneras endast måttets senast loggade värde. Om du vill hämta alla värden för ett visst mått använder du mlflow.get_metric_history
metoden. Den här metoden kräver att du använder MlflowClient
:
client = mlflow.tracking.MlflowClient()
client.get_metric_history("1234-5678-90AB-CDEFG", "log_loss")
Hämta artefakter från en körning
MLflow kan köra frågor mot alla artefakter som loggas av en körning. Det går inte att komma åt artefakter med själva körningsobjektet och MLflow-klienten bör användas i stället:
client = mlflow.tracking.MlflowClient()
client.list_artifacts("1234-5678-90AB-CDEFG")
Föregående metod listar alla artefakter som loggas i körningen, men de förblir lagrade i artefaktarkivet (Azure Machine Learning Storage). Om du vill ladda ned någon av dem använder du metoden download_artifact
:
file_path = mlflow.artifacts.download_artifacts(
run_id="1234-5678-90AB-CDEFG", artifact_path="feature_importance_weight.png"
)
Kommentar
I äldre versioner av MLflow (<2.0) använder du metoden MlflowClient.download_artifacts()
i stället.
Hämta modeller från en körning
Modeller kan också loggas i körningen och sedan hämtas direkt från den. För att hämta en modell måste du känna till sökvägen till artefakten där den lagras. Metoden list_artifacts
kan användas för att hitta artefakter som representerar en modell eftersom MLflow-modeller alltid är mappar. Du kan ladda ned en modell genom att ange sökvägen där modellen lagras med hjälp av download_artifact
metoden:
artifact_path="classifier"
model_local_path = mlflow.artifacts.download_artifacts(
run_id="1234-5678-90AB-CDEFG", artifact_path=artifact_path
)
Du kan sedan läsa in modellen från de nedladdade artefakterna med den typiska funktionen load_model
i det smakspecifika namnområdet. I följande exempel används xgboost
:
model = mlflow.xgboost.load_model(model_local_path)
Med MLflow kan du också utföra båda åtgärderna samtidigt och ladda ned och läsa in modellen i en enda instruktion. MLflow laddar ned modellen till en tillfällig mapp och läser in den därifrån. Metoden load_model
använder ett URI-format för att ange varifrån modellen måste hämtas. Vid inläsning av en modell från en körning är URI-strukturen följande:
model = mlflow.xgboost.load_model(f"runs:/{last_run.info.run_id}/{artifact_path}")
Dricks
Information om hur du kör frågor mot och läsa in modeller som registrerats i modellregistret finns i Hantera modellregister i Azure Machine Learning med MLflow.
Hämta underordnade (kapslade) körningar
MLflow stöder begreppet underordnade (kapslade) körningar. Dessa körningar är användbara när du behöver knoppa av träningsrutiner som måste spåras oberoende av huvudträningsprocessen. Optimeringsprocesser för hyperparameterjustering eller Azure Machine Learning-pipelines är typiska exempel på jobb som genererar flera underordnade körningar. Du kan köra frågor mot alla underordnade körningar av en specifik körning med hjälp av egenskapstaggen mlflow.parentRunId
, som innehåller körnings-ID:t för den överordnade körningen.
hyperopt_run = mlflow.last_active_run()
child_runs = mlflow.search_runs(
filter_string=f"tags.mlflow.parentRunId='{hyperopt_run.info.run_id}'"
)
Jämför jobb och modeller i Azure Machine Learning-studio (förhandsversion)
Om du vill jämföra och utvärdera kvaliteten på dina jobb och modeller i Azure Machine Learning-studio använder du förhandsgranskningspanelen för att aktivera funktionen. När du är aktiverad kan du jämföra parametrar, mått och taggar mellan jobben och/eller modellerna som du har valt.
Viktigt!
Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Förhandsversionen tillhandahålls utan ett serviceavtal och rekommenderas inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.
MLflow med Azure Machine Learning-notebook-filer visar och utökar begrepp som presenteras i den här artikeln.
- Träna och spåra en klassificerare med MLflow: Visar hur du spårar experiment med MLflow, loggmodeller och kombinerar flera smaker i pipelines.
- Hantera experiment och körningar med MLflow: Visar hur du frågar efter experiment, körningar, mått, parametrar och artefakter från Azure Machine Learning med hjälp av MLflow.
Stödmatris för frågekörningar och experiment
MLflow SDK exponerar flera metoder för att hämta körningar, inklusive alternativ för att styra vad som returneras och hur. Använd följande tabell för att lära dig om vilka av dessa metoder som för närvarande stöds i MLflow när de är anslutna till Azure Machine Learning:
Funktion | Stöds av MLflow | Stöds av Azure Machine Learning |
---|---|---|
Orderkörningar efter attribut | ✓ | ✓ |
Orderkörningar efter mått | ✓ | 1 |
Orderkörningar efter parametrar | ✓ | 1 |
Beställningskörningar efter taggar | ✓ | 1 |
Filtrering körs efter attribut | ✓ | ✓ |
Filtrering körs efter mått | ✓ | ✓ |
Filtrering körs efter mått med specialtecken (undantagna) | ✓ | |
Filtrering körs efter parametrar | ✓ | ✓ |
Filtrering körs efter taggar | ✓ | ✓ |
Filtreringskörningar med numeriska jämförelsevärden (mått) inklusive = , != , > , >= , < och <= |
✓ | ✓ |
Filtrering körs med strängjämnare (params, taggar och attribut): = och != |
✓ | ✔2 |
Filtrering körs med strängjämnare (params, taggar och attribut): LIKE /ILIKE |
✓ | ✓ |
Filtreringskörningar med jämförelse AND |
✓ | ✓ |
Filtreringskörningar med jämförelse OR |
||
Byta namn på experiment | ✓ |
Kommentar
- 1 Se avsnittet Ordering runs (Beställningskörningar ) för instruktioner och exempel på hur du uppnår samma funktioner i Azure Machine Learning.
- 2
!=
för taggar som inte stöds.