Zarządzanie rejestrami modeli w usłudze Azure Machine Edukacja za pomocą biblioteki MLflow

Usługa Azure Machine Edukacja obsługuje rozwiązanie MLflow do zarządzania modelami w przypadku połączenia z obszarem roboczym. Takie podejście stanowi wygodny sposób obsługi całego cyklu życia modelu dla użytkowników zaznajomionych z klientem MLFlow. W poniższym artykule opisano różne możliwości i sposób ich porównywania z innymi opcjami.

Wymagania wstępne

  • Zainstaluj pakiet mlflow zestawu MLflow SDK i wtyczkę usługi Azure Machine Edukacja dla platformy MLflowazureml-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 zalecany dla użytkowników, którzy potrzebują głównie możliwości śledzenia i rejestrowania MLflow bez importowania pełnego zestawu funkcji, w tym wdrożeń.

  • Obszar roboczy usługi Azure Machine Learning. Możesz go utworzyć, wykonując czynności opisane w samouczku Tworzenie zasobów uczenia maszynowego.

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

  • Zwróć uwagę, że rejestry organizacyjne nie są obsługiwane w przypadku zarządzania modelami za pomocą biblioteki MLflow.

  • Niektóre operacje mogą być wykonywane bezpośrednio przy użyciu płynnego interfejsu API MLflow (mlflow.<method>). Jednak inne mogą wymagać utworzenia klienta MLflow, który umożliwia komunikację z usługą Azure Machine Edukacja w protokole MLflow. Obiekt można utworzyć MlflowClient w następujący sposób. W tym samouczku obiekt client jest używany do odwoływania się do takiego klienta MLflow.

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

Rejestrowanie nowych modeli w rejestrze

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ższej sekcji opisano wiele sposobów 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 zarejestrowano model. Zobacz Zarządzanie eksperymentami i przebiegami za pomocą biblioteki MLflow , aby dowiedzieć się, jak wykonywać zapytania dotyczące tych informacji, jeśli ich nie masz.

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ą obsługiwane przez moment w usłudze Azure Machine Edukacja.

Napiwek

Zalecamy zarejestrowanie modeli z przebiegów lub użycie metody mlflow.<flavor>.log_model z wewnątrz przebiegu, ponieważ 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 celu można użyć schematu file://path/to/model identyfikatora URI do zarejestrowania modeli MLflow przechowywanych w lokalnym systemie plików. Utwórzmy prosty model przy użyciu i Scikit-Learn zapiszmy go 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(). Podczas log_model() zapisywania modelu wewnątrz aktywnego przebiegu save_model() używa lokalnego systemu plików do zapisywania modelu.

Teraz możesz zarejestrować model ze ścieżki lokalnej:

import os

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

Wykonywanie zapytań dotyczących rejestrów modeli

Zestaw MLflow SDK umożliwia wykonywanie zapytań i wyszukiwanie modeli zarejestrowanych w rejestrze. W poniższej sekcji opisano wiele sposobów jej osiągnięcia.

Wykonywanie zapytań dotyczących wszystkich modeli w rejestrze

Wszystkie zarejestrowane modele w rejestrze można wykonywać względem wszystkich zarejestrowanych modeli przy użyciu klienta MLflow. Poniższy przykład wyświetla wszystkie nazwy modelu:

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

Użyj order_by polecenia , aby zamówić według określonej właściwości, takiej jak name, version, creation_timestampi last_updated_timestamp:

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

Uwaga

Porady dotyczące platformy MLflow 2.0: w starszych wersjach biblioteki Mlflow (<2.0) należy zamiast tego użyć metody MlflowClient.list_registered_models() .

Pobieranie określonych wersji modelu

Polecenie search_registered_models() pobiera obiekt modelu, który zawiera wszystkie wersje modelu. Jeśli jednak chcesz uzyskać ostatnią zarejestrowaną wersję modelu danego modelu, możesz użyć polecenia get_registered_model:

client.get_registered_model(model_name)

Jeśli potrzebujesz określonej wersji modelu, możesz wskazać następujące elementy:

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. Użyj funkcji mlflow.<flavor>.load_model() lub mlflow.pyfunc.load_model() wskazuje identyfikator URI modelu, który chcesz załadować przy użyciu następującej składni:

  • models:/<model-name>/latest, aby załadować ostatnią wersję modelu.
  • models:/<model-name>/<version-number>, aby załadować określoną wersję modelu.
  • models:/<model-name>/<stage-name>, aby załadować określoną wersję na danym etapie dla modelu. Wyświetl etapy modelu, aby uzyskać szczegółowe informacje.

Napiwek

Aby dowiedzieć się więcej na temat różnic między mlflow.<flavor>.load_model() i mlflow.pyfunc.load_model(), wyświetl przepływy pracy dotyczące ładowania modeli MLflow.

Etapy 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 wersji modelu (zamiast modeli), co oznacza, że dany 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 wyświetlane w portalu usługi Azure ML Studio i nie można ich pobrać przy użyciu ani zestawu AZURE ML SDK, interfejsu wiersza polecenia usługi Azure ML ani interfejsu API REST usługi Azure ML. Tworzenie wdrożenia na podstawie etapu danego modelu nie jest obsługiwane w tej chwili.

Wykonywanie zapytań względem etapów modelu

Możesz użyć klienta MLflow, aby sprawdzić wszystkie możliwe etapy modelu:

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

Wersję modelu można zobaczyć na każdym etapie, uzyskując model z rejestru. Poniższy przykład pobiera wersję modelu obecnie na etapie Staging.

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

Uwaga

Wiele wersji może być na tym samym etapie w tym samym czasie w środowisku Mlflow, jednak ta metoda zwraca najnowszą wersję (nowszą wersję) wśród wszystkich z nich.

Ostrzeżenie

W nazwach etapów jest rozróżniana wielkość liter.

Przenoszenie modeli

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

Domyślnie, jeśli w danym etapie istniała istniejąca wersja modelu, pozostaje tam. W związku z tym nie jest zastępowany, ponieważ wersje wielu modeli mogą znajdować się na tym samym etapie w tym samym czasie. Alternatywnie możesz wskazać archive_existing_versions=True , aby poinformować MLflow o przeniesieniu wersji istniejącego modelu do etapu Archived.

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

Ładowanie modeli z etapów

ou może załadować model na określonym etapie bezpośrednio z języka Python przy użyciu load_model funkcji i następującego formatu identyfikatora URI. Zwróć uwagę, że aby ta metoda zakończyła się powodzeniem, musisz mieć już zainstalowane wszystkie biblioteki i zależności w środowisku, w którym pracujesz.

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 ML. Należy jednak zauważyć pewne różnice:

Ostrzeżenie

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

Edytowanie modeli

Opis i tagi modelu można edytować z modelu przy użyciu platformy Mlflow:

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

Aby edytować tagi, należy użyć metody set_model_version_tag i remove_model_version_tag:

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

Usuwanie tagu:

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

Usuwanie wersji modelu

Dowolną wersję modelu w rejestrze można usunąć przy użyciu klienta MLflow, jak pokazano w poniższym przykładzie:

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

Uwaga

Usługa Azure Machine Edukacja nie obsługuje usuwania całego kontenera modelu. Aby osiągnąć to samo, należy usunąć wszystkie wersje modelu z danego modelu.

Macierz obsługi zarządzania modelami za pomocą biblioteki MLflow

Klient MLflow udostępnia kilka metod pobierania modeli i zarządzania nimi. W poniższej tabeli przedstawiono, które z tych metod są obecnie obsługiwane w usłudze MLflow podczas nawiązywania połączenia z usługą Azure ML. Porównuje ją również z innymi możliwościami zarządzania modelami w usłudze Azure ML.

Funkcja MLflow Usługa Azure ML z rozwiązaniem MLflow Azure ML CLIv2 Azure ML 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 nazw 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

Uwaga

  • 1 Użyj identyfikatorów URI 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 ML.
  • 4 Użyj pola wyszukiwania w usłudze Azure ML Studio. Obsługiwane częściowe dopasowanie.
  • 5 Używanie rejestrów do przenoszenia modeli między różnymi obszarami roboczymi przy zachowaniu pochodzenia danych.

Następne kroki