Pojęcia dotyczące biblioteki Hyperopt
Uwaga
Wersja biblioteki Hyperopt typu open source nie jest już utrzymywana.
Funkcja Hyperopt zostanie usunięta w następnej głównej wersji DBR ML. Usługa Azure Databricks zaleca użycie Optuna do optymalizacji pojedynczego węzła lub RayTune w celu uzyskania podobnego do przestarzałej usługi rozproszonego dostrajania hiperparametrów Hyperopt. Dowiedz się więcej o korzystaniu z RayTune w usłudze Azure Databricks.
W tym artykule opisano niektóre pojęcia, które należy wiedzieć, aby korzystać z rozproszonej funkcji Hyperopt.
W tej sekcji:
Przykłady ilustrujące sposób używania funkcji Hyperopt w usłudze Azure Databricks można znaleźć w temacie Hyperopt.
fmin()
fmin()
Służy do wykonywania przebiegu funkcji Hyperopt. Argumenty dla fmin()
elementu są wyświetlane w tabeli. Aby uzyskać więcej informacji, zobacz dokumentację funkcji Hyperopt. Przykłady użycia poszczególnych argumentów można znaleźć w przykładowych notesach.
Nazwa argumentu | opis |
---|---|
fn |
Funkcja Objective. Funkcja Hyperopt wywołuje tę funkcję z wartościami wygenerowanymi z przestrzeni hiperparametrów podanej w argumencie spacji. Ta funkcja może zwrócić utratę jako wartość skalarną lub w słowniku (zobacz dokumentację funkcji Hyperopt , aby uzyskać szczegółowe informacje). Ta funkcja zwykle zawiera kod do trenowania modelu i obliczania utraty. |
space |
Definiuje przestrzeń hiperparametrów do wyszukania. Funkcja Hyperopt zapewnia dużą elastyczność w sposobie definiowania tego miejsca. Można wybrać opcję kategorii, taką jak algorytm lub rozkład probabilistyczny dla wartości liczbowych, takich jak jednolite i dzienniki. |
algo |
Algorytm wyszukiwania funkcji Hyperopt do użycia do wyszukiwania przestrzeni hiperparametrów. Najczęściej używane są hyperopt.rand.suggest wyszukiwanie losowe i hyperopt.tpe.suggest tpe. |
max_evals |
Liczba ustawień hiperparametrów do wypróbowania (liczba modeli do dopasowania). |
max_queue_len |
Liczba ustawień hiperparametrów Hyperopt powinna być generowana z wyprzedzeniem. Ponieważ algorytm generowania modułu TPE funkcji Hyperopt może zająć trochę czasu, może być pomocne zwiększenie tego parametru poza domyślną wartością 1, ale zazwyczaj nie większe niż SparkTrials ustawienie parallelism . |
trials |
Obiekt Trials lub SparkTrials . Użyj SparkTrials metody podczas wywoływania algorytmów pojedynczej maszyny, takich jak metody scikit-learn w funkcji objective. Użyj Trials metody podczas wywoływania algorytmów trenowania rozproszonego, takich jak metody MLlib lub Horovod w funkcji objective. |
early_stop_fn |
Opcjonalna funkcja wczesnego zatrzymywania w celu określenia, czy fmin powinna zostać zatrzymana przed max_evals osiągnięciem. Wartość domyślna to None . Podpis wejściowy funkcji to Trials, *args , a podpis wyjściowy to bool, *args . Wartość logiczna wyjściowa wskazuje, czy zatrzymać.
*args to dowolny stan, w którym dane wyjściowe wywołania early_stop_fn służą jako dane wejściowe do następnego wywołania.
Trials może być obiektem SparkTrials . W przypadku używania SparkTrials funkcji wczesne zatrzymywanie nie ma gwarancji, że zostanie uruchomiona po każdej wersji próbnej i zostanie sondowana.
Przykład funkcji wczesnego zatrzymywania |
Klasa SparkTrials
SparkTrials
to interfejs API opracowany przez usługę Databricks, który umożliwia dystrybucję przebiegu funkcji Hyperopt bez wprowadzania innych zmian w kodzie funkcji Hyperopt.
SparkTrials
przyspiesza dostrajanie pojedynczej maszyny przez dystrybucję prób do procesów roboczych platformy Spark.
Uwaga
SparkTrials
jest przeznaczony do równoległego przetwarzania obliczeń dla modeli uczenia maszynowego z jedną maszyną, takich jak scikit-learn. W przypadku modeli utworzonych za pomocą rozproszonych algorytmów uczenia maszynowego, takich jak MLlib lub Horovod, nie należy używać metody SparkTrials
. W takim przypadku proces tworzenia modelu jest automatycznie równoległy w klastrze i należy użyć domyślnej klasy Trials
Hyperopt .
W tej sekcji opisano sposób konfigurowania argumentów przekazywanych do SparkTrials
aspektów implementacji i SparkTrials
.
Argumenty
SparkTrials
przyjmuje dwa opcjonalne argumenty:
parallelism
: Maksymalna liczba prób do oceny współbieżnej. Większa liczba umożliwia skalowanie w poziomie większej liczby ustawień hiperparametrów. Ponieważ Funkcja Hyperopt proponuje nowe badania oparte na poprzednich wynikach, istnieje kompromis między równoległością a adaptacją. W przypadku stałegomax_evals
, większe równoległość przyspiesza obliczenia, ale niższa równoległość może prowadzić do lepszych wyników, ponieważ każda iteracja ma dostęp do większej liczby wcześniejszych wyników.Ustawienie domyślne: liczba dostępnych funkcji wykonawczych platformy Spark. Maksimum: 128. Jeśli wartość jest większa niż liczba współbieżnych zadań dozwolonych przez konfigurację klastra,
SparkTrials
zmniejsza równoległość do tej wartości.timeout
: maksymalna liczba sekund, którefmin()
może potrwać wywołanie. Po przekroczeniu tej liczby wszystkie przebiegi zostaną zakończone ifmin()
zakończą się. Informacje o ukończonych przebiegach są zapisywane.
Implementacja
Podczas definiowania funkcji fn
celu przekazanej do fmin()
elementu i podczas wybierania konfiguracji klastra warto zrozumieć, w jaki sposób SparkTrials
dystrybuuje zadania dostrajania.
W funkcji Hyperopt wersja próbna zazwyczaj odpowiada dopasowaniu jednego modelu w jednym ustawieniu hiperparametrów. Funkcja Hyperopt iteracyjnie generuje próby, ocenia je i powtarza.
Za pomocą SparkTrials
polecenia węzeł sterownika klastra generuje nowe wersje próbne, a węzły procesu roboczego oceniają te wersje próbne. Każda wersja próbna jest generowana przy użyciu zadania platformy Spark, które ma jedno zadanie i jest oceniane w zadaniu na maszynie procesu roboczego. Jeśli klaster jest skonfigurowany do uruchamiania wielu zadań na proces roboczy, wówczas wiele prób może być ocenianych jednocześnie w tym procesie roboczym.
SparkTrials
i MLflow
Środowisko Databricks Runtime ML obsługuje rejestrowanie w usłudze MLflow z procesów roboczych. Niestandardowy kod rejestrowania można dodać w funkcji objective przekazywanej do funkcji Hyperopt.
SparkTrials
dzienniki dostrajania wyników jako zagnieżdżonych przebiegów MLflow w następujący sposób:
- Uruchomienie główne lub nadrzędne: wywołanie metody
fmin()
jest rejestrowane jako główne uruchomienie. Jeśli istnieje aktywny przebieg,SparkTrials
dzienniki do tego aktywnego przebiegu i nie kończą przebiegu pofmin()
powrocie. Jeśli nie ma aktywnego przebiegu,SparkTrials
tworzy nowe uruchomienie, rejestruje je i kończy przebieg przedfmin()
zwróceniem. - Przebiegi podrzędne: każde przetestowane ustawienie hiperparametru (wersja próbna) jest rejestrowane jako podrzędne uruchomienie w ramach głównego uruchomienia. Rekordy dziennika MLflow z procesów roboczych są również przechowywane w odpowiednich przebiegach podrzędnych.
Podczas wywoływania polecenia fmin()
usługa Databricks zaleca aktywne zarządzanie uruchamianiem MLflow, czyli zawijanie wywołania do fmin()
wewnątrz with mlflow.start_run():
instrukcji. Dzięki temu każde fmin()
wywołanie jest rejestrowane w osobnym głównym przebiegu platformy MLflow i ułatwia rejestrowanie dodatkowych tagów, parametrów lub metryk do tego uruchomienia.
Uwaga
W przypadku wielokrotnego wywoływania fmin()
w ramach tego samego aktywnego przebiegu MLflow narzędzie MLflow rejestruje te wywołania do tego samego głównego przebiegu. Aby rozwiązać konflikty nazw dla zarejestrowanych parametrów i tagów, MLflow dołącza identyfikator UUID do nazw z konfliktami.
Podczas rejestrowania z procesów roboczych nie trzeba zarządzać przebiegami jawnie w funkcji celu. Wywołaj metodę mlflow.log_param("param_from_worker", x)
w funkcji objective, aby zarejestrować parametr w uruchomieniu podrzędnym. Parametry, metryki, tagi i artefakty można rejestrować w funkcji objective.