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 obiektclient
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_timestamp
i 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.