All-reduce
All-reduce to operacja komunikacji zbiorowej: łączy odpowiadające sobie elementy danych wszystkich uczestników, a wynik udostępnia każdemu z nich. Łączeniem może być suma, minimum albo maksimum. Rank oznacza uczestnika grupy; w typowym użyciu NCCL odpowiada mu GPU. Dokumentacja NCCL, Collective Operations definiuje zarówno redukcję, jak i odbiorców jej wyniku.

Każdy dokłada, każdy dostaje wynik
Trzy urządzenia mają wektory , oraz . All-reduce z sumowaniem daje na każdym urządzeniu. Wynik nadal ma dwie współrzędne. Sumujemy elementy na tych samych pozycjach, nie wszystkie liczby do jednego skalara.
To własny przykład arytmetyczny. Zmień pierwszą liczbę trzeciego urządzenia, a potem porównaj operacje:
- Reduce: wynik trafia tylko do wskazanego odbiorcy, tutaj rank 0.
- All-reduce: każdy otrzymuje ten sam wynik redukcji.
- All-gather: każdy otrzymuje wszystkie wejścia połączone w jeden większy bufor, bez ich sumowania.
Dlaczego LLM tego potrzebuje
W Tensor Parallelism urządzenia mogą sumować częściowe wkłady do wyniku warstwy. W synchronicznym Data Parallelism redukcja służy uzgadnianiu gradientów obliczonych na różnych danych. Suma nie jest jeszcze średnią: przy równych porcjach trzeba ją również podzielić przez liczbę uczestników.
NCCL wymaga zgodności liczby elementów i typu danych między uczestnikami danego kolektywu. Sam termin All-reduce nie wskazuje topologii sieci ani czasu wykonania. Reduce, po którym następuje Broadcast, ma tę samą semantykę; biblioteka może zrealizować ją innym algorytmem. Demonstracja pokazuje wynik operacji, bez modelowania transferów i ich kosztu.
Wykorzystuję treści generowane przez AI jako część mojego codziennego procesu nauki.