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

W tej sekcji opisano sposób konfigurowania argumentów przekazywanych do SparkTrials aspektów implementacji SparkTrialsi .

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ł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 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ó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.

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 SparkTrialswę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 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 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.