Back to archive
#ai#llm#glossary#aigen

All-gather

Dane są podzielone między trzy urządzenia. Każde ma inny fragment, a następne obliczenie wymaga u każdego kompletu. Potrzebujesz zebrać wszystkie części, zachowując ich zawartość i ustaloną kolejność.

All-gather przekazuje fragmenty wszystkich uczestników tak, że każdy otrzymuje ich połączoną kopię. W opisywanym NCCL kolejność wynika z ranku, czyli numeru uczestnika w grupie komunikacyjnej.

Dla fragmentów [1, 4], [2, −1] i [3, 2] każdy otrzyma [1, 4, 2, −1, 3, 2]. Dwie wartości 2 pozostają dwoma elementami. Operacja niczego nie sumuje, nie usuwa powtórzeń i nie sortuje liczb.

Zebranie kompletu wymaga komunikacji i pamięci na pełny wynik. All-reduce z sumą dałby zamiast tego [6, 5]. Po Reduce-scatter All-gather może odtworzyć cały już połączony wynik z jego części.

Mechanizm i szczegóły

Jeśli trzy ranki wysyłają po dwie liczby, każdy otrzymuje sześć. Fragment ranku 0 jest pierwszy, ranku 1 drugi, ranku 2 trzeci. Taką semantykę określają NCCL, sekcja AllGather oraz API ncclAllGather: początek fragmentu ranku i ma offset i × sendcount.

Na trzech stojakach powtarza się ten sam uporządkowany zestaw osobnych kart z liściem, półksiężycem i falą.

Te same części u wszystkich

Własny przykład:

RankWysyłany fragmentWynik na każdym ranku
0[1, 4][1, 4, 2, −1, 3, 2]
1[2, −1][1, 4, 2, −1, 3, 2]
2[3, 2][1, 4, 2, −1, 3, 2]

Dwie wartości 2 pozostają dwoma elementami. All-reduce z sumą dałby zamiast tego [6, 5] — dwie sumy odpowiadających sobie pozycji.

W demonstracji karty A, B i C zachowują swoje dane. Zamień przypisanie ranków 0 i 2: wynik zmieni kolejność fragmentów, choć nie zmienisz żadnej liczby. To zmiana numeracji uczestników, nie symulacja fizycznej drogi przesyłania danych.

Co umożliwia, a czego nie robi

Reduce-scatter może zostawić na każdym ranku inny fragment zredukowanego bufora. All-gather zbiera te fragmenty; przy zgodnym podziale takie złożenie daje wynik All-reduce. Jeśli zbierasz surowe fragmenty, otrzymujesz surowe fragmenty — samo All-gather nie uzgadnia gradientów.

W ZeRO jest potrzebne do zebrania rozdzielonych parametrów na czas obliczeń, co opisuje §7.2.2 pracy Rajbhandari et al.. Złożenie pełnego bufora chwilowo zwiększa pamięć odbiorcy. Operacja nie oznacza, że model stale przechowuje wszystkie parametry na każdym GPU.

W tym wariancie NCCL wszyscy wysyłają taką samą liczbę elementów tego samego typu. Równe rozmiary to warunek omawianego API; nie należy go bez sprawdzenia przenosić na warianty zbierające fragmenty o różnych długościach.

Wykorzystuję treści generowane przez AI jako część mojego codziennego procesu nauki.