Tätä olemme kokkailleet viimeiset 9 kuukautta: tee MoEs-harjoittelusta ~2x nopeammin ja ~2x vähemmän muistia! Kohokohdat: - MoE vie tyypillisesti eniten aikaa ja muistia nykyaikaisissa malleissa. Kävi ilmi, että MoE:n taaksepäin kulkemisen voi matemaattisesti kirjoittaa uudelleen vähentääkseen etuvetoisessa tilassa tallennettavaa aktivointimuistia ~2x:llä, jolloin samat gradientit ilman ylimääräistä matmul-uudelleenlaskentaa. Pidän tästä lopputuloksesta todella paljon, sillä se yhdistää sekä algoritmisia että systeemisiä oivalluksia. - Pullonkaulojen analysointi MoE-kerroksessa johtaa luonnolliseen optimointistrategiaan: vähennä muistin lukemisia/kirjoituksia mahdollisimman paljon! Syötteen kerääminen etuvetoon ja lähtötason valmistukseen bwd:lle voi joskus viedä yhtä paljon aikaa kuin ryhmitellyt GEMM:t. Fuse gather on ryhmitelty GEMM + päällekkäisyysmuistin käyttö ja laskenta, jotta koko kerros etenee ~2x nopeammin. - Top-k:n laskeminen asiantuntijareitityksessä voi kestää yllättävän kauan, ~15–20 % koko MoE-kerroksesta! Tavallinen top-k impl käyttää radix top-k -algoritmia, joka on hyvä suurelle k:lle mutta epäoptimaalisesti pienelle k:lle. Kirjoitimme top-k:n uudelleen bitonisella top-k algoritmilla, ja se on joskus 20–30 kertaa nopeampi kuin pytorchin top-k! Kaikki pääytimet on kirjoitettu Cute-DSL:llä, joten niiden pitäisi olla helppo laajentaa (ja asentaa :D). Hopper-jyvät ovat poissa, Blackwellin ytimet ovat melkein valmiita. MoE-mallit olivat aiemmin kaksi kertaa vähemmän laitteistotehokkaita kouluttaa, toivottavasti Sonic-MOE muuttaa tämän.