Udostępnij za pośrednictwem


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 SparkTrialsfunkcji 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 TrialsHyperopt .

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łego max_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óre fmin() może potrwać wywołanie. Po przekroczeniu tej liczby wszystkie przebiegi zostaną zakończone i fmin() 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ą SparkTrialspolecenia 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 po fmin() powrocie. Jeśli nie ma aktywnego przebiegu, SparkTrials tworzy nowe uruchomienie, rejestruje je i kończy przebieg przed fmin() 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.