Biblioteka Hyperopt — najlepsze rozwiązania i rozwiązywanie problemów
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
Najlepsze rozwiązania
- Podejścia bayesowskie mogą być znacznie bardziej wydajne niż wyszukiwanie siatki i wyszukiwanie losowe. W związku z tym za pomocą algorytmu Hyperopt Tree of Parzen Estimators (TPE) można eksplorować więcej hiperparametrów i większych zakresów. Używanie wiedzy o domenie w celu ograniczenia domeny wyszukiwania może zoptymalizować dostrajanie i uzyskać lepsze wyniki.
- W przypadku użycia funkcji
hp.choice()
Hyperopt zwraca indeks listy wyboru. W związku z tym parametr zarejestrowany w usłudze MLflow jest również indeksem. Użyjhyperopt.space_eval()
polecenia , aby pobrać wartości parametrów. - W przypadku modeli z długim czasem trenowania zacznij eksperymentować z małymi zestawami danych i wieloma hiperparametrami. Użyj biblioteki MLflow, aby zidentyfikować modele o najlepszej wydajności i określić, które hiperparametry można naprawić. W ten sposób można zmniejszyć przestrzeń parametrów podczas przygotowywania do dostosowywania na dużą skalę.
- Korzystaj z obsługi funkcji Hyperopt dla wymiarów warunkowych i hiperparametrów. Na przykład w przypadku oceny wielu smaków spadku gradientu, zamiast ograniczać przestrzeń hiperparametrów tylko do typowych hiperparametrów, można mieć hiperparametry hyperparapt funkcji Hyperopt obejmują hiperparametry warunkowe — te, które są odpowiednie tylko dla podzbioru smaków. Aby uzyskać więcej informacji na temat używania parametrów warunkowych, zobacz Definiowanie przestrzeni wyszukiwania.
- W przypadku korzystania z programu
SparkTrials
należy odpowiednio skonfigurować równoległość dla klastrów z obsługą procesora CPU i procesorów GPU. W usłudze Azure Databricks klastry procesora CPU i procesora GPU używają różnych liczb wątków funkcji wykonawczej na węzeł roboczy. Klastry procesora CPU używają wielu wątków funkcji wykonawczej na węzeł. Klastry procesora GPU używają tylko jednego wątku wykonawczego na węzeł, aby uniknąć konfliktów między wieloma zadaniami platformy Spark, które próbują użyć tego samego procesora GPU. Chociaż jest to na ogół optymalne dla bibliotek napisanych dla procesorów GPU, oznacza to, że maksymalna równoległość jest ograniczona w klastrach gpu, dlatego należy pamiętać o tym, ile procesorów GPU może używać każda wersja próbna podczas wybierania typów wystąpień procesora GPU. Aby uzyskać szczegółowe informacje, zobacz Klastry z obsługą procesora GPU. - Nie używaj
SparkTrials
klastrów skalowania automatycznego. Funkcja Hyperopt wybiera wartość równoległości po rozpoczęciu wykonywania. Jeśli klaster zostanie później automatycznie skalowany, funkcja Hyperopt nie będzie mogła korzystać z nowego rozmiaru klastra.
Rozwiązywanie problemów
- Zgłoszona utrata wartości NaN (a nie liczba) zwykle oznacza, że funkcja celu przekazana do
fmin()
zwracanej wartości NaN. Nie ma to wpływu na inne przebiegi i można je bezpiecznie zignorować. Aby zapobiec temu wynikowi, spróbuj dostosować przestrzeń hiperparametrów lub zmodyfikować funkcję celu. - Ponieważ funkcja Hyperopt używa algorytmów wyszukiwania stochastycznego, utrata zwykle nie zmniejsza się monotonicznie przy każdym uruchomieniu. Jednak te metody często znajdują najlepsze hiperparametry szybciej niż inne metody.
- Zarówno funkcja Hyperopt, jak i platforma Spark powodują narzut, który może zdominować czas trwania próby w przypadku krótkich uruchomień próbnych (kilkadziesiąt sekund). Obserwowana szybkość może być mała, a nawet zero.
Przykładowy notes: najlepsze rozwiązania dotyczące zestawów danych o różnych rozmiarach
SparkTrials
uruchamia wersje próbne w węzłach roboczych platformy Spark. Ten notes zawiera wskazówki dotyczące przenoszenia zestawów danych o różnych rzędach wielkości do węzłów roboczych w przypadku korzystania z programu SparkTrials
.