Sdílet prostřednictvím


Sledování modelů ML pomocí MLflow a Azure Machine Learningu

PLATÍ PRO:Sada Python SDK azureml v1

V tomto článku se dozvíte, jak povolit sledování MLflow pro připojení služby Azure Machine Learning jako back-endu experimentů MLflow.

MLflow je opensourcová knihovna pro správu životního cyklu experimentů strojového učení. Sledování MLflow je součástí MLflow, která protokoluje a sleduje metriky trénovacích běhů a artefakty modelu bez ohledu na prostředí experimentu – místně na vašem počítači, ve vzdáleném výpočetním cíli, na virtuálním počítači nebo v clusteru Azure Databricks.

Viz MLflow a Azure Machine Learning , kde najdete všechny podporované funkce MLflow a Azure Machine Learning, včetně podpory projektů MLflow (Preview) a nasazení modelu.

Tip

Pokud chcete sledovat experimenty spuštěné v Azure Databricks nebo Azure Synapse Analytics, projděte si vyhrazené články Sledování experimentů Azure Databricks ML pomocí MLflow a Azure Machine Learning nebo Sledování experimentů Azure Synapse Analytics ML pomocí MLflow a Azure Machine Learning.

Poznámka

Informace v tomto dokumentu jsou primárně určené odborníkům na data a vývojářům, kteří chtějí monitorovat proces trénování modelu. Pokud jste správce, který má zájem o monitorování využití prostředků a událostí ze služby Azure Machine Learning, jako jsou kvóty, dokončené úlohy trénování nebo dokončená nasazení modelu, přečtěte si téma Monitorování služby Azure Machine Learning.

Požadavky

Sledování spuštění z místního počítače nebo vzdálených výpočetních prostředků

Sledování s využitím MLflow se službou Azure Machine Learning umožňuje ukládat protokolovaná metriky a spuštění artefaktů, která se spustila na místním počítači, do pracovního prostoru služby Azure Machine Learning.

Nastavení prostředí pro sledování

Pokud chcete sledovat spuštění, které neběží na výpočetních prostředcích služby Azure Machine Learning (od této chvíle se označuje jako "místní výpočetní prostředky"), musíte místní výpočetní prostředky nasměrovat na identifikátor URI sledování MLflow služby Azure Machine Learning.

Poznámka

Při spuštění na Výpočetních prostředcích Azure (Azure Notebooks, Jupyter Notebooks hostovaných ve výpočetních instancích Azure nebo výpočetních clusterech) nemusíte konfigurovat identifikátor URI sledování. Nakonfiguruje se automaticky za vás.

PLATÍ PRO:Sada Python SDK azureml v1

Identifikátor URI pro sledování MLflow služby Azure Machine Learning můžete získat pomocí sady Azure Machine Learning SDK v1 pro Python. Ujistěte se, že máte knihovnu azureml-sdk nainstalovanou v clusteru, který používáte. Následující ukázka získá jedinečný identifikátor URI sledování MLFLow přidružený k vašemu pracovnímu prostoru. Metoda set_tracking_uri() pak na tento identifikátor URI odkazuje na sledovací identifikátor URI MLflow.

  1. Použití konfiguračního souboru pracovního prostoru:

    from azureml.core import Workspace
    import mlflow
    
    ws = Workspace.from_config()
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

    Tip

    Konfigurační soubor pracovního prostoru si můžete stáhnout pomocí:

    1. Přejděte na studio Azure Machine Learning.
    2. Klikněte do pravého rohu stránky –> Stáhnout konfigurační soubor.
    3. Uložte soubor config.json do stejného adresáře, na kterém pracujete.
  2. Pomocí ID předplatného, názvu skupiny prostředků a názvu pracovního prostoru:

    from azureml.core import Workspace
    import mlflow
    
    #Enter details of your Azure Machine Learning workspace
    subscription_id = '<SUBSCRIPTION_ID>'
    resource_group = '<RESOURCE_GROUP>'
    workspace_name = '<AZUREML_WORKSPACE_NAME>'
    
    ws = Workspace.get(name=workspace_name,
                       subscription_id=subscription_id,
                       resource_group=resource_group)
    
    mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
    

Nastavit název experimentu

Všechna spuštění MLflow se protokolují do aktivního experimentu. Ve výchozím nastavení se spuštění protokolují do experimentu s názvem Default , který se automaticky vytvoří pro vás. Ke konfiguraci experimentu, na který chcete pracovat, použijte příkaz mlflow.set_experiment()MLflow .

experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)

Tip

Při odesílání úloh pomocí sady Azure Machine Learning SDK můžete při odesílání nastavit název experimentu pomocí vlastnosti experiment_name . Nemusíte ho konfigurovat ve svém trénovacím skriptu.

Spustit trénovací běh

Po nastavení názvu experimentu MLflow můžete spustit trénovací běh pomocí start_run()příkazu . Pak pomocí aktivujte log_metric() rozhraní API protokolování MLflow a začněte protokolovat metriky trénovacích běhů.

import os
from random import random

with mlflow.start_run() as mlflow_run:
    mlflow.log_param("hello_param", "world")
    mlflow.log_metric("hello_metric", random())
    os.system(f"echo 'hello world' > helloworld.txt")
    mlflow.log_artifact("helloworld.txt")

Podrobnosti o tom, jak protokolovat metriky, parametry a artefakty v běhu pomocí MLflow, najdete v tématu Protokolování a zobrazení metrik.

Sledování spuštění spuštěných ve službě Azure Machine Learning

PLATÍ PRO:Sada Python SDK azureml v1

Vzdálená spuštění (úlohy) umožňují trénovat modely robustnějším a opakovaným způsobem. Můžou také využívat výkonnější výpočetní prostředky, jako jsou výpočetní clustery služby Machine Learning. Informace o různých možnostech výpočetních prostředků najdete v tématu Použití cílových výpočetních objektů pro trénování modelu .

Při odesílání spuštění Azure Machine Learning automaticky nakonfiguruje MLflow pro práci s pracovním prostorem, ve kterém běží. To znamená, že není potřeba konfigurovat identifikátor URI sledování MLflow. Experimenty se navíc automaticky pojmenovávají na základě podrobností o odeslání experimentu.

Důležité

Při odesílání trénovacích úloh do služby Azure Machine Learning nemusíte konfigurovat identifikátor URI sledování MLflow pro vaši trénovací logiku, protože už je nakonfigurovaný. Název experimentu nemusíte konfigurovat ani v rutině trénování.

Vytvoření rutiny trénování

Nejprve byste měli vytvořit src podadresář a vytvořit soubor s trénovacím kódem train.py v souboru v src podadresáři. Veškerý trénovací kód půjde do podadresáře src , včetně train.py.

Trénovací kód je převzatý z tohoto příkladu MLflow v ukázkovém úložišti Azure Machine Learning.

Zkopírujte do souboru tento kód:

# imports
import os
import mlflow

from random import random

# define functions
def main():
    mlflow.log_param("hello_param", "world")
    mlflow.log_metric("hello_metric", random())
    os.system(f"echo 'hello world' > helloworld.txt")
    mlflow.log_artifact("helloworld.txt")


# run functions
if __name__ == "__main__":
    # run main function
    main()

Konfigurace experimentu

K odeslání experimentu do služby Azure Machine Learning budete muset použít Python. V poznámkovém bloku nebo souboru Pythonu nakonfigurujte výpočetní a trénovací běhové prostředí s Environment třídou .

from azureml.core import Environment
from azureml.core.conda_dependencies import CondaDependencies

env = Environment(name="mlflow-env")

# Specify conda dependencies with scikit-learn and temporary pointers to mlflow extensions
cd = CondaDependencies.create(
    conda_packages=["scikit-learn", "matplotlib"],
    pip_packages=["azureml-mlflow", "pandas", "numpy"]
    )

env.python.conda_dependencies = cd

Pak vytvořte ScriptRunConfig objekt se vzdáleným výpočetním objektem jako cílovým výpočetním objektem.

from azureml.core import ScriptRunConfig

src = ScriptRunConfig(source_directory="src",
                      script=training_script,
                      compute_target="<COMPUTE_NAME>",
                      environment=env)

S touto konfigurací spuštění výpočetních Experiment.submit() prostředků a trénování použijte k odeslání spuštění metodu . Tato metoda automaticky nastaví identifikátor URI sledování MLflow a směruje protokolování z MLflow do vašeho pracovního prostoru.

from azureml.core import Experiment
from azureml.core import Workspace
ws = Workspace.from_config()

experiment_name = "experiment_with_mlflow"
exp = Experiment(workspace=ws, name=experiment_name)

run = exp.submit(src)

Zobrazení metrik a artefaktů v pracovním prostoru

Metriky a artefakty z protokolování MLflow se sledují ve vašem pracovním prostoru. Pokud je chcete kdykoli zobrazit, přejděte do pracovního prostoru a vyhledejte experiment podle názvu v pracovním prostoru v studio Azure Machine Learning. Nebo spusťte následující kód.

Načtení metriky spuštění pomocí MLflow get_run()

from mlflow.tracking import MlflowClient

# Use MlFlow to retrieve the run that was just completed
client = MlflowClient()
run_id = mlflow_run.info.run_id
finished_mlflow_run = MlflowClient().get_run(run_id)

metrics = finished_mlflow_run.data.metrics
tags = finished_mlflow_run.data.tags
params = finished_mlflow_run.data.params

print(metrics,tags,params)

K zobrazení artefaktů spuštění můžete použít MlFlowClient.list_artifacts().

client.list_artifacts(run_id)

Ke stažení artefaktu do aktuálního adresáře můžete použít MLFlowClient.download_artifacts().

client.download_artifacts(run_id, "helloworld.txt", ".")

Další podrobnosti o tom, jak načítat informace z experimentů a spuštění ve službě Azure Machine Learning pomocí MLflow, najdete v zobrazení Správa experimentů a spuštění pomocí MLflow.

Porovnání a dotazování

Porovnejte a dotazujte všechna spuštění MLflow ve vašem pracovním prostoru Azure Machine Learning pomocí následujícího kódu. Přečtěte si další informace o dotazování spuštění pomocí MLflow.

from mlflow.entities import ViewType

all_experiments = [exp.experiment_id for exp in MlflowClient().list_experiments()]
query = "metrics.hello_metric > 0"
runs = mlflow.search_runs(experiment_ids=all_experiments, filter_string=query, run_view_type=ViewType.ALL)

runs.head(10)

Automatické protokolování

Pomocí Azure Machine Learning a MLFlow můžou uživatelé při trénování modelu automaticky protokolovat metriky, parametry modelu a artefakty modelu. Podporují se různé oblíbené knihovny strojového učení .

Pokud chcete povolit automatické protokolování , vložte před trénovací kód následující kód:

mlflow.autolog()

Přečtěte si další informace o automatickém protokolování pomocí MLflow.

Správa modelů

Zaregistrujte a sledujte své modely pomocí registru modelů služby Azure Machine Learning, který podporuje registr modelů MLflow. Modely Azure Machine Learning jsou sladěné se schématem modelu MLflow, což usnadňuje export a import těchto modelů napříč různými pracovními postupy. Metadata související s MLflow, jako je ID spuštění, se také sledují s registrovaným modelem pro sledovatelnost. Uživatelé můžou odesílat trénovací spuštění, registrovat a nasazovat modely vytvořené ze spuštění MLflow.

Pokud chcete nasadit a zaregistrovat model připravený pro produkční prostředí v jednom kroku, přečtěte si téma Nasazení a registrace modelů MLflow.

Pokud chcete zaregistrovat a zobrazit model ze spuštění, postupujte následovně:

  1. Po dokončení spuštění zavolejte metodu register_model() .

    # the model folder produced from a run is registered. This includes the MLmodel file, model.pkl and the conda.yaml.
    model_path = "model"
    model_uri = 'runs:/{}/{}'.format(run_id, model_path) 
    mlflow.register_model(model_uri,"registered_model_name")
    
  2. Zobrazte zaregistrovaný model v pracovním prostoru pomocí studio Azure Machine Learning.

    V následujícím příkladu má zaregistrovaný model my-model označená metadata sledování MLflow.

    register-mlflow-model

  3. Výběrem karty Artifacts (Artefakty ) zobrazíte všechny soubory modelu, které jsou zarovnané se schématem modelu MLflow (conda.yaml, MLmodel, model.pkl).

    model-schema

  4. Výběrem MLmodel zobrazíte soubor MLmodel vygenerovaný spuštěním.

    MLmodel-schema

Vyčištění prostředků

Pokud ve svém pracovním prostoru neplánujete používat protokolované metriky a artefakty, není v současné době k dispozici možnost je odstranit jednotlivě. Místo toho odstraňte skupinu prostředků, která obsahuje účet úložiště a pracovní prostor, aby se vám neúčtovaly žádné poplatky:

  1. Úplně nalevo na webu Azure Portal vyberte Skupiny prostředků.

    Odstranit v Azure Portal

  2. V seznamu vyberte skupinu prostředků, kterou jste vytvořili.

  3. Vyberte Odstranit skupinu prostředků.

  4. Zadejte název skupiny prostředků. Vyberte Odstranit.

Příklady poznámkových bloků

Poznámkové bloky MLflow s Azure Machine Learning ukazují a rozšiřují koncepty uvedené v tomto článku. Projděte si také úložiště řízené komunitou , Příklady AzureML.

Další kroky