Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 utför förfrågningar om och jämför experiment och körningar i 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.
- Hämta, 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å ställa 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
mlflowoch Azure Machine Learning-plugin-programmetazureml-mlflowför MLflow:pip install mlflow azureml-mlflowTips
Du kan använda
mlflow-skinnypaketet, som är ett enkelt MLflow-paket utan SQL-lagring, server, användargränssnitt eller datavetenskapsberoenden. Vi rekommenderar det här paketet för användare som främst behöver MLflow-spårnings- och loggningsfunktionerna, men inte 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 som du behöver för att utföra 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 vilket experiment som helst, 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" ])Med 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ållande av 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_nameseller 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å vid körning av sökningar. 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. Se Hämta parametrar och mått från en körning för ett exempel.
Orderrutiner
Som standard är experimenten i fallande ordning efter start_time, 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"])Ordera körningar och begränsa resultaten. 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"])Sortera körningar efter attributet
duration:mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], order_by=["attributes.duration DESC"])Tips
attributes.durationfinns inte i MLflow OSS, men tillhandahålls i Azure Machine Learning för enkelhetens skull.Sortera körningar efter metriska värden
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ]).sort_values("metrics.accuracy", ascending=False)Varning
Användning
order_bymed uttryck som innehållermetrics.*,params.*ellertags.*i parameternorder_bystöds inte för närvarande. Användsort_valuesi 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 bland hyperparametrarna 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ökningar 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
=,likeoch!=stöds för filtreringparameters.Sökningar baserade på ett måtts värde:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="metrics.auc>0.8")Sökningar med en given tagg:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="tags.framework='torch'")Sökningar skapade av en viss användare:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.user_id = 'John Smith'")Sökningar 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 given tidpunkt:
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())}'")Tips
För nyckeln
attributesska 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}'")Tips
attributes.durationfinns inte i MLflow OSS, men tillhandahålls i Azure Machine Learning för enkelhetens skull.Sök efter kö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 |
|---|---|---|
| Ej påbörjad | Scheduled |
Jobbet/körningen togs emot av Azure Machine Learning. |
| Kö | Scheduled |
Jobbet/körningen är schemalagt att köras, men har inte startat ännu. |
| Förbereda | Scheduled |
Jobbet/körningen har inte startat ännu, men en dator har allokerats för att genomföra det och förbereder miljön samt sina indata. |
| Kör | Running |
Jobbet/körningen är för närvarande under aktiv exekvering. |
| 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",
)
Detaljer kan sedan nås från info-medlemmen. Följande exempel visar hur du run_idhämtar :
last_run = runs[-1]
print("Last run ID:", last_run.info.run_id)
Hämta parametrar och mått från en körning
När körningar returneras med output_format="list" kan 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 artefaktslagret (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 under 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 igen från de nedladdade artefakterna med den vanliga funktionen load_model i det varianter-specifika namnutrymmet. 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}")
Tips
För att köra frågor mot och läsa in modeller som registrerats i modellregistret, se 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 separera träningsrutiner som måste spåras oberoende av den huvudsakliga träningsprocessen. Optimeringsprocesser för justering av hyperparametrar eller Azure Machine Learning-pipelines är typiska exempel på jobb som genererar flera delkörningar. Du kan fråga 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 huvudkö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-notebooks 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, logga modeller och kombinera flera varianter 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 och erbjuder alternativ för att styra vad som returneras samt hur detta görs. 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 |
|---|---|---|
| Sortera efter attribut | ✓ | ✓ |
| Beställningsprocesser efter metrik | ✓ | 1 |
| Att beställa körningar efter parametrar | ✓ | 1 |
| Sortera kö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 av körningar med strängkomparatorer (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.