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_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 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.duration
nie 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ącychmetrics.*
,params.*
lubtags.*
w parametrzeorder_by
nie jest obecnie obsługiwane. Zamiast tego użyjorder_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 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.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 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.
Biblioteka MLflow z notesami usługi Azure Machine Edukacja demonstruje i rozwija 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 Edukacja 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 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.