Ś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ę:

Wymagania wstępne

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

mlflow with azure databricks

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.

Azure DB install mlflow library

Ś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:

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,

  1. Zaloguj się do Portalu Azure.
  2. Przejdź do strony Przegląd obszaru roboczego usługi ADB.
  3. Wybierz przycisk Połącz usługę Azure Machine Edukacja obszaru roboczego w prawym dolnym rogu.

Link Azure DB and Azure Machine Learning workspaces

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

  1. Pobierz identyfikator URI śledzenia dla obszaru roboczego:

    DOTYCZY: Rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji 2 (bieżąca)

    1. Zaloguj się i skonfiguruj obszar roboczy:

      az account set --subscription <subscription>
      az configure --defaults workspace=<workspace> group=<resource-group> location=<location> 
      
    2. Identyfikator URI śledzenia można uzyskać za pomocą az ml workspace polecenia :

      az ml workspace show --query mlflow_tracking_uri
      
  2. 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.

    Configure the environment variables in an Azure Databricks cluster

    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żyj mlflow.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_modelmlflow.<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:

  1. W witrynie Azure Portal na końcu z lewej strony wybierz pozycję Grupy zasobów.

    Delete in the Azure portal

  2. Wybierz utworzoną grupę zasobów z listy.

  3. Wybierz pozycję Usuń grupę zasobów.

  4. Wpisz nazwę grupy zasobów. Następnie wybierz Usuń.

Następne kroki