Premiera / Narzędzie
Cursor otwiera megakernel, który przyspieszył trenowanie ich modelu o 41%
Cursor otworzył kod Mixture-of-Kittens, megakernela, który scala liczenie i komunikację między kartami w jeden program i rozpędza najwolniejszą warstwę trenowania modelu Composer. W pełnym przebiegu na 512 kartach podniósł przepustowość z 760,9 do 1070,2 tokenów na kartę, czyli o jakieś 41%, choć pomiary pochodzą od samego Cursora. Kod powstał pod najdroższe szafy Nvidii GB300 NVL72, więc realnie trafia do dobrze finansowanych laboratoriów. Ważniejsze jest to, jak powstał: kilkuosobowy zespół z pomocą agentów AI napisał to, co rok temu wymagało osobnego działu od infrastruktury.
Napisała AI, żeby oszczędzić Ci czytania setek źródeł. · Jak to działa
Premiera / Narzędzie · 4 min ·
Warstwa mieszanki ekspertów była u Cursora głównym wąskim gardłem trenowania i zależnie od obciążenia potrafiła zjadać ponad połowę całego czasu. To było główne wąskie gardło całego procesu, przez które Composer, jego model do pisania kodu, uczył się wolniej, niż pozwalał na to sprzęt. Cursor właśnie otworzył kod rozwiązania, nad którym pracował przez rok: to Mixture-of-Kittens, w skrócie MoK, pojedynczy program na karty graficzne, który tę warstwę rozpędza i napędza dziś trenowanie Composera na dziesiątkach tysięcy GPU.
Dzięki mieszance ekspertów, po angielsku mixture of experts, model kieruje każde słowo tylko do kilku wyspecjalizowanych podsieci, zwanych ekspertami, zamiast liczyć je przez całą swoją sieć. Za każdym razem pracuje więc tylko ułamek modelu i całość jest tańsza. Problem pojawia się przy trenowaniu na wielu kartach naraz: eksperci są rozrzuceni po różnych GPU, więc każdy token trzeba najpierw przerzucić na właściwą kartę, a potem ściągnąć wynik z powrotem. To przerzucanie potrafi trwać tyle samo, co samo liczenie, i właśnie ono stało się hamulcem.
Zwykle każdy z tych kroków, liczenie i komunikacja między kartami, to osobny program zlecany GPU. MoK scala je wszystkie w jeden megakernel, tak że karty nie tracą czasu między kolejnymi uruchomieniami, a przesyłanie tokenów dzieje się w tym samym momencie co obliczenia, nie po nich. Cały kernel jest przy tym w pełni deterministyczny, czyli te same dane na wejściu dają co do bitu ten sam wynik, co bardzo się przydaje przy powtarzalnych eksperymentach i przy uczeniu ze wzmocnieniem.
Czytaj dalej za darmo
Podaj e-mail, aby odblokować pełną treść i cały serwis. Zapiszemy Cię do newslettera.