Zarządzanie rejestrem modeli w usłudze Azure Machine Learning za pomocą biblioteki MLflow

Usługa Azure Machine Learning obsługuje rozwiązanie MLflow do zarządzania modelami w przypadku połączenia z obszarem roboczym. Takie podejście jest wygodnym sposobem obsługi całego cyklu życia modelu dla użytkowników zaznajomionych z klientem MLFlow.

W tym artykule opisano możliwości zarządzania rejestrem modeli za pomocą biblioteki MLflow oraz porównanie tej metody z innymi opcjami zarządzania.

Wymagania wstępne

  • Zainstaluj pakiet mlflow zestawu MLflow SDK i wtyczkę usługi Azure Machine Learning azureml-mlflow dla biblioteki MLflow:

    pip install mlflow azureml-mlflow
    

    Napiwek

    Możesz użyć mlflow-skinny pakietu, który jest lekkim pakietem MLflow bez magazynu SQL, serwera, interfejsu użytkownika lub zależności nauki o danych. mlflow-skinny jest zalecane dla użytkowników, którzy potrzebują głównie funkcji śledzenia i rejestrowania MLflow bez importowania pełnego zestawu funkcji, w tym wdrożeń.

  • Obszar roboczy usługi Azure Machine Learning. Aby utworzyć obszar roboczy, zobacz samouczek Tworzenie zasobów uczenia maszynowego. Przejrzyj uprawnienia dostępu potrzebne do wykonywania operacji MLflow w obszarze roboczym.

  • Jeśli wykonujesz zdalne śledzenie (czyli śledzenie eksperymentów uruchomionych poza usługą Azure Machine Learning), skonfiguruj rozwiązanie MLflow, aby wskazywało identyfikator URI śledzenia obszaru roboczego usługi Azure Machine Learning. Aby uzyskać więcej informacji na temat łączenia platformy MLflow z obszarem roboczym, zobacz Konfigurowanie biblioteki MLflow dla usługi Azure Machine Learning.

  • Procedury opisane w tym artykule używają client obiektu do odwoływania się do klienta MLflow.

    Niektóre operacje można wykonywać bezpośrednio przy użyciu płynnego interfejsu API MLflow, mlflow.<method>. Inne operacje wymagają klienta MLflow w celu umożliwienia komunikacji z usługą Machine Learning w protokole MLflow. Poniższy kod tworzy MlflowClient obiekt:

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

Ograniczenia

  • Usługa Azure Machine Learning nie obsługuje zmieniania nazw modeli.

  • Usługa Machine Learning nie obsługuje usuwania całego kontenera modelu.

  • Rejestry organizacyjne nie są obsługiwane w przypadku zarządzania modelami za pomocą biblioteki MLflow.

  • Wdrażanie modelu z określonego etapu modelu nie jest obecnie obsługiwane w usłudze Machine Learning.

  • Operacje między obszarami roboczymi nie są obecnie obsługiwane w usłudze Machine Learning.

Rejestrowanie nowych modeli

Rejestr modeli oferuje wygodny i scentralizowany sposób zarządzania modelami w obszarze roboczym. Każdy obszar roboczy ma własny rejestr niezależnych modeli. W poniższych sekcjach przedstawiono dwa sposoby rejestrowania modeli w rejestrze przy użyciu zestawu MLflow SDK.

Tworzenie modeli na podstawie istniejącego przebiegu

Jeśli masz model MLflow zarejestrowany wewnątrz przebiegu i chcesz zarejestrować go w rejestrze, użyj identyfikatora przebiegu i ścieżki, w której jest rejestrowany model. Aby uzyskać te informacje, możesz wykonać zapytanie, postępując zgodnie z instrukcjami w temacie Zarządzanie eksperymentami i przebiegami za pomocą biblioteki MLflow.

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

Uwaga

Modele można zarejestrować tylko w rejestrze w tym samym obszarze roboczym, w którym śledzono przebieg. Operacje między obszarami roboczymi nie są obecnie obsługiwane w usłudze Azure Machine Learning.

Napiwek

Rejestrowanie modeli z przebiegów lub przy użyciu mlflow.<flavor>.log_model metody z wewnątrz przebiegu. Takie podejście zachowuje pochodzenie z zadania, które wygenerowało zasób.

Tworzenie modeli na podstawie zasobów

Jeśli masz folder z modelem MLModel MLflow, możesz zarejestrować go bezpośrednio. Nie ma potrzeby, aby model był zawsze w kontekście przebiegu. W tym podejściu można użyć schematu file://path/to/model identyfikatora URI do zarejestrowania modeli MLflow przechowywanych w lokalnym systemie plików.

Poniższy kod tworzy prosty model przy użyciu scikit-learn pakietu i zapisuje model w formacie MLflow w magazynie lokalnym:

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")

Napiwek

Metoda save_model() działa w taki sam sposób jak log_model() metoda. log_model() Podczas gdy metoda zapisuje model wewnątrz aktywnego przebiegu, save_model() metoda używa lokalnego systemu plików do zapisania modelu.

Poniższy kod rejestruje model przy użyciu ścieżki lokalnej:

import os

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

Rejestry modeli zapytań

Zestaw MLflow SDK umożliwia wykonywanie zapytań i wyszukiwanie modeli zarejestrowanych w rejestrze. W poniższych sekcjach przedstawiono dwa sposoby wykonywania zapytań dotyczących modelu.

Wykonywanie zapytań względem wszystkich modeli w rejestrze

Wszystkie zarejestrowane modele w rejestrze można wykonywać względem wszystkich zarejestrowanych modeli przy użyciu klienta MLflow.

Poniższy kod wyświetla nazwy wszystkich modeli w rejestrze:

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

order_by Użyj metody , aby zorganizować dane wyjściowe według określonej właściwości, takiej jak name, version, creation_timestamplub last_updated_timestamp:

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

Uwaga

W przypadku wersji MLflow wcześniejszych niż 2.0 użyj MlflowClient.list_registered_models() metody .

Uzyskiwanie określonych wersji modelu

Metoda search_registered_models() pobiera obiekt modelu, który zawiera wszystkie wersje modelu. Aby uzyskać ostatnią zarejestrowaną wersję modelu dla danego modelu, możesz użyć get_registered_model() metody :

client.get_registered_model(model_name)

Aby uzyskać określoną wersję modelu, użyj następującego kodu:

client.get_model_version(model_name, version=2)

Ładowanie modeli z rejestru

Modele można ładować bezpośrednio z rejestru, aby przywrócić zarejestrowane obiekty modeli. W tym zadaniu użyj funkcji mlflow.<flavor>.load_model() lub mlflow.pyfunc.load_model() i wskaż identyfikator URI modelu do załadowania.

Te funkcje można zaimplementować przy użyciu następującej składni:

  • models:/<model-name>/latest: załaduj ostatnią wersję modelu.
  • models:/<model-name>/<version-number>: załaduj określoną wersję modelu.
  • models:/<model-name>/<stage-name>: załaduj określoną wersję na danym etapie dla modelu. Aby uzyskać więcej informacji, zobacz Praca z etapami modelu.

Aby zrozumieć różnice między funkcjami mlflow.<flavor>.load_model() i mlflow.pyfunc.load_model(), zobacz Przepływy pracy dotyczące ładowania modeli MLflow.

Praca z etapami modelu

Platforma MLflow obsługuje etapy modelu do zarządzania cyklem życia modelu. Wersja modelu może przejść z jednego etapu do innego. Etapy są przypisywane do określonych wersji modelu. Model może mieć wiele wersji na różnych etapach.

Ważne

Dostęp do etapów można uzyskać tylko przy użyciu zestawu MLflow SDK. Nie są one widoczne w usłudze Azure Machine Learning Studio. Etapów nie można pobrać przy użyciu zestawu AZURE Machine Learning SDK, interfejsu wiersza polecenia usługi Azure Machine Learning lub interfejsu API REST usługi Azure Machine Learning. Wdrażanie z określonego etapu modelu nie jest obecnie obsługiwane.

Etapy modelu zapytań

Poniższy kod używa klienta MLflow do sprawdzania wszystkich możliwych etapów modelu:

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

Wersje modelu dla każdego etapu modelu można wyświetlić, pobierając model z rejestru. Poniższy kod pobiera wersję modelu, która jest obecnie na Staging etapie:

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

Wiele wersji modelu może znajdować się na tym samym etapie w tym samym czasie w środowisku MLflow. W poprzednim przykładzie metoda zwraca najnowszą (najnowszą) wersję we wszystkich wersjach etapu.

Ważne

W zestawie MLflow SDK nazwy etapów są uwzględniane w wielkości liter.

Wersja modelu przejścia

Przejście wersji modelu do określonego etapu można wykonać przy użyciu klienta MLflow:

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

W przypadku przejścia wersji modelu do określonego etapu, jeśli etap ma już inne wersje modelu, istniejące wersje pozostają niezmienione. To zachowanie ma zastosowanie domyślnie.

Innym podejściem jest ustawienie parametru archive_existing_versions=True podczas przejścia. To podejście instruuje platformę MLflow, aby przenieść wszystkie istniejące wersje modelu do etapu Archived:

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

Ładowanie modeli z etapów

Model można załadować bezpośrednio z języka Python przy użyciu load_model funkcji i następującego formatu identyfikatora URI. Aby ta metoda powiodła się, wszystkie biblioteki i zależności muszą być zainstalowane w środowisku roboczym.

Załaduj model z etapu Staging :

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

Edytowanie i usuwanie modeli

Edytowanie zarejestrowanych modeli jest obsługiwane zarówno w usłudze MLflow, jak i w usłudze Azure Machine Learning, ale istnieją pewne istotne różnice. W poniższych sekcjach opisano niektóre opcje.

Uwaga

Zmiana nazw modeli nie jest obsługiwana w usłudze Azure Machine Learning, ponieważ obiekty modelu są niezmienne.

Edytowanie opisu modelu i tagów

Opis i tagi modelu można edytować przy użyciu zestawu MLflow SDK:

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

Aby edytować tagi, użyj set_model_version_tag metod i remove_model_version_tag :

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

Aby usunąć tag, użyj delete_model_version_tag metody :

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

Usuwanie wersji modelu

Każdą wersję modelu w rejestrze można usunąć przy użyciu klienta MLflow:

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

Uwaga

Usługa Machine Learning nie obsługuje usuwania całego kontenera modelu. Aby osiągnąć to zadanie, usuń wszystkie wersje modelu dla danego modelu.

Zapoznaj się z obsługiwanymi możliwościami zarządzania modelami

Klient MLflow udostępnia kilka metod pobierania modeli i zarządzania nimi. W poniższej tabeli wymieniono metody obecnie obsługiwane w rozwiązaniu MLflow podczas nawiązywania połączenia z usługą Azure Machine Learning. W tabeli porównaliśmy również rozwiązanie MLflow z innymi możliwościami zarządzania modelami w usłudze Azure Machine Learning.


Opis funkcji
Tylko MLflow Uczenie maszynowe za pomocą biblioteki MLflow Interfejs wiersza polecenia usługi Machine Learning w wersji 2 Machine Learning Studio
Rejestrowanie modeli w formacie MLflow
Rejestrowanie modeli nie w formacie MLflow
Rejestrowanie modeli z uruchomionych danych wyjściowych/artefaktów 1 2
Rejestrowanie modeli z uruchomionych danych wyjściowych/artefaktów na innym serwerze śledzenia/obszarze roboczym 5 5
Wyszukiwanie/wyświetlanie zarejestrowanych modeli
Pobieranie szczegółów zarejestrowanych wersji modelu
Edytowanie opisu wersji zarejestrowanego modelu
Edytowanie tagów wersji zarejestrowanego modelu
Zmienianie nazwy zarejestrowanych modeli 3 3 3
Usuwanie zarejestrowanego modelu (kontenera) 3 3 3
Usuwanie zarejestrowanej wersji modelu
Zarządzanie etapami modelu MLflow
Wyszukiwanie zarejestrowanych modeli według nazwy 4
Wyszukiwanie zarejestrowanych modeli przy użyciu komparatorów ciągów LIKE i ILIKE 4
Wyszukiwanie zarejestrowanych modeli według tagu 4
Obsługa rejestrów organizacyjnych

Przypisy dolne tabeli:

  • 1 Użyj identyfikatorów URI (Uniform Resource Identifiers) w formacie runs:/<ruin-id>/<path>.
  • 2 Użyj identyfikatorów URI w formacie azureml://jobs/<job-id>/outputs/artifacts/<path>.
  • 3 Zarejestrowane modele są niezmiennymi obiektami w usłudze Azure Machine Learning.
  • 4 Użyj pola wyszukiwania w usłudze Azure Machine Learning Studio. Częściowe dopasowywanie jest obsługiwane.
  • 5 Używanie rejestrów do przenoszenia modeli między różnymi obszarami roboczymi i zachowywania pochodzenia.