Śledzenie eksperymentów usługi Azure Databricks ML za pomocą platformy MLflow i usługi Azure Machine Learning
MLflow to biblioteka typu open source do zarządzania cyklem życia eksperymentów uczenia maszynowego. Za pomocą platformy MLflow możesz zintegrować usługę Azure Databricks z usługą Azure Machine Edukacja, aby zapewnić najlepsze wyniki z obu produktów.
Z tego artykułu dowiesz się:
- Wymagane biblioteki potrzebne do używania bibliotek MLflow z usługami Azure Databricks i Azure Machine Edukacja.
- Jak śledzić przebiegi usługi Azure Databricks za pomocą biblioteki MLflow w usłudze Azure Machine Edukacja.
- Jak rejestrować modele za pomocą platformy MLflow, aby zarejestrować je w usłudze Azure Machine Edukacja.
- Jak wdrażać i korzystać z modeli zarejestrowanych w usłudze Azure Machine Edukacja.
Wymagania wstępne
azureml-mlflow
Zainstaluj pakiet, który obsługuje łączność z usługą Azure Machine Edukacja, w tym uwierzytelnianiem.- Obszar roboczy i klaster usługi Azure Databricks.
- Utwórz obszar roboczy usługi Azure Machine Edukacja.
Przykładowe notesy
Modele trenowania w usłudze Azure Databricks i ich wdrażanie w usłudze Azure Machine Edukacja pokazują, jak trenować modele w usłudze Azure Databricks i wdrażać je w usłudze Azure Machine Edukacja. Obejmuje również sposób obsługi przypadków, w których chcesz również śledzić eksperymenty i modele przy użyciu wystąpienia platformy MLflow w usłudze Azure Databricks i korzystać z usługi Azure Machine Edukacja do wdrożenia.
Instalowanie bibliotek
Aby zainstalować biblioteki w klastrze, przejdź do karty Biblioteki i wybierz pozycję Zainstaluj nowy
W polu Pakiet wpisz azureml-mlflow, a następnie wybierz pozycję Zainstaluj. Powtórz ten krok w razie potrzeby, aby zainstalować inne dodatkowe pakiety w klastrze na potrzeby eksperymentu.
Śledzenie przebiegów usługi Azure Databricks za pomocą platformy MLflow
Usługę Azure Databricks można skonfigurować do śledzenia eksperymentów przy użyciu platformy MLflow na dwa sposoby:
- Śledzenie zarówno w obszarze roboczym usługi Azure Databricks, jak i w obszarze roboczym usługi Azure Machine Edukacja (śledzenie podwójne)
- Śledzenie wyłącznie na maszynie azure Edukacja
Domyślnie podwójne śledzenie jest konfigurowane podczas tworzenia połączenia obszaru roboczego usługi Azure Databricks.
Podwójne śledzenie w usługach Azure Databricks i Azure Machine Edukacja
Łączenie obszaru roboczego usługi ADB z obszarem roboczym usługi Azure Machine Edukacja umożliwia śledzenie danych eksperymentu w obszarze roboczym usługi Azure Machine Edukacja i obszarze roboczym usługi Azure Databricks w tym samym czasie. Jest to nazywane śledzeniem podwójnym.
Ostrzeżenie
Podwójne śledzenie w obszarze roboczym usługi Azure Edukacja Machine z włączoną obsługą łącza prywatnego nie jest obecnie obsługiwane. Zamiast tego skonfiguruj śledzenie na wyłączność przy użyciu obszaru roboczego usługi Azure Machine Edukacja.
Ostrzeżenie
Podwójne śledzenie nie jest obsługiwane na platformie Microsoft Azure obsługiwane przez firmę 21Vianet. Zamiast tego skonfiguruj śledzenie na wyłączność przy użyciu obszaru roboczego usługi Azure Machine Edukacja.
Aby połączyć obszar roboczy usługi ADB z nowym lub istniejącym obszarem roboczym usługi Azure Machine Edukacja,
- Zaloguj się do Portalu Azure.
- Przejdź do strony Przegląd obszaru roboczego usługi ADB.
- Wybierz przycisk Połącz usługę Azure Machine Edukacja obszaru roboczego w prawym dolnym rogu.
Po połączeniu obszaru roboczego usługi Azure Databricks z obszarem roboczym usługi Azure Machine Edukacja śledzenie platformy MLflow jest automatycznie śledzone we wszystkich następujących miejscach:
- Połączony obszar roboczy usługi Azure Machine Edukacja.
- Oryginalny obszar roboczy usługi ADB.
Następnie możesz użyć biblioteki MLflow w usłudze Azure Databricks w taki sam sposób, jak wcześniej. W poniższym przykładzie nazwa eksperymentu jest zwykle ustawiana w usłudze Azure Databricks i rozpoczyna rejestrowanie niektórych parametrów:
import mlflow
experimentName = "/Users/{user_name}/{experiment_folder}/{experiment_name}"
mlflow.set_experiment(experimentName)
with mlflow.start_run():
mlflow.log_param('epochs', 20)
pass
Uwaga
Podobnie jak w przypadku śledzenia, rejestry modeli nie obsługują rejestrowania modeli w tym samym czasie zarówno w usłudze Azure Machine Edukacja, jak i w usłudze Azure Databricks. Należy użyć jednego lub drugiego. Aby uzyskać więcej informacji, przeczytaj sekcję Rejestrowanie modeli w rejestrze za pomocą biblioteki MLflow .
Śledzenie wyłącznie w obszarze roboczym usługi Azure Machine Edukacja
Jeśli wolisz zarządzać śledzonych eksperymentów w scentralizowanej lokalizacji, możesz ustawić śledzenie MLflow tak, aby śledzić tylko w obszarze roboczym usługi Azure Machine Edukacja. Ta konfiguracja ma zaletę włączania łatwiejszej ścieżki wdrażania przy użyciu opcji wdrażania usługi Azure Machine Edukacja.
Ostrzeżenie
W przypadku obszaru roboczego usługi Azure Machine Edukacja z obsługą łącza prywatnego należy wdrożyć usługę Azure Databricks we własnej sieci (iniekcja sieci wirtualnej), aby zapewnić odpowiednią łączność.
Musisz skonfigurować identyfikator URI śledzenia MLflow tak, aby wskazywał wyłącznie usługę Azure Machine Edukacja, jak pokazano w poniższym przykładzie:
Konfigurowanie identyfikatora URI śledzenia
Pobierz identyfikator URI śledzenia dla obszaru roboczego:
DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 2 (bieżąca)
Zaloguj się i skonfiguruj obszar roboczy:
az account set --subscription <subscription> az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
Identyfikator URI śledzenia można uzyskać za pomocą
az ml workspace
polecenia :az ml workspace show --query mlflow_tracking_uri
Konfigurowanie identyfikatora URI śledzenia:
Następnie metoda
set_tracking_uri()
wskazuje identyfikator URI śledzenia MLflow na ten identyfikator URI.import mlflow mlflow.set_tracking_uri(mlflow_tracking_uri)
Napiwek
Podczas pracy w środowiskach udostępnionych, takich jak klaster usługi Azure Databricks, klaster usługi Azure Synapse Analytics lub podobny, warto ustawić zmienną środowiskową
MLFLOW_TRACKING_URI
na poziomie klastra, aby automatycznie skonfigurować identyfikator URI śledzenia MLflow w taki sposób, aby wskazywał usługę Azure Machine Edukacja dla wszystkich sesji uruchomionych w klastrze, a nie na potrzeby poszczególnych sesji.Po skonfigurowaniu zmiennej środowiskowej wszystkie eksperymenty uruchomione w tym klastrze będą śledzone w usłudze Azure Machine Edukacja.
Konfiguruj uwierzytelnianie
Po skonfigurowaniu śledzenia należy również skonfigurować sposób uwierzytelniania w skojarzonym obszarze roboczym. Domyślnie wtyczka azure Machine Edukacja dla platformy MLflow przeprowadzi uwierzytelnianie interakcyjne, otwierając domyślną przeglądarkę w celu wyświetlenia monitu o poświadczenia. Zapoznaj się z tematem Configure MLflow for Azure Machine Edukacja: Configure authentication to additional ways to configure authentication for MLflow in Azure Machine Edukacja workspaces (Konfigurowanie uwierzytelniania dla platformy MLflow dla obszarów roboczych usługi Azure Machine Edukacja).
W przypadku zadań interaktywnych, w których istnieje użytkownik połączony z sesją, można polegać na uwierzytelnianiu interakcyjnym i dlatego nie jest wymagana żadna dalsza akcja.
Ostrzeżenie
Uwierzytelnianie interakcyjne przeglądarki zablokuje wykonywanie kodu podczas monitowania o poświadczenia. Nie jest to odpowiednia opcja uwierzytelniania w środowiskach nienadzorowanych, takich jak zadania szkoleniowe. Zalecamy skonfigurowanie innego trybu uwierzytelniania.
W przypadku tych scenariuszy, w których wymagane jest nienadzorowane wykonanie, należy skonfigurować jednostkę usługi do komunikowania się z usługą Azure Machine Edukacja.
import os
os.environ["AZURE_TENANT_ID"] = "<AZURE_TENANT_ID>"
os.environ["AZURE_CLIENT_ID"] = "<AZURE_CLIENT_ID>"
os.environ["AZURE_CLIENT_SECRET"] = "<AZURE_CLIENT_SECRET>"
Napiwek
Podczas pracy w środowiskach udostępnionych zaleca się skonfigurowanie tych zmiennych środowiskowych w środowisku obliczeniowym. Najlepszym rozwiązaniem jest zarządzanie nimi jako wpisami tajnymi w wystąpieniu usługi Azure Key Vault zawsze, gdy jest to możliwe. Na przykład w usłudze Azure Databricks można używać wpisów tajnych w zmiennych środowiskowych w następujący sposób w konfiguracji klastra: AZURE_CLIENT_SECRET={{secrets/<scope-name>/<secret-name>}}
. Zobacz Odwołanie do wpisu tajnego w zmiennej środowiskowej , aby dowiedzieć się, jak to zrobić w usłudze Azure Databricks lub zapoznaj się z podobną dokumentacją na platformie.
Nazwy eksperymentu w usłudze Azure Machine Edukacja
Jeśli platforma MLflow jest skonfigurowana do śledzenia wyłącznie eksperymentów w obszarze roboczym usługi Azure Machine Edukacja, konwencja nazewnictwa eksperymentu musi być przestrzegana zgodnie z konwencją nazewnictwa używaną przez usługę Azure Machine Edukacja. W usłudze Azure Databricks eksperymenty mają nazwę ze ścieżką do miejsca zapisania eksperymentu, takiego jak /Users/alice@contoso.com/iris-classifier
. Jednak w usłudze Azure Machine Edukacja należy bezpośrednio podać nazwę eksperymentu. Podobnie jak w poprzednim przykładzie, ten sam eksperyment będzie miał bezpośrednią nazwę iris-classifier
:
mlflow.set_experiment(experiment_name="experiment-name")
Śledzenie parametrów, metryk i artefaktów
Następnie możesz użyć biblioteki MLflow w usłudze Azure Databricks w taki sam sposób, jak wcześniej. Aby uzyskać szczegółowe informacje, zobacz Dzienniki i wyświetlanie metryk i plików dziennika.
Rejestrowanie modeli za pomocą biblioteki MLflow
Po wytrenowaniu modelu możesz zarejestrować go na serwerze śledzenia przy użyciu mlflow.<model_flavor>.log_model()
metody . <model_flavor>
, odnosi się do struktury skojarzonej z modelem. Dowiedz się, jakie smaki modeli są obsługiwane. W poniższym przykładzie jest rejestrowany model utworzony za pomocą biblioteki Spark MLLib:
mlflow.spark.log_model(model, artifact_path = "model")
Warto wspomnieć, że smak spark
nie odpowiada faktowi, że trenujemy model w klastrze Spark, ale ze względu na użytą strukturę trenowania (możesz doskonale wytrenować model przy użyciu biblioteki TensorFlow z platformą Spark, a tym samym smak do użycia będzie ).tensorflow
Modele są rejestrowane wewnątrz śledzonego przebiegu. Oznacza to, że modele są dostępne zarówno w usłudze Azure Databricks, jak i w usłudze Azure Machine Edukacja (ustawienie domyślne) lub wyłącznie w usłudze Azure Machine Edukacja, jeśli skonfigurowano identyfikator URI śledzenia tak, aby wskazywał.
Ważne
Zwróć uwagę, że w tym miejscu nie określono parametru registered_model_name
. Przeczytaj sekcję Rejestrowanie modeli w rejestrze za pomocą biblioteki MLflow , aby uzyskać więcej informacji na temat wpływu takiego parametru i sposobu działania rejestru.
Rejestrowanie modeli w rejestrze za pomocą biblioteki MLflow
Podobnie jak w przypadku śledzenia, rejestry modeli nie mogą działać w tym samym czasie w usługach Azure Databricks i Azure Machine Edukacja. Należy użyć jednego lub drugiego. Domyślnie obszar roboczy usługi Azure Databricks jest używany do rejestrów modeli; chyba że wybrano ustawienie śledzenia MLflow w celu śledzenia tylko w obszarze roboczym usługi Azure Machine Edukacja, rejestr modeli jest obszarem roboczym usługi Azure Machine Edukacja.
Następnie, biorąc pod uwagę, że używasz konfiguracji domyślnej, następujący wiersz będzie rejestrować model wewnątrz odpowiednich przebiegów zarówno usługi Azure Databricks, jak i usługi Azure Machine Edukacja, ale zarejestruje go tylko w usłudze Azure Databricks:
mlflow.spark.log_model(model, artifact_path = "model",
registered_model_name = 'model_name')
Jeśli zarejestrowany model o nazwie nie istnieje, metoda rejestruje nowy model, tworzy wersję 1 i zwraca obiekt MLflow ModelVersion.
Jeśli zarejestrowany model o nazwie już istnieje, metoda tworzy nową wersję modelu i zwraca obiekt wersji.
Korzystanie z usługi Azure Machine Edukacja Registry z rozwiązaniem MLflow
Jeśli chcesz używać usługi Azure Machine Edukacja Model Registry zamiast usługi Azure Databricks, zalecamy ustawienie śledzenia platformy MLflow w celu śledzenia tylko w obszarze roboczym usługi Azure Machine Edukacja. Spowoduje to usunięcie niejednoznaczności miejsc, w których modele są rejestrowane i upraszczają złożoność.
Jeśli jednak chcesz nadal korzystać z funkcji podwójnego śledzenia, ale zarejestrować modele w usłudze Azure Machine Edukacja, możesz poinstruować platformę MLflow, aby korzystała z usługi Azure Machine Edukacja dla rejestrów modeli, konfigurując identyfikator URI rejestru modeli MLflow. Ten identyfikator URI ma dokładnie ten sam format i wartość identyfikatora URI śledzenia MLflow.
mlflow.set_registry_uri(azureml_mlflow_uri)
Uwaga
Wartość azureml_mlflow_uri
elementu została uzyskana w taki sam sposób, jak w sekcji Set MLflow Tracking (Ustawianie śledzenia MLflow) w celu śledzenia tylko w obszarze roboczym usługi Azure Machine Edukacja
Aby zapoznać się z kompletnym przykładem tego scenariusza, zapoznaj się z przykładowymi modelami trenowania w usłudze Azure Databricks i wdrażaniem ich na platformie Azure Machine Edukacja.
Wdrażanie i używanie modeli zarejestrowanych w usłudze Azure Machine Edukacja
Modele zarejestrowane w usłudze Azure Machine Edukacja Service przy użyciu platformy MLflow mogą być używane jako:
Punkt końcowy usługi Azure Machine Edukacja (w czasie rzeczywistym i partia): to wdrożenie umożliwia korzystanie z funkcji wdrażania usługi Azure Machine Edukacja na potrzeby wnioskowania w czasie rzeczywistym i wsadowego w usłudze Azure Container Instances (ACI), usługi Azure Kubernetes (AKS) lub naszych zarządzanych punktów końcowych wnioskowania.
Obiekty modelu MLFlow lub funkcje zdefiniowane przez użytkownika biblioteki Pandas, które mogą być używane w notesach usługi Azure Databricks w potokach przesyłania strumieniowego lub wsadowego.
Wdrażanie modeli w punktach końcowych usługi Azure Machine Edukacja
Wtyczkę azureml-mlflow
można wykorzystać do wdrożenia modelu w obszarze roboczym usługi Azure Machine Edukacja. Zobacz stronę Jak wdrożyć modele MLflow, aby uzyskać pełny opis sposobu wdrażania modeli w różnych miejscach docelowych.
Ważne
Aby można było je wdrożyć, należy zarejestrować modele w rejestrze usługi Azure Machine Edukacja. Jeśli modele zostaną zarejestrowane w wystąpieniu platformy MLflow w usłudze Azure Databricks, konieczne będzie ponowne zarejestrowanie ich w usłudze Azure Machine Edukacja. Jeśli tak jest, zapoznaj się z przykładowymi modelami trenowania w usłudze Azure Databricks i wdróż je na maszynie azure Edukacja
Wdrażanie modeli w usłudze ADB na potrzeby oceniania wsadowego przy użyciu funkcji zdefiniowanych przez użytkownika
Możesz wybrać klastry usługi Azure Databricks na potrzeby oceniania wsadowego. Korzystając z platformy Mlflow, można rozpoznać dowolny model z rejestru, z którym nawiązano połączenie. Zazwyczaj należy użyć jednej z następujących dwóch metod:
- Jeśli model został wytrenowany i skompilowany przy użyciu bibliotek platformy Spark (na przykład
MLLib
), użyjmlflow.pyfunc.spark_udf
polecenia , aby załadować model i użyć go jako funkcji zdefiniowanej przez użytkownika platformy Spark Pandas w celu oceny nowych danych. - Jeśli model nie został wytrenowany lub skompilowany przy użyciu bibliotek platformy Spark, użyj
mlflow.pyfunc.load_model
mlflow.<flavor>.load_model
lub załaduj model w sterowniku klastra. Zwróć uwagę, że w ten sposób każda dystrybucja równoległa lub służbowa, którą chcesz wykonać w klastrze, musi być orkiestrowana przez Ciebie. Należy również zauważyć, że biblioteka MLflow nie instaluje żadnej biblioteki wymaganej do uruchomienia modelu. Te biblioteki należy zainstalować w klastrze przed uruchomieniem.
W poniższym przykładzie pokazano, jak załadować model z rejestru o nazwie uci-heart-classifier
i użyć go jako funkcji zdefiniowanej przez użytkownika platformy Spark Pandas w celu oceny nowych danych.
from pyspark.sql.types import ArrayType, FloatType
model_name = "uci-heart-classifier"
model_uri = "models:/"+model_name+"/latest"
#Create a Spark UDF for the MLFlow model
pyfunc_udf = mlflow.pyfunc.spark_udf(spark, model_uri)
Napiwek
Aby uzyskać więcej sposobów odwoływania się do modeli z rejestru, zobacz Ładowanie modeli z rejestru .
Po załadowaniu modelu można użyć polecenia , aby ocenić nowe dane:
#Load Scoring Data into Spark Dataframe
scoreDf = spark.table({table_name}).where({required_conditions})
#Make Prediction
preds = (scoreDf
.withColumn('target_column_name', pyfunc_udf('Input_column1', 'Input_column2', ' Input_column3', …))
)
display(preds)
Czyszczenie zasobów
Jeśli chcesz zachować obszar roboczy usługi Azure Databricks, ale nie potrzebujesz już obszaru roboczego usługi Azure Machine Edukacja, możesz usunąć obszar roboczy usługi Azure Machine Edukacja. Ta akcja powoduje odłączenie obszaru roboczego usługi Azure Databricks i obszaru roboczego usługi Azure Machine Edukacja.
Jeśli nie planujesz używania zarejestrowanych metryk i artefaktów w obszarze roboczym, możliwość ich usunięcia indywidualnie jest niedostępna w tej chwili. Zamiast tego usuń grupę zasobów zawierającą konto magazynu i obszar roboczy, aby nie ponosić żadnych opłat:
W witrynie Azure Portal na końcu z lewej strony wybierz pozycję Grupy zasobów.
Wybierz utworzoną grupę zasobów z listy.
Wybierz pozycję Usuń grupę zasobów.
Wpisz nazwę grupy zasobów. Następnie wybierz Usuń.
Następne kroki
- Wdrażanie modeli MLflow jako usługi internetowej platformy Azure.
- Zarządzanie modelami.
- Śledzenie zadań eksperymentów za pomocą platformy MLflow i usługi Azure Machine Edukacja.
- Dowiedz się więcej o usługach Azure Databricks i MLflow.