Pojęcia dotyczące biblioteki Hyperopt
W tym artykule opisano niektóre pojęcia, które należy wiedzieć, aby korzystać z rozproszonej biblioteki Hyperopt.
W tej sekcji:
Przykłady ilustrujące sposób używania biblioteki Hyperopt w usłudze Azure Databricks można znaleźć w temacie Hiperparametr dostrajanie za pomocą biblioteki Hyperopt.
fmin()
fmin()
Służy do wykonywania przebiegu biblioteki Hyperopt. Argumenty dla fmin()
polecenia są wyświetlane w tabeli. Więcej informacji można znaleźć w dokumentacji biblioteki 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ę biblioteki Hyperopt , aby uzyskać szczegółowe informacje). Ta funkcja zwykle zawiera kod do trenowania modelu i obliczania strat. |
space |
Definiuje przestrzeń hiperparametrów do wyszukania. Biblioteka Hyperopt zapewnia dużą elastyczność w sposobie definiowania tego miejsca. Możesz wybrać opcję kategorii, taką jak algorytm, lub rozkład probabilistyczny dla wartości liczbowych, takich jak jednolite i dzienniki. |
algo |
Algorytm wyszukiwania hyperopt do użycia do wyszukiwania przestrzeni hiperparametrów. Najczęściej używane są hyperopt.rand.suggest w przypadku wyszukiwania losowego i hyperopt.tpe.suggest modułu TPE. |
max_evals |
Liczba ustawień hiperparametrów do wypróbowania (liczba modeli do dopasowania). |
max_queue_len |
Liczba ustawień hiperparametrów Hyperopt powinna zostać wygenerowana z wyprzedzeniem. Ponieważ algorytm generowania tpE funkcji Hyperopt może zająć trochę czasu, może być przydatne zwiększenie tego rozmiaru poza wartość domyślną 1, ale zazwyczaj nie większe niż SparkTrials ustawienie parallelism . |
trials |
Obiekt Trials lub SparkTrials . Użyj SparkTrials polecenia 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 danych wyjściowych 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 korzystania z programu SparkTrials funkcja wczesnego zatrzymywania nie ma gwarancji, że zostanie uruchomiona po każdej wersji próbnej, a zamiast tego zostanie sondowana. Przykład funkcji wczesnego zatrzymywania |
Klasa SparkTrials
SparkTrials
to interfejs API opracowany przez usługę Databricks, który umożliwia dystrybucję przebiegu biblioteki Hyperopt bez wprowadzania innych zmian w kodzie funkcji Hyperopt. SparkTrials
przyspiesza dostrajanie pojedynczej maszyny, dystrybuując wersje próbne 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 SparkTrials
i .
Argumenty
SparkTrials
Przyjmuje dwa opcjonalne argumenty:
parallelism
: Maksymalna liczba prób do oceny współbieżnej. Większa liczba umożliwia skalowanie w poziomie testów 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 bardziej przeszłych 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.
Implementacji
Podczas definiowania funkcji fn
objective 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.
W programie SparkTrials
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, można ocenić wiele prób jednocześnie dla tego procesu roboczego.
SparkTrials
i MLflow
Środowisko Databricks Runtime ML obsługuje rejestrowanie w usłudze MLflow z procesów roboczych. Możesz dodać niestandardowy kod rejestrowania w funkcji objective, którą przekazujesz do biblioteki Hyperopt.
SparkTrials
rejestruje wyniki dostrajania w postaci zagnieżdżonych przebiegów platformy 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 przebiegu. Rekordy dziennika MLflow z procesów roboczych są również przechowywane w odpowiednich przebiegach podrzędnych.
Podczas wywoływania metody fmin()
usługa Databricks zaleca aktywne zarządzanie uruchamianiem platformy MLflow. Oznacza to, że zawijanie wywołania do fmin()
wewnątrz with mlflow.start_run():
instrukcji. Dzięki temu każde fmin()
wywołanie jest rejestrowane w osobnym przebiegu głównym platformy MLflow i ułatwia rejestrowanie dodatkowych tagów, parametrów lub metryk dla tego przebiegu.
Uwaga
W przypadku wielokrotnego wywołania fmin()
w ramach tego samego aktywnego przebiegu platformy MLflow narzędzie MLflow rejestruje te wywołania do tego samego przebiegu głównego. 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 jawnie zarządzać przebiegami w funkcji celu. Wywołaj metodę mlflow.log_param("param_from_worker", x)
w funkcji objective, aby zarejestrować parametr w przebiegu podrzędnym. Parametry, metryki, tagi i artefakty można rejestrować w funkcji objective.