Jaka jest zaleta utrzymywania wielkości partii na poziomie 2?

18

Dlaczego podczas szkolenia modeli uczenia maszynowego czasami korzystne jest utrzymanie wielkości partii na poziomie 2? Pomyślałem, że najlepiej będzie użyć rozmiaru, który najlepiej pasuje do twojej pamięci / RAM GPU.

Ta odpowiedź twierdzi, że dla niektórych pakietów moc 2 jest lepsza jako wielkość partii. Czy ktoś może podać szczegółowe wyjaśnienie / link do szczegółowego wyjaśnienia tego? Czy dotyczy to wszystkich algorytmów optymalizacji (opadanie gradientu, propagacja wsteczna itp.), Czy tylko niektórych z nich?

James Bond
źródło

Odpowiedzi:

24

Jest to problem z wyrównaniem procesorów wirtualnych (VP) do procesorów fizycznych (PP) GPU. Ponieważ liczba PP jest często potęgą 2, użycie liczby VP innej niż potęga 2 prowadzi do słabej wydajności.
Możesz zobaczyć mapowanie VP na PP jako stos plasterków wielkości liczby PP .
Powiedz, że masz 16 PP.
Możesz zmapować na nich 16 PZ: 1 PZ jest zmapowany na 1 PP.
Możesz zmapować na nich 32 PZ: 2 plastry po 16 PZ, 1 PP będą odpowiedzialne za 2 PZ.
Itd. Podczas wykonywania, każdy PP wykona zadanie pierwszego VP, za który jest odpowiedzialny, następnie zadanie drugiego VP, itp.
Jeśli użyjesz 17 VP, każdy PP wykona zadanie swojego pierwszego PP, a następnie 1 PP wykona wykonać zadanie 17. ANDinni nic nie zrobią (dokładniej poniżej).
Wynika to z paradygmatu SIMD (zwanego w latach 70. wektorem ) stosowanego przez procesory graficzne. Nazywa się to często równoległością danych: wszystkie PP robią to samo w tym samym czasie, ale na różnych danych. Zobacz https://en.wikipedia.org/wiki/SIMD .
Mówiąc dokładniej, w przykładzie z 17 PZ, po wykonaniu zadania pierwszego plasterka (przez wszystkich PP wykonujących zadanie swojego pierwszego PZ), wszyscy PP wykonają tę samą pracę (2 PZ), ale tylko jeden ma trochę dane do pracy .
Nie ma nic wspólnego z nauką. To tylko programowanie.

jcm69
źródło
czy dokładniej byłoby powiedzieć, że rozmiary partii powinny być wielokrotnością liczby PP? Czy w twoim przykładzie możemy zmapować 16x3 = 48 VP na 16 PP?
zachodni
Tak. cóż ... Jeśli wykonasz mapowanie VP -> PP, sam, na pewno masz 100% racji. Jeśli korzystasz z biblioteki i poprosisz o 80 VP. Nie jestem pewny. Nie mówię, że się mylisz. Jeśli stosunek wynosi potęgę 2, możesz użyć bardzo klasycznych i łatwych optymalizacji. Pomyśl o dostępie do pamięci. Jeśli liczba sąsiadów na piętrze VP nie jest potęgą 2, powiedzmy 5, lib nie będzie w stanie tak łatwo korzystać z klasycznego dostępu O (log_2 (n)) do pamięci sąsiadów.
jcm69
@ jcm69 czy możesz wyjaśnić lub podać link do log_2 (n) czasu dostępu do dostępu do pamięci VP
Arayan Singh
To tylko ogólna uwaga na temat obsługi obiektów w informatyce. Gdy masz pewność, że obiekty podlegają mocy 2 reguł, można je łatwo i bezpiecznie zarządzać przez drzewa wyszukiwania binarnego, zmiany binarne itp. Jeśli nie masz pewności, może być konieczne wykonanie dodatkowych testów i bardziej skomplikowanego algorytmu. W każdym razie jest to trochę dalekie od początkowego pytania;)
jcm69
1

Cały pomysł polega na tym, aby całkowicie dopasować swoją mini-partię do CPU / GPU. Ponieważ wszystkie jednostki CPU / GPU mają pojemność dwóch, dlatego zaleca się, aby wielkość mini-partii była równa dwóm.

Ujjwal
źródło