Wykonywanie zapytań i porównywanie eksperymentów i przebiegów za pomocą biblioteki MLflow

Zapytania dotyczące eksperymentów i zadań (lub przebiegów) w usłudze Azure Machine Edukacja można wykonywać przy użyciu platformy MLflow. Nie musisz instalować żadnego określonego zestawu SDK, aby zarządzać tym, co dzieje się wewnątrz zadania szkoleniowego, tworząc bardziej bezproblemowe przejście między lokalnymi przebiegami a chmurą przez usunięcie zależności specyficznych dla chmury. W tym artykule dowiesz się, jak wykonywać zapytania i porównywać eksperymenty i przebiegi w obszarze roboczym przy użyciu zestawu Azure Machine Edukacja i zestawu MLflow SDK w języku Python.

Rozwiązanie MLflow umożliwia:

  • Tworzenie, wykonywanie zapytań, usuwanie i wyszukiwanie eksperymentów w obszarze roboczym.
  • Wykonywanie zapytań, usuwanie i wyszukiwanie przebiegów w obszarze roboczym.
  • Śledzenie i pobieranie metryk, parametrów, artefaktów i modeli z przebiegów.

Aby uzyskać szczegółowe porównanie między bibliotekami MLflow typu open source i MLflow po nawiązaniu połączenia z usługą Azure Machine Edukacja, zobacz Macierz obsługi przebiegów zapytań i eksperymentów w usłudze Azure Machine Edukacja.

Uwaga

Zestaw Azure Machine Edukacja Python SDK w wersji 2 nie zapewnia natywnych możliwości rejestrowania ani śledzenia. Dotyczy to nie tylko rejestrowania, ale także wykonywania zapytań dotyczących zarejestrowanych metryk. Zamiast tego użyj biblioteki MLflow do zarządzania eksperymentami i przebiegami. W tym artykule wyjaśniono, jak używać biblioteki MLflow do zarządzania eksperymentami i przebiegami w usłudze Azure Machine Edukacja.

Możesz również wykonywać zapytania i przeszukiwać eksperymenty oraz uruchamiać je przy użyciu interfejsu API REST platformy MLflow. Zobacz Używanie interfejsu REST platformy MLflow z usługą Azure Machine Edukacja, aby zapoznać się z przykładem korzystania z niego.

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).

Wykonywanie zapytań i wyszukiwanie eksperymentów

Użyj biblioteki MLflow, aby wyszukać eksperymenty w obszarze roboczym. Zobacz poniższe przykłady:

  • Pobierz wszystkie aktywne eksperymenty:

    mlflow.search_experiments()
    

    Uwaga

    W starszych wersjach biblioteki MLflow (<2.0) użyj metody mlflow.list_experiments() .

  • Pobierz wszystkie eksperymenty, w tym zarchiwizowane:

    from mlflow.entities import ViewType
    
    mlflow.search_experiments(view_type=ViewType.ALL)
    
  • Uzyskaj konkretny eksperyment według nazwy:

    mlflow.get_experiment_by_name(experiment_name)
    
  • Uzyskaj konkretny eksperyment według identyfikatora:

    mlflow.get_experiment('1234-5678-90AB-CDEFG')
    

Wyszukiwanie eksperymentów

Metoda search_experiments() , dostępna od wersji Mlflow 2.0, umożliwia wyszukiwanie eksperymentów spełniających kryteria przy użyciu metody filter_string.

  • Pobieranie wielu eksperymentów na podstawie ich identyfikatorów:

    mlflow.search_experiments(filter_string="experiment_id IN ("
        "'CDEFG-1234-5678-90AB', '1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')"
    )
    
  • Pobierz wszystkie eksperymenty utworzone po danym czasie:

    import datetime
    
    dt = datetime.datetime(2022, 6, 20, 5, 32, 48)
    mlflow.search_experiments(filter_string=f"creation_time > {int(dt.timestamp())}")
    
  • Pobierz wszystkie eksperymenty z danym tagiem:

    mlflow.search_experiments(filter_string=f"tags.framework = 'torch'")
    

Uruchomienia zapytań i wyszukiwania

Platforma MLflow umożliwia wyszukiwanie przebiegów wewnątrz dowolnego eksperymentu, w tym wielu eksperymentów jednocześnie. Metoda mlflow.search_runs() akceptuje argument experiment_ids i experiment_name wskazuje, które eksperymenty chcesz wyszukać. Możesz również wskazać search_all_experiments=True , czy chcesz przeszukiwać wszystkie eksperymenty w obszarze roboczym:

  • Według nazwy eksperymentu:

    mlflow.search_runs(experiment_names=[ "my_experiment" ])
    
  • Według identyfikatora eksperymentu:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ])
    
  • Przeszukaj wszystkie eksperymenty w obszarze roboczym:

    mlflow.search_runs(filter_string="params.num_boost_round='100'", search_all_experiments=True)
    

Zwróć uwagę, że experiment_ids obsługuje dostarczanie tablicy eksperymentów, dzięki czemu można wyszukiwać przebiegi w wielu eksperymentach, jeśli to konieczne. Może to być przydatne w przypadku, gdy chcesz porównać przebiegi tego samego modelu, gdy jest on rejestrowany w różnych eksperymentach (na przykład przez różne osoby lub różne iteracji projektu).

Ważne

Jeśli experiment_idsparametr , experiment_nameslub search_all_experiments nie jest określony, narzędzie MLflow wyszukuje domyślnie w bieżącym aktywnym eksperymencie. Aktywny eksperyment można ustawić przy użyciu polecenia mlflow.set_experiment().

Domyślnie funkcja MLflow zwraca dane w formacie Biblioteki Pandas Dataframe , co sprawia, że przydaje się podczas dalszego przetwarzania analizy przebiegów. Zwrócone dane zawierają kolumny z:

  • Podstawowe informacje o przebiegu.
  • Parametry o nazwie params.<parameter-name>kolumny .
  • Metryki (ostatnia zarejestrowana wartość każdego z nich) z nazwą metrics.<metric-name>kolumny .

Wszystkie metryki i parametry są również zwracane podczas wykonywania zapytań. Jednak w przypadku metryk zawierających wiele wartości (na przykład krzywej utraty lub krzywej żądania ściągnięcia) zwracana jest tylko ostatnia wartość metryki. Jeśli chcesz pobrać wszystkie wartości danej metryki, użyj mlflow.get_metric_history metody . Zobacz Pobieranie parametrów i metryk z przebiegu , aby zapoznać się z przykładem.

Kolejność przebiegów

Domyślnie eksperymenty są w kolejności malejącej według start_time, czyli czasu, w którym eksperyment został w kolejce w usłudze Azure Machine Edukacja. Można jednak zmienić tę wartość domyślną przy użyciu parametru order_by.

  • Kolejność przebiegów według atrybutów, takich jak start_time:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ],
                       order_by=["attributes.start_time DESC"])
    
  • Kolejność przebiegów i ogranicz wyniki. Poniższy przykład zwraca ostatni pojedynczy przebieg w eksperymencie:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       max_results=1, order_by=["attributes.start_time DESC"])
    
  • Kolejność jest uruchamiana przez atrybut duration:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       order_by=["attributes.duration DESC"])
    

    Napiwek

    attributes.durationnie jest obecny w systemie operacyjnym MLflow, ale jest dostępny w usłudze Azure Machine Edukacja dla wygody.

  • Kolejność jest uruchamiana według wartości metryki:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ]).sort_values("metrics.accuracy", ascending=False)
    

    Ostrzeżenie

    Używanie wyrażeń order_by zawierających metrics.*, params.*lub tags.* w parametrze order_by nie jest obecnie obsługiwane. Zamiast tego użyj order_values metody z biblioteki Pandas, jak pokazano w przykładzie.

Uruchomienia filtrów

Możesz również wyszukać przebieg z określoną kombinacją w hiperparametrach przy użyciu parametru filter_string. Użyj params polecenia , aby uzyskać dostęp do parametrów przebiegu, metrics uzyskać dostęp do metryk zarejestrowanych w przebiegu oraz attributes uzyskać dostęp do szczegółów informacji o przebiegu. Platforma MLflow obsługuje wyrażenia przyłączone przez słowo kluczowe AND (składnia nie obsługuje or):

  • Wyszukiwanie jest uruchamiane na podstawie wartości parametru:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="params.num_boost_round='100'")
    

    Ostrzeżenie

    Tylko operatory =, likei != są obsługiwane do filtrowania parameters.

  • Wyszukiwanie jest uruchamiane na podstawie wartości metryki:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="metrics.auc>0.8")
    
  • Wyszukiwanie jest uruchamiane przy użyciu danego tagu:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="tags.framework='torch'")
    
  • Przebiegi wyszukiwania utworzone przez danego użytkownika:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="attributes.user_id = 'John Smith'")
    
  • Przebiegi wyszukiwania, które zakończyły się niepowodzeniem. Zobacz Filtrowanie przebiegów według stanu , aby uzyskać możliwe wartości:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="attributes.status = 'Failed'")
    
  • Wyszukiwanie jest uruchamiane po danym czasie:

    import datetime
    
    dt = datetime.datetime(2022, 6, 20, 5, 32, 48)
    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string=f"attributes.creation_time > '{int(dt.timestamp())}'")
    

    Napiwek

    W przypadku klucza attributeswartości zawsze powinny być ciągami, a tym samym zakodowane między cudzysłowami.

  • Przebiegi wyszukiwania, które trwa dłużej niż jedną godzinę:

    duration = 360 * 1000 # duration is in milliseconds
    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string=f"attributes.duration > '{duration}'")
    

    Napiwek

    attributes.durationnie jest obecny w systemie operacyjnym MLflow, ale jest dostępny w usłudze Azure Machine Edukacja dla wygody.

  • Przebiegi wyszukiwania, które mają identyfikator w danym zestawie:

    mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                       filter_string="attributes.run_id IN ('1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')")
    

Filtrowanie przebiegów według stanu

Podczas filtrowania przebiegów według stanu platforma MLflow używa innej konwencji, aby nazwać inny możliwy stan przebiegu w porównaniu z usługą Azure Machine Edukacja. W poniższej tabeli przedstawiono możliwe wartości:

Stan zadania usługi Azure Machine Edukacja MlFlow's attributes.status Znaczenie
Nie rozpoczęto Scheduled Zadanie/uruchomienie zostało odebrane przez usługę Azure Machine Edukacja.
Queue Scheduled Zadanie/uruchomienie jest zaplanowane do uruchomienia, ale jeszcze nie zostało uruchomione.
Przygotowanie Scheduled Zadanie/uruchomienie nie zostało jeszcze uruchomione, ale środowisko obliczeniowe zostało przydzielone do jego wykonania i przygotowuje środowisko i jego dane wejściowe.
Uruchomiono Running Zadanie/uruchomienie jest obecnie w trakcie aktywnego wykonywania.
Ukończone Finished Zadanie/uruchomienie zostało ukończone bez błędów.
Niepowodzenie Failed Zadanie/uruchomienie zostało ukończone z błędami.
Anulowany Killed Zadanie/uruchomienie zostało anulowane przez użytkownika lub zakończone przez system.

Przykład:

mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], 
                   filter_string="attributes.status = 'Failed'")

Pobieranie metryk, parametrów, artefaktów i modeli

Metoda search_runs zwraca bibliotekę Pandas Dataframe , która domyślnie zawiera ograniczoną ilość informacji. W razie potrzeby możesz pobrać obiekty języka Python, co może być przydatne, aby uzyskać szczegółowe informacje o nich. Użyj parametru , output_format aby kontrolować sposób zwracania danych wyjściowych:

runs = mlflow.search_runs(
    experiment_ids=[ "1234-5678-90AB-CDEFG" ],
    filter_string="params.num_boost_round='100'",
    output_format="list",
)

Następnie można uzyskać dostęp do szczegółów z poziomu elementu info członkowskiego. W poniższym przykładzie pokazano, jak pobrać element run_id:

last_run = runs[-1]
print("Last run ID:", last_run.info.run_id)

Pobieranie parametrów i metryk z przebiegu

Gdy przebiegi są zwracane przy użyciu metody output_format="list", można łatwo uzyskać dostęp do parametrów przy użyciu klucza data:

last_run.data.params

W ten sam sposób można wykonywać zapytania dotyczące metryk:

last_run.data.metrics

W przypadku metryk zawierających wiele wartości (na przykład krzywej utraty lub krzywej żądania ściągnięcia) zwracana jest tylko ostatnia zarejestrowana wartość metryki. Jeśli chcesz pobrać wszystkie wartości danej metryki, użyj mlflow.get_metric_history metody . Ta metoda wymaga użycia elementu MlflowClient:

client = mlflow.tracking.MlflowClient()
client.get_metric_history("1234-5678-90AB-CDEFG", "log_loss")

Pobieranie artefaktów z przebiegu

Platforma MLflow może wykonywać zapytania dotyczące dowolnego artefaktu zarejestrowanego przez przebieg. Nie można uzyskać dostępu do artefaktów przy użyciu samego obiektu run, a klient MLflow powinien być używany zamiast tego:

client = mlflow.tracking.MlflowClient()
client.list_artifacts("1234-5678-90AB-CDEFG")

Poprzednia metoda zawiera listę wszystkich artefaktów zarejestrowanych w przebiegu, ale pozostają one przechowywane w magazynie artefaktów (Azure Machine Edukacja Storage). Aby pobrać dowolny z nich, użyj metody download_artifact:

file_path = mlflow.artifacts.download_artifacts(
    run_id="1234-5678-90AB-CDEFG", artifact_path="feature_importance_weight.png"
)

Uwaga

W starszych wersjach biblioteki MLflow (<2.0) użyj metody MlflowClient.download_artifacts() .

Pobieranie modeli z przebiegu

Modele mogą być również rejestrowane w przebiegu, a następnie pobierane bezpośrednio z niego. Aby pobrać model, musisz znać ścieżkę do artefaktu, w którym jest przechowywany. Metoda list_artifacts może służyć do znajdowania artefaktów reprezentujących model, ponieważ modele MLflow są zawsze folderami. Model można pobrać, określając ścieżkę, w której jest przechowywany model, przy użyciu download_artifact metody :

artifact_path="classifier"
model_local_path = mlflow.artifacts.download_artifacts(
  run_id="1234-5678-90AB-CDEFG", artifact_path=artifact_path
)

Następnie możesz załadować model z powrotem z pobranych artefaktów przy użyciu typowej funkcji load_model w przestrzeni nazw specyficznej dla odmiany. W poniższym przykładzie użyto metody xgboost:

model = mlflow.xgboost.load_model(model_local_path)

Rozwiązanie MLflow umożliwia również wykonywanie obu operacji jednocześnie oraz pobieranie i ładowanie modelu w jednej instrukcji. MLflow pobiera model do folderu tymczasowego i ładuje go stamtąd. Metoda load_model używa formatu identyfikatora URI, aby wskazać, gdzie należy pobrać model. W przypadku ładowania modelu z przebiegu struktura identyfikatora URI jest następująca:

model = mlflow.xgboost.load_model(f"runs:/{last_run.info.run_id}/{artifact_path}")

Napiwek

Aby wykonywać zapytania dotyczące modeli zarejestrowanych w rejestrze modeli i ładować je, zobacz Zarządzanie rejestrami modeli w usłudze Azure Machine Edukacja za pomocą biblioteki MLflow.

Pobieranie przebiegów podrzędnych (zagnieżdżonych)

Platforma MLflow obsługuje koncepcję przebiegów podrzędnych (zagnieżdżonych). Te przebiegi są przydatne, gdy trzeba odkręcić procedury treningowe, które muszą być śledzone niezależnie od głównego procesu trenowania. Procesy optymalizacji dostrajania hiperparametrów lub potoki usługi Azure Machine Edukacja to typowe przykłady zadań generujących wiele przebiegów podrzędnych. Zapytania dotyczące wszystkich przebiegów podrzędnych określonego przebiegu można wykonać przy użyciu tagu mlflow.parentRunIdwłaściwości , który zawiera identyfikator przebiegu przebiegu nadrzędnego.

hyperopt_run = mlflow.last_active_run()
child_runs = mlflow.search_runs(
    filter_string=f"tags.mlflow.parentRunId='{hyperopt_run.info.run_id}'"
)

Porównanie zadań i modeli w usłudze Azure Machine Edukacja Studio (wersja zapoznawcza)

Aby porównać i ocenić jakość zadań i modeli w usłudze Azure Machine Edukacja Studio, użyj panelu wersji zapoznawczej, aby włączyć tę funkcję. Po włączeniu można porównać parametry, metryki i tagi między wybranymi zadaniami i/lub modelami.

Ważne

Elementy oznaczone (wersja zapoznawcza) w tym artykule są obecnie dostępne w publicznej wersji zapoznawczej. Wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług i nie jest zalecana w przypadku obciążeń produkcyjnych. Niektóre funkcje mogą być nieobsługiwane lub ograniczone. Aby uzyskać więcej informacji, zobacz Uzupełniające warunki korzystania z wersji zapoznawczych platformy Microsoft Azure.

Zrzut ekranu przedstawiający panel podglądu przedstawiający sposób porównywania zadań i modeli w usłudze Azure Machine Edukacja Studio.

Biblioteka MLflow z notesami usługi Azure Machine Edukacja demonstruje i rozwija koncepcje przedstawione w tym artykule.

Macierz obsługi dla przebiegów zapytań i eksperymentów

Zestaw MLflow SDK uwidacznia kilka metod pobierania przebiegów, w tym opcje kontrolowania zwracanych elementów i sposobu ich pobierania. Skorzystaj z poniższej tabeli, aby dowiedzieć się, które z tych metod są obecnie obsługiwane w rozwiązaniu MLflow podczas nawiązywania połączenia z usługą Azure Machine Edukacja:

Funkcja Obsługiwane przez MLflow Obsługiwane przez usługę Azure Machine Edukacja
Porządkowanie przebiegów według atrybutów
Porządkowanie przebiegów według metryk 1
Porządkowanie przebiegów według parametrów 1
Porządkowanie przebiegów według tagów 1
Filtrowanie przebiegów według atrybutów
Filtrowanie przebiegów według metryk
Filtrowanie jest uruchamiane według metryk z znakami specjalnymi (ucieczka)
Filtrowanie przebiegów według parametrów
Filtrowanie przebiegów według tagów
Filtrowanie jest uruchamiane za pomocą liczbowych komparatorów (metryk), w tym =, , !=, >>=, , <i<=
Filtrowanie jest uruchamiane za pomocą komparatorów ciągów (parametry, tagi i atrybuty): = i != 2
Filtrowanie jest uruchamiane za pomocą komparatorów ciągów (parametry, tagi i atrybuty): LIKE/ILIKE
Przebiegi filtrowania z komparatorami AND
Przebiegi filtrowania z komparatorami OR
Zmienianie nazw eksperymentów

Uwaga

  • 1 Zapoznaj się z sekcją Porządkowanie przebiegów, aby uzyskać instrukcje i przykłady dotyczące sposobu osiągnięcia tej samej funkcjonalności w usłudze Azure Machine Edukacja.
  • 2!= w przypadku tagów nieobsługiwanych.