Správa registrů modelů ve službě Azure Machine Učení pomocí MLflow

Azure Machine Učení podporuje MLflow pro správu modelů při připojení k pracovnímu prostoru. Takový přístup představuje pohodlný způsob, jak podporovat celý životní cyklus modelu pro uživatele, kteří jsou obeznámeni s klientem MLFlow. Následující článek popisuje různé možnosti a jejich porovnání s dalšími možnostmi.

Požadavky

  • Nainstalujte balíček mlflow MLflow SDK a modul plug-in Azure Machine Učení 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 Učení), nakonfigurujte MLflow tak, aby odkazovali na identifikátor URI sledování vašeho pracovního prostoru azure machine Učení. Další informace o připojení MLflow k pracovnímu prostoru najdete v tématu Konfigurace MLflow pro azure machine Učení.

  • Všimněte si, že správa modelů pomocí MLflow nepodporuje organizační registry.

  • Některé operace se můžou spouštět přímo pomocí rozhraní API fluentu MLflow (mlflow.<method>). Jiné ale můžou vyžadovat vytvoření klienta MLflow, který umožňuje komunikovat se službou Azure Machine Učení v protokolu MLflow. Objekt můžete vytvořit MlflowClient následujícím způsobem. Tento kurz používá objekt client odkazující na takového klienta MLflow.

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

Registrace nových modelů v registru

Registr modelů nabízí pohodlný a centralizovaný způsob správy modelů v pracovním prostoru. Každý pracovní prostor má vlastní registr nezávislých modelů. Následující část vysvětluje různé způsoby registrace modelů v registru pomocí MLflow SDK.

Vytváření modelů z existujícího spuštění

Pokud máte model MLflow přihlášený uvnitř spuštění a chcete ho zaregistrovat v registru, použijte ID spuštění a cestu, kam byl model protokolován. Informace o dotazování těchto informací, pokud je nemáte, najdete v tématu Správa experimentů a spuštění pomocí MLflow .

mlflow.register_model(f"runs:/{run_id}/{artifact_path}", model_name)

Poznámka:

Modely je možné zaregistrovat pouze do registru ve stejném pracovním prostoru, ve kterém bylo spuštění sledováno. Operace mezi pracovními prostory nejsou v okamžiku, kdy Učení Azure Machine podporované.

Tip

Doporučujeme registrovat modely ze spuštění nebo používat metodu mlflow.<flavor>.log_model z běhu, protože udržuje rodokmen z úlohy, která vygenerovala prostředek.

Vytváření modelů z prostředků

Pokud máte složku s modelem MLModel MLflow, můžete ji zaregistrovat přímo. Model nemusí být vždy v kontextu spuštění. K tomu můžete použít schéma file://path/to/model identifikátoru URI k registraci modelů MLflow uložených v místním systému souborů. Pojďme vytvořit jednoduchý model pomocí Scikit-Learn a uložit ho ve formátu MLflow v místním úložišti:

from sklearn import linear_model

reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])

mlflow.sklearn.save_model(reg, "./regressor")

Tip

Metoda save_model() funguje stejným způsobem jako log_model(). Zatímco log_model() uloží model uvnitř aktivního spuštění, save_model() používá k uložení modelu místní systém souborů.

Model teď můžete zaregistrovat z místní cesty:

import os

model_local_path = os.path.abspath("./regressor")
mlflow.register_model(f"file://{model_local_path}", "local-model-test")

Dotazování registrů modelů

Sadu MLflow SDK můžete použít k dotazování a vyhledávání modelů registrovaných v registru. Následující část vysvětluje několik způsobů, jak toho dosáhnout.

Dotazování na všechny modely v registru

Pomocí klienta MLflow můžete dotazovat všechny registrované modely v registru. Následující ukázka vytiskne všechny názvy modelu:

for model in client.search_registered_models():
    print(f"{model.name}")

Slouží order_by k řazení podle konkrétní vlastnosti, jako je name, version, creation_timestampa last_updated_timestamp:

client.search_registered_models(order_by=["name ASC"])

Poznámka:

Poradce pro MLflow 2.0: Ve starších verzích Mlflow (<2.0) použijte místo toho metodu MlflowClient.list_registered_models() .

Získání konkrétních verzí modelu

Příkaz search_registered_models() načte objekt modelu, který obsahuje všechny verze modelu. Pokud ale chcete získat poslední zaregistrovanou verzi modelu daného modelu, můžete použít get_registered_model:

client.get_registered_model(model_name)

Pokud potřebujete konkrétní verzi modelu, můžete to označit takto:

client.get_model_version(model_name, version=2)

Načítání modelů z registru

Modely můžete načíst přímo z registru a obnovit objekty modelů, které byly zaprotokolovány. Použijte funkce mlflow.<flavor>.load_model() nebo mlflow.pyfunc.load_model() udávající identifikátor URI modelu, který chcete načíst, pomocí následující syntaxe:

  • models:/<model-name>/latest, pro načtení poslední verze modelu.
  • models:/<model-name>/<version-number>, pro načtení konkrétní verze modelu.
  • models:/<model-name>/<stage-name>, pro načtení konkrétní verze v dané fázi pro model. Podrobnosti najdete ve fázích modelu.

Tip

Další informace o rozdílu mezi mlflow.<flavor>.load_model() modely MLflow a mlflow.pyfunc.load_model()zobrazením pracovních postupů pro načítání modelů MLflow.

Fáze modelu

MLflow podporuje fáze modelu pro správu životního cyklu modelu. Verze modelu se může převést z jedné fáze na jinou. Fáze se přiřazují k verzi modelu (místo modelů), což znamená, že daný model může mít v různých fázích více verzí.

Důležité

K dílčím fázím je možné přistupovat pouze pomocí sady MLflow SDK. Nezobrazují se na portálu Azure ML Studio a nedají se načíst pomocí sady Azure ML SDK, Azure ML CLI ani rozhraní AZURE ML REST API. Vytvoření nasazení z fáze daného modelu není v tuto chvíli podporováno.

Dotazování fází modelu

Pomocí klienta MLflow můžete zkontrolovat všechny možné fáze modelu:

client.get_model_version_stages(model_name, version="latest")

Verzi modelu můžete zobrazit v jednotlivých fázích získáním modelu z registru. Následující příklad získá verzi modelu aktuálně ve fázi Staging.

client.get_latest_versions(model_name, stages=["Staging"])

Poznámka:

Více verzí může být ve stejné fázi ve stejnou dobu v Mlflow, ale tato metoda vrátí nejnovější verzi (větší verzi) mezi všemi z nich.

Upozorňující

V názvech fází se rozlišují malá a velká písmena.

Přechodové modely

Převod verze modelu do konkrétní fáze je možné provést pomocí klienta MLflow.

client.transition_model_version_stage(model_name, version=3, stage="Staging")

Ve výchozím nastavení platí, že pokud v této konkrétní fázi existovala existující verze modelu, zůstane tam. Proto se nenahradí, protože verze více modelů mohou být ve stejné fázi ve stejnou dobu. Alternativně můžete indikovat archive_existing_versions=True , že MLflow má přesunout verzi existujícího modelu do fáze Archived.

client.transition_model_version_stage(
    model_name, version=3, stage="Staging", archive_existing_versions=True
)

Načítání modelů z fází

Model můžete načíst v konkrétní fázi přímo z Pythonu load_model pomocí funkce a následujícího formátu identifikátoru URI. Všimněte si, že aby tato metoda byla úspěšná, musíte mít všechny knihovny a závislosti již nainstalované v prostředí, ve kterém pracujete.

model = mlflow.pyfunc.load_model(f"models:/{model_name}/Staging")

Úpravy a odstraňování modelů

Úpravy registrovaných modelů se podporují jak v Mlflow, tak v Azure ML. Je však důležité si všimnout několika rozdílů:

Upozorňující

Přejmenování modelů se v Azure Machine Učení nepodporuje, protože objekty modelu jsou neměnné.

Úpravy modelů

Popis a značky modelu můžete upravit z modelu pomocí mlflow:

client.update_model_version(model_name, version=1, description="My classifier description")

Pokud chcete upravit značky, musíte použít metodu set_model_version_tag a remove_model_version_tag:

client.set_model_version_tag(model_name, version="1", key="type", value="classification")

Odebrání značky:

client.delete_model_version_tag(model_name, version="1", key="type")

Odstranění verze modelu

Pomocí klienta MLflow můžete odstranit libovolnou verzi modelu v registru, jak je znázorněno v následujícím příkladu:

client.delete_model_version(model_name, version="2")

Poznámka:

Azure Machine Učení nepodporuje odstranění celého kontejneru modelu. Abyste toho dosáhli, budete muset odstranit všechny verze modelu z daného modelu.

Matice podpory pro správu modelů pomocí MLflow

Klient MLflow zveřejňuje několik metod pro načítání a správu modelů. Následující tabulka ukazuje, které z těchto metod jsou aktuálně podporovány v MLflow při připojení k Azure ML. Porovná ho také s dalšími možnostmi správy modelů v Azure ML.

Funkce MLflow Azure ML s MLflow Azure ML CLIv2 Azure ML Studio
Registrace modelů ve formátu MLflow
Registrace modelů, které nejsou ve formátu MLflow
Registrace modelů z výstupů nebo artefaktů spuštění {1 {2
Registrace modelů z výstupů nebo artefaktů spuštění v jiném serveru nebo pracovním prostoru pro sledování {5 {5
Modely zaregistrované pro vyhledávání a seznam
Načítání podrobností o verzích registrovaného modelu
Popis verzí zaregistrovaného modelu
Úprava značek verzí zaregistrovaného modelu
Přejmenování registrovaných modelů 3 3 3
Odstranění registrovaného modelu (kontejneru) 3 3 3
Odstranění verze registrovaného modelu
Správa fází modelu MLflow
Vyhledávání registrovaných modelů podle názvu {4
Vyhledávání registrovaných modelů pomocí srovnávacích řetězců LIKE a ILIKE {4
Vyhledávání registrovaných modelů podle značky {4
Podpora organizačních registrů

Poznámka:

  • 1 Použijte identifikátory URI s formátem runs:/<ruin-id>/<path>.
  • 2 Použijte identifikátory URI s formátem azureml://jobs/<job-id>/outputs/artifacts/<path>.
  • 3 Zaregistrované modely jsou neměnné objekty v Azure ML.
  • 4 Použijte vyhledávací pole v nástroji Azure ML Studio. Byla podporována částečná shoda.
  • 5 Použití registrů k přesouvání modelů mezi různými pracovními prostory a zachování rodokmenu

Další kroky