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 Learning można wykonywać przy użyciu biblioteki 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 usługi Azure Machine Learning 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 zapoznać się ze szczegółowym porównaniem między rozwiązaniem MLflow typu open source i rozwiązaniem MLflow po nawiązaniu połączenia z usługą Azure Machine Learning, zobacz Macierz obsługi zapytań dotyczących przebiegów zapytań i eksperymentów w usłudze Azure Machine Learning.
Uwaga
Zestaw SDK języka Python usługi Azure Machine Learning 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ć platformy MLflow do zarządzania eksperymentami i przebiegami w usłudze Azure Machine Learning.
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 Learning , aby zapoznać się z przykładem korzystania z niego.
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.
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_ids
parametr , experiment_names
lub 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 Learning. 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.duration
nie jest obecny w systemie operacyjnym MLflow, ale jest dostępny w usłudze Azure Machine Learning 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ącychmetrics.*
,params.*
lubtags.*
w parametrzeorder_by
nie jest obecnie obsługiwane. Zamiast tego użyjsort_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
=
,like
i!=
są obsługiwane do filtrowaniaparameters
.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
attributes
wartoś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.duration
nie jest obecny w systemie operacyjnym MLflow, ale jest dostępny w usłudze Azure Machine Learning 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 Learning. W poniższej tabeli przedstawiono możliwe wartości:
Stan zadania usługi Azure Machine Learning | MlFlow's attributes.status |
Znaczenie |
---|---|---|
Nie rozpoczęto | Scheduled |
Zadanie/uruchomienie zostało odebrane przez usługę Azure Machine Learning. |
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 Learning 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 Learning przy użyciu 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 hiperparametrów lub potoki usługi Azure Machine Learning 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.parentRunId
wł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 Learning Studio (wersja zapoznawcza)
Aby porównać i ocenić jakość zadań i modeli w usłudze Azure Machine Learning 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.
Notesy MLflow z usługą Azure Machine Learning pokazują i rozszerzają koncepcje przedstawione w tym artykule.
- Trenowanie i śledzenie klasyfikatora za pomocą biblioteki MLflow: przedstawia sposób śledzenia eksperymentów przy użyciu biblioteki MLflow, modeli dzienników i łączenia wielu smaków w potoki.
- Zarządzanie eksperymentami i przebiegami za pomocą platformy MLflow: przedstawia sposób wykonywania zapytań dotyczących eksperymentów, przebiegów, metryk, parametrów i artefaktów z usługi Azure Machine Learning przy użyciu biblioteki MLflow.
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 usłudze MLflow po nawiązaniu połączenia z usługą Azure Machine Learning:
Funkcja | Obsługiwane przez MLflow | Obsługiwane przez usługę Azure Machine Learning |
---|---|---|
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 Learning.
-
2
!=
w przypadku tagów nieobsługiwanych.