Przewodnik rozpoczynania nowego projektu

W tej sekcji pokazujemy, jak wybrać jedną z tych opcji na początku projektu ML:

  • architektura modelu
  • optymalizator
  • wielkość wsadu
  • konfiguracja początkowa

Założenia

Zakładamy w nim, że:

  • Udało Ci się już sformułować problem i w pewnym stopniu przygotować dane treningowe.
  • Masz już skonfigurowany potok trenowania i testowania.
  • Wybrano i zaimplementowałeś dane, które są jak najbardziej reprezentatywne w odniesieniu do danych, które planujesz mierzyć w wdrożonym środowisku.

Zakładając, że spełniasz wszystkie poprzednie wymagania wstępne, możesz teraz poświęcić czas na architekturę modelu i konfigurację trenowania.

Wybierz architekturę modelu

Zacznijmy od tych definicji:

  • Architektura modelu to system do generowania prognoz. Architektura modelu zawiera platformę do konwertowania danych wejściowych w prognozy, ale nie zawiera wartości parametrów. Na przykład sieć neuronowa z 3 ukrytymi warstwami po 10 węzłów, 5 węzłów i 3 węzłów jest architekturą modelu.
  • model to architektura modelu wraz z konkretnymi wartościami dla wszystkich parametrów. Na przykład model składa się z sieci neuronowej opisanej w definicji architektury modelu oraz z konkretnych wartości wag i odchylenia każdego węzła.
  • Rodzina modeli to szablon do tworzenia architektury modelu z zestawem hiperparametrów.

Wybór architektury modelu oznacza tak naprawdę wybór zestawu różnych modeli (po jednym dla każdego ustawienia hiperparametrów modelu).

W miarę możliwości staraj się znaleźć udokumentowaną bazę kodu, która jest jak najbardziej zbliżona do bieżącego problemu. Następnie odtwórz ten model jako punkt wyjścia.

Wybierz optymalizator

Żaden optymalizator nie jest najlepszym rozwiązaniem w przypadku wszystkich rodzajów problemów z systemami uczącymi się i architektur modeli. Trudno jest nawet porównać skuteczność optymalizatorów. 🤖Zalecamy korzystanie z popularnych optymalizatorów o ugruntowanej pozycji, zwłaszcza przy rozpoczynaniu nowego projektu.

Zalecamy wybranie najpopularniejszego narzędzia do optymalizacji pod kątem rodzaju problemu, nad którym pracujesz. Polecamy tych specjalistów od optymalizacji:

Zwróć uwagę na wszystkie argumenty wybranego optymalizatora. Optymalizacje z większą liczbą hiperparametrów zwykle wymagają więcej wysiłku. Jest to szczególnie uciążliwe na początkowych etapach projektu, gdy szukasz najlepszych wartości innych hiperparametrów (np. szybkości uczenia się), jednocześnie traktując argumenty optymalizatora jako kłopotliwe. Dlatego zalecamy postępowanie w następujący sposób:

  1. Na początku projektu wybierz optymalizator bez wielu hiperparametrów, które można dostosować. Oto 2 przykłady:
    • SGD o stałym rozruchu.
    • Adam z poprawionym Epsilonem, Beta1 i Beta2.
  2. Na późniejszych etapach projektu przejdź na bardziej ogólnego optymalizatora, który dostraja więcej hiperparametrów zamiast naprawiania ich do wartości domyślnych.

Wybierz rozmiar wsadu

Podsumowanie: rozmiar wsadu określa szybkość trenowania. Nie używaj rozmiaru wsadu do bezpośredniego dostosowywania wydajności zestawu do walidacji.

Wielkość wsadu w znacznym stopniu wpływa na czas trenowania i wykorzystanie zasobów obliczeniowych. Zwiększenie rozmiaru wsadu często skraca czas trenowania, co:

  • Pozwala dokładniej dostroić hiperparametry w ustalonym przedziale czasu, co może pomóc w uzyskaniu lepszego modelu końcowego.
  • Skraca to czas oczekiwania w cyklu programowania, co umożliwia częstsze testowanie nowych pomysłów.

Zwiększenie rozmiaru wsadu może zmniejszyć lub zwiększyć wykorzystanie zasobów albo pozostawić wykorzystanie zasobów bez zmian.

Nie traktuj rozmiaru wsadu jako możliwego do dostrajania hiperparametru dla wydajności zestawu walidacji. Jeśli są spełnione wszystkie te warunki, wydajność modelu nie powinna zależeć od wielkości grupy:

  • Wszystkie hiperparametry optymalizatora są dobrze dostrojone.
  • Regularność jest wystarczająca i odpowiednia.
  • Liczba kroków trenowania jest wystarczająca.

Tę samą ostateczną wydajność można osiągnąć przy użyciu dowolnego rozmiaru wsadu (zobacz Shallue i in. 2018 oraz Dlaczego nie należy dostosowywać rozmiaru wsadu w celu bezpośredniego zwiększenia wydajności zestawu do walidacji?).

Określ możliwe rozmiary wsadu i oszacuj przepustowość trenowania

W przypadku danego modelu i optymalizatora dostępny sprzęt zwykle obsługuje różne rozmiary wsadu. Czynnikiem ograniczającym jest zwykle pamięć akceleracyjna. Niestety trudno jest obliczyć, które partie mieszczą się w pamięci bez uruchamiania czy kompilowania całego programu treningowego. Najłatwiejszym rozwiązaniem jest uruchamianie zadań treningowych o różnej wielkości wsadu (np. zwiększanie mocy o 2) przez niewielką liczbę kroków, aż jedno z zadań przekroczy dostępną pamięć. W przypadku każdej wielkości wsadu trenuj wystarczająco długo, aby uzyskać miarodajne oszacowanie przepustowości trenowania:

przepustowość trenowania = liczba przykładów przetworzonych na sekundę

lub czas na krok:

czas na krok = rozmiar wsadu / przepustowość trenowania

Gdy akceleratory nie są jeszcze nasycone, a rozmiar wsadu podwoi się, przepustowość trenowania również powinna się podwoić (lub co najmniej dwukrotnie). Odpowiednik czas każdego etapu powinien być stały (lub co najmniej stały) w miarę zwiększania rozmiaru wsadu. Jeśli tak nie jest, w potoku trenowania występuje wąskie gardła, takie jak wejście/wyjście lub synchronizacja między węzłami obliczeniowymi. Zanim przejdziesz dalej, rozważ zdiagnozowanie i wyeliminowanie wąskiego gardła.

Jeśli przepustowość trenowania zwiększa się tylko do pewnego maksymalnego rozmiaru wsadu, bierz pod uwagę tylko rozmiar wsadu, który się do niego nie przekracza, nawet jeśli sprzęt obsługuje większy rozmiar wsadu. Wszystkie zalety korzystania z większego rozmiaru wsadu zakładają wzrost przepustowości trenowania. Jeśli to nie pomoże, rozwiąż problem z wąskim gardłem lub użyj mniejszego gardła.

Akumulacja gradientowa symuluje wielkość wsadu większej niż jest obsługiwana przez sprzęt, więc nie zapewnia żadnej korzyści związanej z przepustowością. Należy unikać gromadzenia się gradientu w pracy stosowanej.

Może być konieczne powtórzenie tych czynności po każdej zmianie modelu lub optymalizatora. Na przykład inna architektura modelu może umożliwiać zmieszczenie w pamięci większego rozmiaru wsadu.

Wybierz rozmiar wsadu, aby zminimalizować czas trenowania

Oto nasza definicja czasu trenowania:

  • czas treningu = (czas na krok) x (łączna liczba kroków)

Czas trwania każdego etapu można często traktować jako w przybliżeniu stały dla wszystkich możliwych rozmiarów wsadu. Dzieje się tak, gdy:

  • Nie ma narzutu wynikającego z obliczeń równoległych.
  • Wszystkie wąskie gardła szkolenia zostały zdiagnozowane i usunięte. W poprzedniej sekcji znajdziesz informacje o tym, jak zidentyfikować wąskie gardła trenowania. W praktyce jest to zwykle co najmniej pewny narzut, który wynika ze zwiększenia rozmiaru wsadu.

Wraz ze wzrostem rozmiaru wsadu zazwyczaj zmniejsza się łączna liczba kroków niezbędnych do osiągnięcia ustalonego celu skuteczności, o ile przy zmianie rozmiaru wsadu dostosujesz wszystkie odpowiednie hiperparametry. (zob. Shallue i in., 2018 r.). Na przykład podwojenie rozmiaru wsadu może zmniejszyć o połowę łączną liczbę wymaganych kroków. Ta zależność jest nazywana idealnym skalowaniem i powinna obejmować wszystkie wielkości wsadu, aż do osiągnięcia krytycznego rozmiaru wsadu.

Poza krytycznym rozmiarem wsadu zwiększenie rozmiaru wsadu powoduje malejące zwroty. Oznacza to, że zwiększenie rozmiaru wsadu ostatecznie nie zmniejsza już liczby kroków trenowania, ale nigdy jej nie zwiększa. W związku z tym rozmiar wsadu, który pozwala zminimalizować czas trenowania, jest zwykle największy rozmiarem wsadu, który nadal zmniejsza liczbę wymaganych kroków trenowania. Rozmiar wsadu zależy od zbioru danych, modelu i optymalizatora. Jego obliczenie jest otwarte, a nie eksperymentalnie w przypadku każdego nowego problemu. 🤖

Porównując wielkość wsadu, pamiętaj o różnicach między tymi elementami:

  • Budżet przykładowy lub budżet epoki – prowadzenie wszystkich eksperymentów przy jednoczesnym ustaleniu liczby przykładowych prezentacji do trenowania.
  • Budżet kroków, czyli prowadzenie wszystkich eksperymentów ze stałą liczbą kroków trenowania.

Porównywanie rozmiarów wsadu z budżetem epoki pozwala tylko zbadać idealny reżim skalowania. Nawet wtedy, gdy duże rozmiary wsadowe wsadowe są w miarę możliwości korzystne, ponieważ ograniczają one liczbę wymaganych kroków trenowania. Często największy rozmiar wsadu obsługiwany przez dostępny sprzęt jest mniejszy niż krytyczny rozmiar wsadu. Dlatego dobrą metodą (bez przeprowadzania eksperymentów) jest użycie największej możliwej wielkości wsadu.Nie ma sensu korzystać z większej partii, jeśli wydłuży to czas trenowania.

Wybierz rozmiar wsadu, aby zminimalizować wykorzystanie zasobów

Istnieją 2 typy kosztów zasobów związanych ze zwiększaniem rozmiaru wsadu:

  • Koszty z góry. Może to być na przykład zakup nowego sprzętu lub przeredagowanie potoku trenowania w celu wdrożenia trenowania na wielu procesorach graficznych lub wielu TPU.
  • Koszty wykorzystania. Mogą to być na przykład płatności na podstawie budżetów zasobów zespołu, płatności od dostawcy usług w chmurze, koszty energii elektrycznej / konserwacji.

Jeśli ponoszone na początku koszty związane ze zwiększeniem wielkości wsadu wiążą się ze znacznymi kosztami, lepiej odroczyć zwiększenie rozmiaru wsadu do czasu, aż projekt osiągnie dojrzałość, co ułatwi ocenę równowagi między kosztami a korzyściami. Wdrożenie programów szkoleń równoległych z wieloma hostami może spowodować wprowadzenie bugs i drobnych problemów, dlatego i tak lepiej zacząć od prostszego potoku. Z drugiej strony duże przyspieszenie czasu trenowania może być bardzo korzystne na początku tego procesu, gdy trzeba przeprowadzać dużo eksperymentów z dostrajaniem.

Całkowity koszt wykorzystania (który może obejmować wiele różnych rodzajów kosztów) to zużycie zasobów. Wartość ta jest obliczana w następujący sposób:

zużycie zasobów = zużycie zasobów na krok x łączna liczba kroków

Zwiększenie rozmiaru wsadu zwykle zmniejsza łączną liczbę kroków. Wzrost czy spadek wykorzystania zasobów zależy od tego, jak zmienia się wykorzystanie na poszczególnych etapach, co zależy od rozmiaru wsadu w ten sposób:

  • Zwiększenie rozmiaru wsadu może zmniejszyć zużycie zasobów. Jeśli na przykład każdy krok z większym rozmiarem wsadu można uruchomić na tym samym sprzęcie, co plik o mniejszym rozmiarze wsadu (z niewielkim wydłużeniem czasu trwania etapu), wtedy każde zwiększenie zużycia zasobów na dany etap może zostać wyrównane przez zmniejszenie liczby kroków.
  • Zwiększenie rozmiaru wsadu może nie zmienić zużycia zasobów. Jeśli na przykład podwojenie rozmiaru wsadu spowoduje zmniejszenie o połowę wymaganej liczby kroków i podwojenie liczby używanych GPU, to całkowite wykorzystanie (w postaci godzin GPU) się nie zmieni.
  • Zwiększenie rozmiaru wsadu może zwiększyć zużycie zasobów. Jeśli na przykład zwiększenie rozmiaru wsadu wymaga uaktualnionego sprzętu, wzrost wykorzystania na krok może przeważyć zmniejszenie liczby kroków.

Zmiana wielkości wsadu wymaga ponownego dostrojenia większości hiperparametrów

Optymalne wartości większości hiperparametrów zależą od wielkości wsadu. W związku z tym zmiana rozmiaru wsadu zwykle wymaga ponownego rozpoczęcia procesu dostrajania. Hiperparametry, które najsilniej wpływają na rozmiar wsadu i dlatego najważniejsze, dla każdego rozmiaru wsadu trzeba dostosować osobno, to:

  • Hiperparametry optymalizatora (np. szybkość uczenia się i pęd)
  • Hiperparametry regularyzacji

Zwróć uwagę na to, wybierając rozmiar wsadu na początku projektu. Jeśli później zechcesz zmienić rozmiar wsadu, dostosowanie innych hiperparametrów do nowego rozmiaru może być trudne, czasochłonne i kosztowne.

W jaki sposób norma wsadu wpływa na rozmiar wsadu

Norma wsadowa jest skomplikowana i zwykle do obliczania statystyk należy używać innej wielkości wsadu niż obliczenie gradientu. Szczegółowe informacje na ten temat znajdziesz w szczegółach implementacji normalizacji grupowej.

Wybierz konfigurację początkową

Pierwszy etap dostrajania hiperparametrów to określenie punktów początkowych dla:

  • konfiguracja modelu (np. liczba warstw)
  • hiperparametry optymalizatora (np. szybkość uczenia się)
  • liczbę kroków treningowych

Wyznaczenie tej początkowej konfiguracji wymaga ręcznie skonfigurowanych uruchomień treningowych oraz ćwiczeń metodą prób i błędów.

Oto główna zasada:

Znajdź prostą, stosunkowo szybką konfigurację zużywającą stosunkowo mało zasobów, która zapewnia rozsądną wydajność.

gdzie:

  • Prostota oznacza unikanie niepotrzebnych funkcji potoku, takich jak regularne regularyzacje czy sztuczki architektoniczne. Na przykład potok bez regularnej regularyzacji porzuceń (lub z wyłączoną regularyzacją porzucania) jest prostszy niż potok z regularyzacją porzuceń.
  • Rozsądna wydajność zależy od problemu, ale przynajmniej rozsądnie wytrenowany model osiąga znacznie lepsze wyniki niż losowy przypadek na zbiorze do weryfikacji.

Wybór początkowej konfiguracji, która jest szybka i zużywa minimalną ilość zasobów, pozwala znacznie wydajniej dostrajać hiperparametry. Możesz na przykład zacząć od mniejszego modelu.

Wybór liczby kroków wymaga równoważenia obciążenia:

  • Trenowanie kolejnych kroków może poprawić wydajność i uprościć dostrajanie hiperparametrów. (Więcej informacji znajdziesz w Shallue i in., 2018).
  • Z kolei trenowanie z mniejszą liczbą kroków oznacza, że każde uruchomienie trwa krócej i zużywa mniej zasobów, co poprawia wydajność dostrajania przez skrócenie czasu między cyklami i pozwala na przeprowadzanie większej liczby eksperymentów równoległych. Co więcej, jeśli wybierzesz zbyt duży budżet kroków na początku projektu, może być ciężko go zmienić na późniejszym etapie projektu, na przykład po dostosowaniu harmonogramu tempa uczenia się dla tej liczby kroków.