Techniki szkolenia dużych sieci neuronowych PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Techniki uczenia dużych sieci neuronowych

Techniki uczenia dużych sieci neuronowych

Duże sieci neuronowe są podstawą wielu ostatnich postępów w sztucznej inteligencji, ale wyszkolenie ich jest trudnym wyzwaniem inżynieryjnym i badawczym, które wymaga zorganizowania klastra procesorów graficznych w celu wykonania pojedynczego zsynchronizowanego obliczenia. Wraz ze wzrostem rozmiarów klastrów i modeli praktycy uczenia maszynowego opracowali coraz większą różnorodność technik równoległego uczenia modeli na wielu procesorach graficznych. Na pierwszy rzut oka zrozumienie tych technik równoległości może wydawać się zniechęcające, ale przy zaledwie kilku założeniach dotyczących struktury obliczeń, techniki te stają się znacznie jaśniejsze — w tym momencie po prostu przemieszczasz się między nieprzezroczystymi bitami z punktu A do punktu B jak sieć przełączaj wahadłowce wokół pakietów.

Równoległość danych

Techniki uczenia dużych sieci neuronowych

Równoległość rurociągu

Techniki uczenia dużych sieci neuronowych

Równoległość tensorowa

Techniki uczenia dużych sieci neuronowych

Ekspert równoległości

Techniki uczenia dużych sieci neuronowych

Równoległość danych

Techniki uczenia dużych sieci neuronowych

Równoległość rurociągu

Techniki uczenia dużych sieci neuronowych

Równoległość tensorowa

Techniki uczenia dużych sieci neuronowych

Ekspert równoległości

Techniki uczenia dużych sieci neuronowych

Ilustracja różnych strategii równoległości na modelu trójwarstwowym. Każdy kolor odnosi się do jednej warstwy, a linie przerywane oddzielają różne procesory graficzne.

Brak równoległości

Uczenie sieci neuronowej jest procesem iteracyjnym. W każdej iteracji wykonujemy przejście przez model nioski aby obliczyć dane wyjściowe dla każdego przykładu szkolenia w partii danych. Potem następna kolejna przepustka do tyłu przez warstwy, propagując, jak bardzo każdy parametr wpływa na końcowy wynik, obliczając a gradient w odniesieniu do każdego parametru. Średni gradient dla partii, parametrów i niektórych stanów optymalizacji na parametr jest przekazywany do algorytmu optymalizacji, takiego jak Adam, który oblicza parametry następnej iteracji (która powinna zapewnić nieco lepszą wydajność danych) i nowy stan optymalizacji według parametrów. W miarę iteracji uczenia po partiach danych model ewoluuje, aby generować coraz dokładniejsze wyniki.

Różne techniki równoległości dzielą ten proces szkoleniowy na różne wymiary, w tym:

  • Równoległość danych — uruchamiaj różne podzbiory partii na różnych procesorach graficznych;
  • Równoległość potoku — uruchamiaj różne warstwy modelu na różnych procesorach graficznych;
  • Równoległość tensorów — rozbicie matematyki na pojedynczą operację, taką jak mnożenie macierzy, która ma zostać podzielona na procesory graficzne;
  • Mixture-of-Experts — przetwarzaj każdy przykład tylko przez ułamek każdej warstwy.

(W tym poście założymy, że używasz procesorów graficznych do trenowania sieci neuronowych, ale te same pomysły dotyczą tych, które korzystają z innych akcelerator sieci neuronowych.)

Równoległość danych

Dane równoległe szkolenie oznacza kopiowanie tych samych parametrów do wielu procesorów graficznych (często nazywanych „procesami roboczymi”) i przypisywanie każdemu różnych przykładów do jednoczesnego przetwarzania. Sama równoległość danych nadal wymaga, aby model zmieścił się w pamięci pojedynczego procesora graficznego, ale umożliwia wykorzystanie obliczeń wielu procesorów graficznych kosztem przechowywania wielu zduplikowanych kopii parametrów. Biorąc to pod uwagę, istnieją strategie zwiększania efektywnej pamięci RAM dostępnej dla procesora graficznego, takie jak tymczasowe przenoszenie parametrów do pamięci procesora pomiędzy użyciami.

Ponieważ każdy pracownik przetwarzający dane równolegle aktualizuje swoją kopię parametrów, muszą koordynować się, aby zapewnić, że każdy pracownik nadal ma podobne parametry. Najprostszym podejściem jest wprowadzenie blokowania komunikacji między pracownikami: (1) niezależnie obliczamy gradient na każdym pracowniku; (2) uśredniaj gradienty między pracownikami; oraz (3) niezależnie obliczyć te same nowe parametry dla każdego pracownika. Krok (2) to średnia blokująca, która wymaga przesyłania dość dużej ilości danych (proporcjonalnie do liczby pracowników pomnożonej przez wielkość Twoich parametrów), co może negatywnie wpłynąć na wydajność treningu. Są różne schematy synchronizacji asynchronicznej usunąć to obciążenie, ale szkodzą efektywności uczenia się; w praktyce ludzie na ogół trzymają się podejścia synchronicznego.

Równoległość rurociągu

Z Rurociąg równoległy szkolenia, dzielimy sekwencyjne fragmenty modelu na procesory graficzne. Każdy GPU przechowuje tylko ułamek parametrów, a zatem ten sam model zużywa proporcjonalnie mniej pamięci na GPU.

Podzielenie dużego modelu na kawałki kolejnych warstw jest proste. Istnieje jednak sekwencyjna zależność między danymi wejściowymi i wyjściowymi warstw, więc naiwna implementacja może prowadzić do dużej ilości czasu bezczynności, podczas gdy pracownik czeka, aż dane wyjściowe z poprzedniej maszyny zostaną użyte jako dane wejściowe. Te fragmenty czasu oczekiwania są znane jako „bąbelki”, marnując obliczenia, które mogłyby wykonać maszyny na biegu jałowym.

Techniki uczenia dużych sieci neuronowych Naprzód
Techniki uczenia dużych sieci neuronowych Do tyłu
Techniki uczenia dużych sieci neuronowych Aktualizacja gradientu
Techniki uczenia dużych sieci neuronowych Idle
Techniki uczenia dużych sieci neuronowych

Ilustracja naiwnej konfiguracji równoległości rurociągu, w której model jest podzielony pionowo na 4 partycje według warstwy. Worker 1 obsługuje parametry modelu pierwszej warstwy sieci (najbliżej wejścia), podczas gdy Worker 4 obsługuje warstwę 4 (która jest najbliżej wyjścia). „F”, „B” i „U” oznaczają odpowiednio operacje do przodu, do tyłu i aktualizacji. Indeksy wskazują, na którym pracowniku działa operacja. Dane są przetwarzane przez jednego pracownika na raz ze względu na zależność sekwencyjną, co prowadzi do dużych „bąbelków” czasu bezczynności.

Możemy ponownie wykorzystać pomysły z równoległości danych, aby zmniejszyć koszt bańki, pozwalając każdemu pracownikowi przetwarzać tylko podzbiór elementów danych w jednym czasie, co pozwala nam sprytnie nakładać nowe obliczenia z czasem oczekiwania. Główną ideą jest podzielenie jednej partii na wiele mikropartii; każda mikropartia powinna być proporcjonalnie szybsza do przetworzenia, a każdy pracownik rozpoczyna pracę nad następną mikropartią, gdy tylko jest dostępna, co przyspiesza wykonywanie potoku. Przy wystarczającej ilości mikropartii pracownicy mogą być wykorzystywani przez większość czasu przy minimalnej ilości pęcherzyków na początku i na końcu etapu. Gradienty są uśredniane dla mikropartii, a aktualizacje parametrów następują dopiero po zakończeniu wszystkich mikropartii.

Liczba pracowników, na które jest podzielony model, jest powszechnie znana jako głębokość rurociągu.

Podczas przejścia do przodu pracownicy muszą tylko wysłać dane wyjściowe (zwane aktywacjami) swojego fragmentu warstw do następnego pracownika; podczas przejścia do tyłu wysyła gradienty z tych aktywacji tylko do poprzedniego robotnika. Istnieje duża przestrzeń projektowa, w której można zaplanować te przebiegi i agregować gradienty w mikropartii. GPipe każdy proces roboczy przechodzi kolejno do przodu i do tyłu, a na końcu synchronicznie agreguje gradienty z wielu mikropartii. Fajkowy sen zamiast tego planuje, aby każdy pracownik na przemian przetwarzał przejścia do przodu i do tyłu.

Techniki uczenia dużych sieci neuronowych Naprzód
Techniki uczenia dużych sieci neuronowych Do tyłu
Techniki uczenia dużych sieci neuronowych Aktualizacja
Techniki uczenia dużych sieci neuronowych Idle
GPipe

Techniki uczenia dużych sieci neuronowych

Fajkowy sen

Techniki uczenia dużych sieci neuronowych

Porównanie schematów potokowania GPipe i PipeDream przy użyciu 4 mikropartii na partię. Mikropartie 1-8 odpowiadają dwóm kolejnym partiom danych. Na obrazku „(liczba)” wskazuje, na której mikropartii wykonywana jest operacja, a indeks dolny oznacza identyfikator pracownika. Zwróć uwagę, że PipeDream uzyskuje większą wydajność, wykonując niektóre obliczenia ze starymi parametrami.

Równoległość tensorowa

Równoległość potoku dzieli model „pionowo” według warstw. Możliwe jest także „poziome” podzielenie niektórych operacji w obrębie warstwy, co jest zwykle nazywane Tensor równoległy trening. Do wielu nowoczesnych modeli (takich jak Transformator), wąskie gardło obliczeń polega na pomnożeniu macierzy wsadu aktywacji przez macierz dużej wagi. Mnożenie macierzy można traktować jako iloczyny skalarne pomiędzy parami wierszy i kolumn; możliwe jest obliczenie niezależnych iloczynów skalarnych na różnych procesorach graficznych lub obliczenie części każdego iloczynu skalarnego na różnych procesorach graficznych i zsumowanie wyników. W przypadku obu strategii możemy podzielić macierz wag na „fragmenty” o równej wielkości, umieścić każdy fragment na innym procesorze graficznym i użyć tego fragmentu do obliczenia odpowiedniej części całkowitego produktu macierzy przed późniejszą komunikacją w celu połączenia wyników.

Jednym z przykładów jest Megatron-LM, co powoduje równoległe mnożenie macierzy w warstwach samouważności i MLP Transformatora. PTD-P używa tensora, danych i równoległości potoku; jego harmonogram potoków przypisuje wiele nienastępujących po sobie warstw do każdego urządzenia, zmniejszając narzut bąbelkowy kosztem większej komunikacji sieciowej.

Czasami dane wejściowe do sieci mogą być zrównoleglone w wymiarze z wysokim stopniem obliczeń równoległych w stosunku do komunikacji krzyżowej. Równoległość sekwencji jest jednym z takich pomysłów, w którym sekwencja wejściowa jest dzielona w czasie na wiele podprzykładów, proporcjonalnie zmniejszając szczytowe zużycie pamięci, umożliwiając obliczenie na bardziej ziarnistych przykładach.

Mieszanina Ekspertów (MoE)

Z Mieszanina Ekspertów (MoE) Podejście, tylko ułamek sieci jest używany do obliczenia danych wyjściowych dla dowolnego wejścia. Jednym z przykładów podejścia jest posiadanie wielu zestawów wag, a sieć może wybrać, który zestaw ma być użyty, za pomocą mechanizmu bramkowania w czasie wnioskowania. Umożliwia to o wiele więcej parametrów bez zwiększonych kosztów obliczeń. Każdy zestaw wag jest określany jako „eksperci”, w nadziei, że sieć nauczy się przypisywać specjalistyczne obliczenia i umiejętności każdemu ekspertowi. Różni eksperci mogą być hostowani na różnych procesorach graficznych, zapewniając przejrzysty sposób skalowania liczby procesorów graficznych używanych w modelu.

Techniki uczenia dużych sieci neuronowych

Ilustracja warstwy mieszaniny ekspertów (MoE). Tylko 2 z n eksperci są wybierani przez sieć bramkowania. (Obraz zaadaptowany z: Shazeer i wsp., 2017)

Ghard skaluje transformator MoE do 600 miliardów parametrów ze schematem, w którym tylko warstwy MoE są dzielone na wiele urządzeń TPU, a inne warstwy są w pełni zduplikowane. Przełącznik transformatora skaluje rozmiar modelu do bilionów parametrów z jeszcze większą rzadkością, kierując jedno dane wejściowe do jednego eksperta.

Inne projekty oszczędzania pamięci

Istnieje wiele innych strategii obliczeniowych, które sprawiają, że trenowanie coraz większych sieci neuronowych jest łatwiejsze do opanowania. Na przykład:

  • Aby obliczyć gradient, musisz zapisać oryginalne aktywacje, co może zużywać dużo pamięci RAM urządzenia. Punkt kontrolny (znane również jako ponowne przeliczenie aktywacji) przechowuje dowolny podzbiór aktywacji i ponownie oblicza te pośrednie dokładnie w czasie podczas przejścia wstecznego. Oszczędza to dużo pamięci przy kosztach obliczeniowych co najwyżej jednego dodatkowego pełnego przejścia do przodu. Można również stale negocjować między kosztem obliczeń a kosztem pamięci poprzez: selektywne przeliczenie aktywacji, czyli sprawdzanie podzbiorów aktywacji, które są stosunkowo droższe w przechowywaniu, ale tańsze w obliczeniach.

  • Mieszane szkolenie precyzyjne jest trenowanie modeli przy użyciu mniej precyzyjnych liczb (najczęściej FP16). Nowoczesne akceleratory mogą osiągać znacznie wyższe liczby FLOP przy mniej precyzyjnych liczbach, a także oszczędzasz na pamięci RAM urządzenia. Przy odpowiedniej staranności uzyskany model może prawie nie stracić dokładności.

  • Rozładunek polega na tymczasowym przeniesieniu nieużywanych danych do procesora lub między różnymi urządzeniami, a następnie wczytaniu ich z powrotem w razie potrzeby. Naiwne implementacje spowalniają trenowanie, ale zaawansowane implementacje będą pobierać dane z wyprzedzeniem, dzięki czemu urządzenie nigdy nie będzie musiało na nie czekać. Jedną z realizacji tego pomysłu jest: Zero który dzieli parametry, gradienty i stany optymalizatora na cały dostępny sprzęt i materializuje je w razie potrzeby.

  • Optymalizatory wydajnie wykorzystujące pamięć zaproponowano w celu zmniejszenia zużycia pamięci w stanie uruchomionym utrzymywanym przez optymalizator, Takie jak Adafaktor.

  • Kompresja może być również używany do przechowywania wyników pośrednich w sieci. Na przykład, Sens kompresuje aktywacje, które są zapisane dla przejścia wstecz; DALL · E kompresuje gradienty przed ich synchronizacją.


W OpenAI szkolimy i ulepszamy duże modele, począwszy od podstawowej infrastruktury, aż po wdrażanie ich w rzeczywistych problemach. Jeśli chcesz wcielić w życie pomysły z tego posta — szczególnie istotne dla naszych zespołów ds. skalowania i badań stosowanych — zapraszamy wynajmowanie!


Podziękowanie
Dziękujemy Nikolasowi Tezakowi, Samowi Altmanowi, Danielowi Gackle, Ilyi Sutskeverowi i Stevenowi Adlerowi za opinie na temat wersji roboczych. Dziękujemy Justinowi Jayowi Wangowi, Biance Martin i Steve’owi Dowlingowi za komunikację i projekt.

Znak czasu:

Więcej z OpenAI