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 zestawu MLflow SDK
mlflow
i wtyczkę usługi Azure Machine Learningazureml-mlflow
dla biblioteki MLflow w następujący sposób: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. Ten pakiet jest zalecany dla użytkowników, którzy potrzebują głównie funkcji śledzenia i rejestrowania MLflow bez importowania pełnego zestawu funkcji, w tym wdrożeń.Tworzenie obszaru roboczego usługi Azure Machine Learning. Aby utworzyć obszar roboczy, zobacz Tworzenie zasobów, które należy rozpocząć. Przejrzyj uprawnienia dostępu potrzebne do wykonywania operacji MLflow w obszarze roboczym.
Aby przeprowadzić zdalne śledzenie lub śledzić eksperymenty uruchomione 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 tworzyMlflowClient
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_timestamp
lub 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.