W tej sekcji wyjaśniamy, jak wybierać te elementy na początku polecenia projekt ML:
- architektura modelu
- optymalizator
- rozmiar wsadu
- konfiguracja początkowa
Założenia
Wskazówki w tej sekcji zakładają, że:
- Masz już opracowany problem, i do pewnego stopnia przygotowali Twoje dane treningowe.
- Masz już skonfigurowany potok trenowania i testowania.
- Wybrano i wdrożono dane, które są najbardziej reprezentatywne to, co zamierzasz mierzyć we wdrożonym środowisku.
Zakładając, że spełniasz wszystkie wymagania wstępne, możesz poświęcać czas na architekturę modelu i konfigurację trenowania.
Wybierz architekturę modelu
Zacznijmy od następujących definicji:
- Architektura modelu to system generowania prognoz. Architektura modelu zawiera platformę do konwertowania danych wejściowych w podpowiedziach, ale nie zawiera parameter. Przykład: sieć neuronowa z 3 ukrytymi warstwami po 10, 5 i 3 węzłami; jest architekturą modelu.
- Model to architektura modelu wraz z określonymi wartościami dla wszystkich . Na przykład model składa się z opisanej sieci neuronowej w definicji architektury modelu oraz konkretne wartości wagi i odchylenia każdego węzła.
- Rodzina modeli to szablon do konstruowania architektury modelu dla zbioru hiperparametrów.
Wybór architektury modelu tak naprawdę wymaga zestawu różnych modele (po jednym na każde ustawienie hiperparametrów modelu).
W miarę możliwości staraj się znaleźć udokumentowaną bazę kodu, która coś zawiera jak najbliżej aktualnego problemu. Następnie odtwórz ten model jako punktem wyjścia.
Wybór optymalizatora
Żaden optymalizator nie jest „najlepszy” we wszystkich typach problemów z systemami uczącymi się i architekturą modeli. Nawet porównanie skuteczności optymalizatorów jest trudny. 🤖Zalecamy korzystanie z dobrze znanych, popularnych optymalizatorów, zwłaszcza przy tworzeniu nowego projektu.
Zalecamy wybór najpopularniejszego optymalizatora dla danego typu problemu nad którymi pracujesz. Zalecamy stosowanie tych sprawdzonych optymalizatorów:
- SGD z tempem. Zalecamy wersję Nesterova.
- Adam i Nadam, czyli bardziej ogólne niż SGD z tempem. Zwróć uwagę, że Adam ma cztery argumenty, które można dostroić, mogą być ważne! Zobacz artykuł Jak stosować hiperparametry Adama dostrojone?
Zwróć uwagę na wszystkie argumenty wybranego optymalizatora. Optymalizatory z większą liczbą hiperparametrów zwykle wymagają większego nakładu pracy. Jest to szczególnie bolesne na początkowych etapach projektu, gdy próbujesz znaleźć najlepsze wartości różnych innych hiperparametrów (na przykład tempo uczenia się), traktując argumenty optymalizatora jako uciążliwości. W związku z tym zalecamy stosowanie tych rozwiązań:
- Na początku projektu wybierz optymalizator bez wielu dostrojonych
za pomocą hiperparametrów. Oto 2 przykłady:
- SGD ze stałym ruchem.
- Adam z ustalonymi wartościami Epsilon, Beta1 i Beta2.
- Na późniejszych etapach projektu zmień na bardziej ogólny optymalizator, dostraja więcej hiperparametrów zamiast przywracać je do wartości domyślnych.
Wybierz rozmiar wsadu
Podsumowanie: rozmiar wsadu określa szybkość trenowania; nie używaj rozmiaru wsadu aby bezpośrednio dostosować wydajność zestawu do weryfikacji.
Wielkość wsadu znacząco wpływa na czas trenowania i zasoby obliczeniowe konsumpcją treści. Zwiększenie rozmiaru wsadu często skraca czas trenowania, który:
- Umożliwia dokładniejsze dostrajanie hiperparametrów w ustalonym czasie co może zapewnić lepszy model końcowy.
- Skraca czas oczekiwania na cykl programowania, pozwalając na wdrażanie nowych pomysłów sprawdzanych częściej.
Zwiększenie rozmiaru wsadu może zmniejszyć lub zwiększyć zużycie zasobów, lub pozostawić wykorzystanie zasobów na niezmienionym poziomie.
Nie traktuj rozmiaru wsadu jako hiperparametru z możliwością dostrojenia na potrzeby walidacji ustawwydajność. Jeśli wszystkie wartości gdy spełnione są poniższe warunki, wydajność modelu nie powinna być uzależniona od wielkość wsadu:
- Wszystkie hiperparametry optymalizatora są dobrze dostrojone.
- Odpowiednia regularność jest wystarczająca.
- Liczba kroków trenowania jest wystarczająca.
Ta sama ostateczna wydajność powinna być osiągalna przy użyciu dowolnej wielkości wsadu (Patrz Shallue i in., 2018 oraz Dlaczego nie należy dostosowywać rozmiaru wsadu, aby bezpośrednio poprawić jakość skuteczność zestawu do weryfikacji?)
Określ możliwe rozmiary wsadów i oszacuj przepustowość trenowania
W danym modelu i optymalizatorze dostępny sprzęt zazwyczaj obsługuje różnych wielkości wsadów. Czynnikiem ograniczającym jest zwykle pamięci akceleratora. Niestety, trudno jest obliczyć, rozmiary wsadu zmieszczą się w pamięci bez uruchamiania lub przynajmniej kompilowania, do pełnego programu szkoleniowego. Najłatwiejszym rozwiązaniem jest zwykle uruchamianie zadań trenowania wsadach o różnych wielkościach (np. zwiększające moc 2) w przypadku liczba kroków do momentu, gdy jedno z zadań przekroczy dostępną pamięć. Dla: każdego rozmiaru wsadu, trenuj wystarczająco długo, aby uzyskać wiarygodne oszacowanie przepustowość trenowania:
przepustowość trenowania = liczba przykładów przetwarzanych na sekundę
lub odpowiednik czasu na krok:
czas na krok = rozmiar wsadu / przepustowość trenowania
Gdy akceleratory nie są jeszcze nasycone, podwojenie wielkości wsadu, przepustowość trenowania powinna się dwukrotnie (albo przynajmniej podwoić). Odpowiednik czas na krok powinien być stały (lub stałe), wraz ze zwiększaniem wielkości wsadu. Jeśli tak nie jest, w potoku trenowania występuje wąskie gardło, takie jak I/O, między węzłami obliczeniowymi. Rozważ zdiagnozowanie i wyeliminowanie wąskiego gardła zanim przejdziesz dalej.
Jeśli przepustowość trenowania zwiększy się tylko do pewnego maksymalnego rozmiaru wsadu, uwzględniaj tylko wsady o maksymalnym rozmiarze wsadu, nawet jeśli pozwala obsługiwać większy rozmiar wsadu. Wszystkie korzyści ze stosowania większego rozmiaru wsadu zakładają, że trenowanie może mieć odpowiednią przepustowość rośnie. Jeśli tak nie jest, rozwiąż wąskie gardło lub użyj mniejszego rozmiaru wsadu.
Akumulacja gradientem symuluje większy rozmiar wsadu niż sprzęt. i dlatego nie zapewnia żadnych korzyści związanych z przepustowością. Zalecenia zasadniczo unikaj akumulacji gradientu podczas pracy.
Konieczne może być powtórzenie tych czynności za każdym razem, gdy zmieniasz model lub optymalizatora. Na przykład inna architektura modelu może umożliwiać większy rozmiar wsadu, aby zmieścić się w pamięci.
Wybierz rozmiar wsadu, aby zminimalizować czas trenowania
Oto nasza definicja czasu trenowania:
- czas trenowania = (czas na krok) x (łączna liczba kroków)
Często można uznać czas na krok za mniej więcej stały dla wszystkich możliwych rozmiarów wsadu. Dzieje się tak, gdy:
- Nie ma żadnych dodatkowych kosztów związanych z obliczeniami równoległymi.
- Wszystkie wąskie gardła treningów zostały zdiagnozowane i wyeliminowane. (przeczytaj poprzednią sekcję, aby dowiedzieć się, jak określić, czyli wąskim gardła dla systemów uczących się. W praktyce należy zazwyczaj ze zwiększania rozmiaru wsadu.
W miarę jak rozmiar wsadu rośnie, łączna liczba kroków niezbędnych do osiągnięcia a ustany cel skuteczności zazwyczaj maleje, przy zmianie wielkości wsadu do odpowiednich hiperparametrów. (Zobacz Shallue i in. 2018). Na przykład podwojenie wielkości wsadu może o połowę zmniejszyć łączną liczbę kroków. Ta relacja nosi nazwę idealnego skalowania i powinna obejmuje wszystkie wsady, które nie przekraczają krytycznego rozmiaru wsadu.
Zwiększenie rozmiaru wsadu wykracza poza krytyczny rozmiar wsadu malejące zwroty. Chodzi o to, aby w końcu zwiększyć rozmiar wsadu, nie zmniejsza już liczby kroków trenowania, ale nigdy jej nie zwiększa. Dlatego rozmiar wsadu, który minimalizuje czas trenowania, to zwykle największy rozmiar wsadu, który wciąż ogranicza liczbę kroków trenowania Ten rozmiar wsadu zależy od zbioru danych, modelu i optymalizatora, ale pozostaje otwarty problem sposobu obliczania go znaleźć eksperymentalnie w przypadku każdego nowego problemu. 🤖
Porównując rozmiary wsadów, pamiętaj o różnicach między:
- budżet przykładowy lub budżet epoki – obejmuje on wszystkie eksperymenty; dotyczących liczby przykładowych prezentacji szkoleniowych.
- Budżet krokowy – prowadzenie wszystkich eksperymentów ze stałą liczbą treningowych.
Dzięki porównaniu wielkości wsadu z budżetem czasowym można uzyskać tylko nawet wtedy, gdy większe rozmiary wsadu wciąż mogą generować znaczące przyspieszenie dzięki zmniejszeniu liczby wymaganych kroków trenowania. Często największy rozmiar wsadu obsługiwany przez dostępny sprzęt. jest mniejszy niż krytyczny rozmiar wsadu. Dlatego dobra zasada (bez przeprowadzania eksperymentów) należy użyć największej partii nie ma sensu używać większego rozmiaru wsadu, jeśli się zakończy wydłużając czas trenowania.
Wybierz rozmiar wsadu, aby zminimalizować zużycie zasobów
Istnieją 2 rodzaje kosztów zasobów związanych ze zwiększaniem wielkości wsadu:
- Koszty z góry. Na przykład zakup nowego sprzętu lub przepisanie potok trenowania do wdrożenia trenowania z użyciem wielu układów GPU / TPU.
- Koszty użytkowania. Na przykład rozliczanie się z budżetami zasobów zespołu, rozliczanie przez dostawcę chmury, koszty energii elektrycznej i konserwacji.
Jeśli zwiększenie rozmiaru wsadu niesie ze sobą znaczne koszty początkowe, lepiej jest odroczyć zwiększanie rozmiaru wsadu do czasu, gdy projekt jest coraz ważniejsza i łatwiej jest ocenić stosunek kosztów do korzyści. Wdrożenie programów trenowania równoległego na wielu hostach może spowodować, robaki oraz subtelne problemy więc lepiej zacząć od prostszego, tak czy inaczej. Z drugiej strony spory czas przyspieszenia trenowania może być bardzo korzystne na wczesnym etapie, gdy wiele dostrajania potrzebne są eksperymenty.
Nazywamy go całkowitym kosztem wykorzystania (który może obejmować kilka różnych rodzaje kosztów) jako wykorzystanie zasobów, obliczane w następujący sposób:
wykorzystanie zasobów = zużycie zasobów na krok x łączna liczba kroków
Zwiększenie rozmiaru wsadu zazwyczaj powoduje zmniejszenie łącznej liczby kroków. Wzrost lub spadek wykorzystania zasobów zależy od jak zmienia się wykorzystanie na etap, w zależności od wielkości wsadu:
- Zwiększenie rozmiaru wsadu może zmniejszyć wykorzystanie zasobów. Jeśli na przykład można wykonać każdy krok o większym rozmiarze wsadu na tym samym sprzęcie co przy mniejszych wsadach wydłużenie czasu na etap), a następnie dowolny wzrost zasobu konsumpcja na krok może być zrównoważona przez spadek liczbę kroków.
- Zwiększenie rozmiaru wsadu może nie zmienić wykorzystania zasobów. Jeśli na przykład podwojenie wielkości wsadu spowoduje zmniejszenie liczby kroków o połowę i podwaja liczbę używanych GPU, co przekłada się na całkowite wykorzystanie (pod względem godzin GPU) nie zmienia się.
- Zwiększenie rozmiaru wsadu może zwiększyć wykorzystanie zasobów. Jeśli na przykład zwiększenie rozmiaru wsadu wymaga uaktualnienia sprzętu, wzrost konsumpcji na krok może przeważyć zmniejszenie liczbę kroków.
Zmiana rozmiaru wsadu wymaga ponownego dostrojenia większości hiperparametrów
Optymalne wartości większości hiperparametrów są wrażliwe na wielkość wsadu. Dlatego zmiana rozmiaru wsadu zwykle wymaga rozpoczęcia dostrajania od początku. Hiperparametry, które oddziałują najsilniej z rozmiarem wsadu, dlatego ważne jest, aby dostrajać je osobno dla każdego rozmiaru wsadu, wyglądają następująco:
- hiperparametry optymalizatora (np. tempo uczenia się i pęd).
- Hiperparametry regularyzacji
Pamiętaj o tym podczas wybierania rozmiaru wsadu na początku projektu. Jeśli później zajdzie potrzeba zmiany rozmiaru wsadu, dostrajanie innych hiperparametrów jest trudne, czasochłonne i kosztowne nowego rozmiaru wsadu.
Jak norma wsadu wpływa na rozmiar wsadu
Norma zbiorcza jest skomplikowana i zwykle należy użyć innej partii niż przy obliczaniu gradientu. Zobacz Wdrożenie normalizacji zbiorczej , gdzie znajdziesz więcej informacji.
Wybierz konfigurację początkową
Pierwszym etapem dostrajania hiperparametrów jest określenie następujące punkty:
- konfiguracja modelu (np. liczba warstw)
- hiperparametry optymalizatora (np. tempo uczenia się)
- liczbę kroków trenowania
Ustalenie tej konfiguracji początkowej wymaga wykonania pewnych czynności ręcznie skonfigurowanych uruchomień treningowych oraz metody prób i błędów.
Nasza główna zasada jest taka:
Znajdź proste, stosunkowo szybkie i względnie niewielkie zużycie zasobów i uzyskuje uzasadnione działanie.
gdzie:
- Prosty oznacza unikanie zbędnych funkcji potoku, takich jak specjalne regularne lub architektoniczne sztuczki. Na przykład potok bez porzucenia regularyzacja (lub z wyłączoną regularyzacją porzuceń) jest prostszy niż regularyzacja porcji.
- Rozsądne wyniki zależą od problemu, ale są minimum rozsądny wytrenowany model działa znacznie lepiej niż przypadkowy dla zbioru do walidacji.
Wybrać początkową konfigurację, która jest szybka i wykorzystywana w minimalnym stopniu znacznie wydajniejsze dostrajanie hiperparametrów. Zacznij na przykład od mniejszego modelu.
Aby wybrać liczbę kroków trenowania, musisz zachować równowagę między tymi czynnikami:
- Trenowanie większej liczby kroków może poprawić wydajność i uprościć hiperparametry i dostrajania. (Aby dowiedzieć się więcej, zapoznaj się z artykułem Shallue i in. 2018).
- I na odwrót – trenowanie z mniejszą liczbą kroków oznacza, że każde uruchomienie treningowe szybsze i zużywające mniej zasobów, co zwiększa wydajność dostrajania dzięki między cyklami i umożliwia prowadzenie większej liczby eksperymentów równolegle. A jeśli wybierzesz niepotrzebnie duży budżet kroków na początku w projekcie, może być trudno zmienić go w późniejszym okresie, np. po dostrojeniu harmonogramu tempa uczenia się dla tej liczby kroków.