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 MLflowazureml-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řitMlflowClient
následujícím způsobem. Tento kurz používá objektclient
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_timestamp
a 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