Sdílet prostřednictvím


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 MLflow SDK a modul plug-in Azure Machine Learning pro MLflow azureml-mlflow.

    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. mlflow-skinny 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í.

  • Pracovní prostor služby Azure Machine Learning. Můžete ho vytvořit podle kurzu Vytvoření prostředků strojového učení.

  • Pokud provádíte vzdálené sledování (tj. sledování experimentů spuštěných mimo Azure Machine Learning), nakonfigurujte MLflow tak, aby odkazovat 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_namesnebo 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ími params.*metrics.*, nebo tags.* v parametru order_by se v současné době nepodporuje. Místo toho použijte metodu order_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 =, likea != 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íč attributesby 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.parentRunIdvlastnosti, 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.

Snímek obrazovky s panelem náhledu znázorňující, jak porovnat úlohy a modely v studio Azure Machine Learning

MLflow s poznámkovými bloky Azure Machine Learning ukazuje a rozšiřuje koncepty uvedené v tomto článku.

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í.