Dotazování a porovnání experimentů a spuštění pomocí MLflow
Experimenty a úlohy (nebo spuštění) ve službě Azure Machine Learning je možné dotazovat pomocí MLflow. Ke správě toho, co se děje v rámci trénovací úlohy, nemusíte instalovat žádnou konkrétní sadu SDK, a vytvořit tak plynulejší přechod mezi místními spuštěními a cloudem tím, že odeberete závislosti specifické pro cloud. V tomto článku se dozvíte, jak dotazovat a porovnat experimenty a spouštění ve vašem pracovním prostoru pomocí sady Azure Machine Learning a MLflow SDK v Pythonu.
MLflow umožňuje:
- Vytvoření, dotazování, odstranění a hledání experimentů v pracovním prostoru
- Dotazování, odstranění a hledání spuštění v pracovním prostoru
- Sledování a načítání metrik, parametrů, artefaktů a modelů ze spuštění
Podrobné porovnání opensourcového MLflow a MLflow při připojení ke službě Azure Machine Learning najdete v matici podpory pro dotazování spuštění a experimentů ve službě Azure Machine Learning.
Poznámka:
Sada Azure Machine Learning Python SDK v2 neposkytuje nativní možnosti protokolování ani sledování. To platí nejen pro protokolování, ale také pro dotazování protokolovaných metrik. Místo toho použijte MLflow ke správě experimentů a spuštění. Tento článek vysvětluje, jak používat MLflow ke správě experimentů a spuštění ve službě Azure Machine Learning.
Experimenty a spuštění můžete také dotazovat a prohledávat pomocí rozhraní REST API MLflow. Příklad využití najdete v tématu Použití MLflow REST se službou Azure Machine Learning .
Požadavky
Nainstalujte balíček MLflow SDK
mlflow
a modul plug-in Azure Machine Learningazureml-mlflow
pro MLflow následujícím způsobem:pip install mlflow azureml-mlflow
Tip
Můžete použít
mlflow-skinny
balíček, což je jednoduchý balíček MLflow bez závislostí sql Storage, serveru, uživatelského rozhraní nebo datových věd. Tento balíček se doporučuje uživatelům, kteří primárně potřebují funkce sledování a protokolování MLflow bez importu celé sady funkcí, včetně nasazení.Vytvořte pracovní prostor Azure Machine Learning. Pokud chcete vytvořit pracovní prostor, přečtěte si téma Vytvoření prostředků, které potřebujete, abyste mohli začít. Zkontrolujte přístupová oprávnění , která potřebujete k provádění operací MLflow ve vašem pracovním prostoru.
Pokud chcete provádět vzdálené sledování nebo sledovat experimenty spuštěné mimo Azure Machine Learning, nakonfigurujte MLflow tak, aby odkazovali na identifikátor URI sledování pracovního prostoru Azure Machine Learning. Další informace o připojení MLflow k pracovnímu prostoru najdete v tématu Konfigurace MLflow pro Azure Machine Learning.
Dotazování a vyhledávání experimentů
Pomocí MLflow vyhledejte experimenty v pracovním prostoru. Podívejte se na následující příklady:
Získejte všechny aktivní experimenty:
mlflow.search_experiments()
Poznámka:
Ve starších verzích MLflow (<2.0) použijte místo toho metodu
mlflow.list_experiments()
.Získejte všechny experimenty, včetně archivace:
from mlflow.entities import ViewType mlflow.search_experiments(view_type=ViewType.ALL)
Získání konkrétního experimentu podle názvu:
mlflow.get_experiment_by_name(experiment_name)
Získání konkrétního experimentu podle ID:
mlflow.get_experiment('1234-5678-90AB-CDEFG')
Hledání experimentů
Metoda search_experiments()
, která je k dispozici od Mlflow 2.0, umožňuje vyhledat experimenty, které splňují kritéria pomocí filter_string
.
Načtení několika experimentů na základě jejich ID:
mlflow.search_experiments(filter_string="experiment_id IN (" "'CDEFG-1234-5678-90AB', '1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')" )
Načtení všech experimentů vytvořených po daném čase:
import datetime dt = datetime.datetime(2022, 6, 20, 5, 32, 48) mlflow.search_experiments(filter_string=f"creation_time > {int(dt.timestamp())}")
Načtení všech experimentů s danou značkou:
mlflow.search_experiments(filter_string=f"tags.framework = 'torch'")
Spouštění dotazů a hledání
MLflow umožňuje hledat spuštění uvnitř jakéhokoli experimentu, včetně více experimentů najednou. Metoda mlflow.search_runs()
přijímá argument experiment_ids
a experiment_name
označuje, které experimenty chcete prohledávat. Můžete také určit search_all_experiments=True
, jestli chcete prohledávat všechny experimenty v pracovním prostoru:
Podle názvu experimentu:
mlflow.search_runs(experiment_names=[ "my_experiment" ])
Podle ID experimentu:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ])
Prohledejte všechny experimenty v pracovním prostoru:
mlflow.search_runs(filter_string="params.num_boost_round='100'", search_all_experiments=True)
Všimněte si, že experiment_ids
podporuje poskytování pole experimentů, takže v případě potřeby můžete prohledávat více experimentů. To může být užitečné v případě, že chcete porovnat spuštění stejného modelu při přihlášení do různých experimentů (například různými lidmi nebo různými iteracemi projektů).
Důležité
Pokud experiment_ids
, experiment_names
nebo search_all_experiments
nejsou zadány, MLflow hledá ve výchozím nastavení v aktuálním aktivním experimentu. Aktivní experiment můžete nastavit pomocí mlflow.set_experiment()
.
MLflow ve výchozím nastavení vrací data ve formátu Pandas Dataframe
, což je užitečné při dalším zpracování analýzy spuštění. Vrácená data zahrnují sloupce s:
- Základní informace o spuštění
- Parametry s názvem
params.<parameter-name>
sloupce . - Metriky (poslední zaprotokolovaná hodnota každého) s názvem
metrics.<metric-name>
sloupce .
Při dotazování spuštění se vrátí také všechny metriky a parametry. Pro metriky, které obsahují více hodnot (například ztrátovou křivku nebo křivku pr), se ale vrátí pouze poslední hodnota metriky. Pokud chcete načíst všechny hodnoty dané metriky, použije mlflow.get_metric_history
metodu. Příklad najdete v tématu Získání parametrů a metrik ze spuštění .
Pořadí spuštění
Ve výchozím nastavení jsou experimenty sestupně seřazené podle start_time
času, kdy byl experiment zařazen do fronty ve službě Azure Machine Learning. Toto výchozí nastavení však můžete změnit pomocí parametru order_by
.
Pořadí se spouští podle atributů, například
start_time
:mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], order_by=["attributes.start_time DESC"])
Pořadí spuštění a omezení výsledků Následující příklad vrátí poslední jedno spuštění v experimentu:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], max_results=1, order_by=["attributes.start_time DESC"])
Pořadí se spouští podle atributu
duration
:mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], order_by=["attributes.duration DESC"])
Tip
attributes.duration
není k dispozici v operačním systému MLflow, ale poskytuje se ve službě Azure Machine Learning pro usnadnění.Pořadí se spouští podle hodnot metriky:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ]).sort_values("metrics.accuracy", ascending=False)
Upozorňující
Použití
order_by
s výrazy obsahujícímiparams.*
metrics.*
, nebotags.*
v parametruorder_by
se v současné době nepodporuje. Místo toho použijte metodusort_values
z Pandas, jak je znázorněno v příkladu.
Spuštění filtru
Můžete také vyhledat spuštění s konkrétní kombinací v hyperparametrech pomocí parametru filter_string
. Umožňuje params
přístup k parametrům spuštění, metrics
přístupu k metrikám přihlášeným ke spuštění a attributes
přístupu k podrobnostem o spuštění. MLflow podporuje výrazy spojené klíčovým slovem AND (syntaxe nepodporuje OR):
Hledání se spouští na základě hodnoty parametru:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="params.num_boost_round='100'")
Upozorňující
Pouze operátory
=
,like
a!=
jsou podporovány pro filtrováníparameters
.Hledání se spouští na základě hodnoty metriky:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="metrics.auc>0.8")
Hledání se spustí s danou značkou:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="tags.framework='torch'")
Spuštění hledání vytvořená daným uživatelem:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.user_id = 'John Smith'")
Spuštění hledání, která selhala. Informace o možných hodnotách najdete v tématu Filtrování podle stavu :
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.status = 'Failed'")
Hledání se spustí po uplynutí dané doby:
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
Pro klíč
attributes
by hodnoty měly být vždy řetězce a proto kódovány mezi uvozovkami.Spuštění hledání, která trvá déle než jednu hodinu:
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
není k dispozici v operačním systému MLflow, ale poskytuje se ve službě Azure Machine Learning pro usnadnění.Spuštění hledání, která mají ID v dané sadě:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.run_id IN ('1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')")
Filtrování se spouští podle stavu
Při filtrování spuštění podle stavu používá MLflow jinou konvenci k pojmenování různých možných stavů spuštění v porovnání se službou Azure Machine Learning. V následující tabulce jsou uvedeny možné hodnoty:
Stav úlohy Azure Machine Learning | MlFlow attributes.status |
Význam |
---|---|---|
Nezahájeno | Scheduled |
Úloha/spuštění byla přijata službou Azure Machine Learning. |
Fronta | Scheduled |
Úloha/spuštění je naplánovaná pro spuštění, ale ještě nebyla spuštěna. |
Připravování | Scheduled |
Úloha/spuštění ještě nebyla spuštěna, ale výpočetní prostředky byly přiděleny pro jeho spuštění a připravuje prostředí a jeho vstupy. |
Spuštěno | Running |
Úloha/spuštění je aktuálně pod aktivním spuštěním. |
Dokončeno | Finished |
Úloha/spuštění byla dokončena bez chyb. |
Neúspěšný | Failed |
Úloha/spuštění byla dokončena s chybami. |
Zrušeno | Killed |
Úloha/spuštění byla zrušena uživatelem nebo ukončena systémem. |
Příklad:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ],
filter_string="attributes.status = 'Failed'")
Získání metrik, parametrů, artefaktů a modelů
Metoda search_runs
vrátí Pandas Dataframe
, která ve výchozím nastavení obsahuje omezené množství informací. V případě potřeby můžete získat objekty Pythonu, což může být užitečné k získání podrobností o nich. Pomocí parametru output_format
můžete řídit, jak se vrátí výstup:
runs = mlflow.search_runs(
experiment_ids=[ "1234-5678-90AB-CDEFG" ],
filter_string="params.num_boost_round='100'",
output_format="list",
)
K podrobnostem se pak dostanete od člena info
. Následující ukázka ukazuje, jak získat run_id
:
last_run = runs[-1]
print("Last run ID:", last_run.info.run_id)
Získání parametrů a metrik ze spuštění
Při vrácení spuštění pomocí output_format="list"
, můžete snadno přistupovat k parametrům pomocí klíče data
:
last_run.data.params
Stejným způsobem můžete dotazovat metriky:
last_run.data.metrics
Pro metriky, které obsahují více hodnot (například ztrátovou křivku nebo křivku žádosti o přijetí změn), se vrátí pouze poslední zaprotokolovaná hodnota metriky. Pokud chcete načíst všechny hodnoty dané metriky, použije mlflow.get_metric_history
metodu. Tato metoda vyžaduje, abyste použili MlflowClient
:
client = mlflow.tracking.MlflowClient()
client.get_metric_history("1234-5678-90AB-CDEFG", "log_loss")
Získání artefaktů ze spuštění
MLflow může dotazovat jakýkoli artefakt protokolovaný spuštěním. Artefakty nelze získat přístup pomocí samotného objektu run a místo toho by se měl použít klient MLflow:
client = mlflow.tracking.MlflowClient()
client.list_artifacts("1234-5678-90AB-CDEFG")
Předchozí metoda zobrazí seznam všech artefaktů přihlášených ke spuštění, ale zůstanou uložené v úložišti artefaktů (Azure Machine Learning Storage). Ke stažení některé z nich použijte metodu download_artifact
:
file_path = mlflow.artifacts.download_artifacts(
run_id="1234-5678-90AB-CDEFG", artifact_path="feature_importance_weight.png"
)
Poznámka:
Ve starších verzích MLflow (<2.0) místo toho použijte metodu MlflowClient.download_artifacts()
.
Získání modelů z běhu
Modely je také možné zaprotokolovat při spuštění a pak je přímo z něj načíst. Pokud chcete načíst model, musíte znát cestu k artefaktu, ve kterém je uložený. Metodu list_artifacts
lze použít k vyhledání artefaktů, které představují model, protože modely MLflow jsou vždy složky. Model si můžete stáhnout zadáním cesty, ve které je model uložený, pomocí download_artifact
metody:
artifact_path="classifier"
model_local_path = mlflow.artifacts.download_artifacts(
run_id="1234-5678-90AB-CDEFG", artifact_path=artifact_path
)
Pak můžete model načíst zpět ze stažených artefaktů pomocí typické funkce load_model
v oboru názvů specifickém pro příchuť. Následující příklad používá xgboost
:
model = mlflow.xgboost.load_model(model_local_path)
MLflow také umožňuje provádět obě operace najednou a stahovat a načítat model v jediné instrukci. MLflow stáhne model do dočasné složky a načte ho odtud. Metoda load_model
používá formát identifikátoru URI k označení místa, ze kterého se má model načíst. V případě načtení modelu ze spuštění je struktura identifikátoru URI následující:
model = mlflow.xgboost.load_model(f"runs:/{last_run.info.run_id}/{artifact_path}")
Tip
Pokud chcete dotazovat a načítat modely zaregistrované v registru modelů, přečtěte si téma Správa registrů modelů ve službě Azure Machine Learning pomocí MLflow.
Získání podřízených (vnořených) spuštění
MLflow podporuje koncept podřízených (vnořených) spuštění. Tato spuštění jsou užitečná, když potřebujete vypnout rutiny trénování, které je potřeba sledovat nezávisle na hlavním procesu trénování. Typické příklady úloh, které generují více podřízených spuštění, jsou procesy optimalizace hyperparametrů nebo kanály Služby Azure Machine Learning. Pomocí značky mlflow.parentRunId
vlastnosti, která obsahuje ID spuštění nadřazeného spuštění, můžete dotazovat všechna podřízená spuštění konkrétního spuštění.
hyperopt_run = mlflow.last_active_run()
child_runs = mlflow.search_runs(
filter_string=f"tags.mlflow.parentRunId='{hyperopt_run.info.run_id}'"
)
Porovnání úloh a modelů v studio Azure Machine Learning (Preview)
Pokud chcete porovnat a vyhodnotit kvalitu úloh a modelů v studio Azure Machine Learning, povolte tuto funkci pomocí panelu náhledu. Po povolení můžete porovnat parametry, metriky a značky mezi úlohami a/nebo modely, které jste vybrali.
Důležité
Položky označené (Preview) v tomto článku jsou aktuálně ve verzi Public Preview. Verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučuje se pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.
MLflow s poznámkovými bloky Azure Machine Learning ukazuje a rozšiřuje koncepty uvedené v tomto článku.
- Trénování a sledování klasifikátoru pomocí MLflow: Ukazuje, jak sledovat experimenty pomocí MLflow, modelů protokolů a kombinovat více příchutí do kanálů.
- Správa experimentů a spuštění pomocí MLflow: Ukazuje, jak dotazovat experimenty, běhy, metriky, parametry a artefakty ze služby Azure Machine Learning pomocí MLflow.
Matice podpory pro dotazování spuštění a experimentů
Sada MLflow SDK zveřejňuje několik metod pro načtení spuštění, včetně možností řízení vrácených a způsobů. V následující tabulce se dozvíte, které z těchto metod se v MLflow aktuálně podporují při připojení ke službě Azure Machine Learning:
Funkce | Podporováno MLflow | Podporováno službou Azure Machine Learning |
---|---|---|
Řazení se spouští podle atributů | ✓ | ✓ |
Řazení se spouští podle metrik | ✓ | 1 |
Řazení se spouští podle parametrů | ✓ | 1 |
Řazení se spouští podle značek | ✓ | 1 |
Filtrování se spouští podle atributů | ✓ | ✓ |
Filtrování spuštění podle metrik | ✓ | ✓ |
Filtrování se spouští podle metrik se speciálními znaky (řídicími znaky) | ✓ | |
Filtrování se spouští podle parametrů | ✓ | ✓ |
Filtrování se spouští podle značek | ✓ | ✓ |
Filtrování se spouští s číselnými komparátory (metrikami), včetně = , != , >= > , , < a<= |
✓ | ✓ |
Filtrování se spouští s porovnávači řetězců (parametry, značky a atributy): = a != |
✓ | {2 |
Filtrování se spouští s porovnávači řetězců (parametry, značky a atributy): LIKE /ILIKE |
✓ | ✓ |
Filtrování běhů s komparátory AND |
✓ | ✓ |
Filtrování běhů s komparátory OR |
||
Přejmenování experimentů | ✓ |
Poznámka:
- 1 V části Řazení najdete pokyny a příklady, jak dosáhnout stejné funkce ve službě Azure Machine Learning.
- 2
!=
pro značky se nepodporují.