Tõhus ja kaasaskantav asjatundjate segu side
Ülevaade kaasaskantavast asjatundjate segu (MoE) sidest, mis keskendub GPU paralleelsuse optimeerimisele ja latentsuse vähendamisele suuremahulistes AI-mudelites
Esitleme suure jõudlusega, kaasaskantavat ja avatud lähtekoodiga teeki asjatundjate segu (MoE) side jaoks, mis tagab 10 korda kiirema jõudluse võrreldes standardsete All-to-All sidepritiividega.
Meie teostus sisaldab mitmeid peamisi tehnilisi uuendusi, mis tagavad suurepärase MoE side tõhususe:
GPU-algatatud side (IBGDA): toetab otsest GPU-st NIC-i sidet, vähendades oluliselt latentsust, jättes CPU kaasamise vahele
Side ja arvutuse kattumine: jagatud tuuma arhitektuur eraldi saatmis- ja vastuvõtuetappidega võimaldab arvutusprotsessil toimuda samaaegselt võrguülekannetega
Kiireim ühe sõlme jõudlus: 2,5 korda väiksem latentsus võrreldes seni kiireima teostusega ühesõlmelistes konfiguratsioonides
Tõhus ja kaasaskantav mitme sõlme jõudlus: meie teostus saavutab kiiruse, mis on kuni 10 korda kiirem kui standardne all-to-all side. Kuigi see on umbes 2 korda aeglasem kui kõrgelt spetsialiseeritud teostused, pakub meie lähenemine paremat kaasaskantavust NVSHMEM-i versioonide ja võrgukeskkondade (NVLink, CX-7 ja EFA) vahel
Teek on täielikult avatud lähtekoodiga ja saadaval aadressil https://github.com/ppl-ai/pplx-kernels.
Selles artiklis uurime eksperdiparalleelsuse väljakutseid suuremahulistes MoE mudelites ning kirjeldame oma lähenemist märkide tõhusale edastamisele ja kombineerimisele hajutatud GPU keskkondades.
Sissejuhatus
Asjatundjate segu (MoE) mudelid, nagu DeepSeek R1 ja Mixtral 8x7B, täiustavad tihedaid mudeleid, piirates iga märgi jaoks aktiveeritavate kaalude arvu. Selle asemel, et saavutada kõrge parameetrite arv kihtide arvu suurendamise või iga dekoodrikihi mitmekihilise perceptroni (MLP) lineaarsete kihtide suuruse suurendamise kaudu, asendavad MoE mudelid traditsioonilise MLP mitme eksperdi ja ruuteriga. Näiteks DeepSeek R1 671 miljardist parameetrist korrutatakse järelduse ajal antud märgiga ainult 37 miljardit. See vähendab oluliselt märgi dekodeerimiseks vajalike arvutuste hulka ja parandab latentsust võrreldes tiheda mudeliga.
MoE mudelid toovad järelduste tegemisel kaasa täiendavaid väljakutseid võrreldes tihedate mudelitega. Kuigi eksperdid ise on väikesed MLP kihid, sisaldab iga dekoodrikiht ruuterit, mis otsustab, millistele ekspertidele märk edastatakse, kusjuures iga märk edastatakse mitmele eksperdile. Ruuter on tavaliselt väike lineaarne kiht, mis toodab tõenäosusjaotust. Tavaliselt valitakse kõrgeima K-skooriga eksperdid ja lõplik aktiveerimine arvutatakse kaalutud keskmisena, liites ekspertide väljundid, mis on korrutatud ruuteri tõenäosusjaotusest tuletatud kaaluga.
Latentsuse minimeerimiseks hajutatud MoE süsteemides saab paralleelsust kasutada mitmes seadmes, kuid see toob kaasa sideväljakutsed. Mudelid nagu Mixtral 8x7B või Llama-70B mahuvad 8 seadmesse ühes sõlmes, saades kasu kiiretest ja madala latentsusega NVLink-ühendustest (kuni 900 Gbps). Suuremad mudelid nõuavad aga ekspertide killustamist mitme sõlme vahel, kasutades InfiniBandi (tipptasemel 400 Gbps), mis toob kaasa täiendavaid latentsusväljakutseid.
Selles artiklis uurime eksperdiparalleelsuse probleemi, kirjeldades meie GPU-tuumade teostust, mis edastavad märke tõhusalt määratud eksperte hoidvatele seadmetele ja koguvad need tagasi, arvutades ekspertide väljundite kaalutud summa. Kuigi eksisteerib agressiivselt optimeeritud teostusi, mis on suunatud konkreetsele võrguriistvarale, esitleme me väga kaasaskantavat teostust, mis põhineb minimaalsel NVSHMEM-i primitiivide komplektil, kuid tagab 10 korda kiirema jõudluse kui standardne all-to-all side. Meie teostus saavutab tipptasemel jõudluse ühesõlmelistes konfiguratsioonides, säilitades samal ajal suurepärase kaasaskantavuse erinevates võrgukeskkondades.
Killustamine ja paralleelsus
Tõhusaks järelduseks peavad mudeli kaalud asuma seadme mälus, jättes samal ajal piisavalt ruumi aktiveerimistele, KV vahemäludele ja muudele puhvritele, mida on vaja mudeli edasisuunamiseks. Võimekamad mudelid ületavad isegi kõige võimekamate GPU-de mahutavust, seega tuleb järelduste tegemine jagada mitme seadme vahel, mis suudavad kollektiivselt salvestada mudeli kaalusid. Kaalude killustamisskeemide põhjal tuleb arvutuste ja seadmete sünkroonimise delegeerimiseks kasutada erinevaid side- ja arvutusskeeme.
Eksperdiparalleelsus (EP), mida on illustreeritud esimesel joonisel, paralleeliseerib ainult eksperdiarvutust. Erinevad eksperdid on määratud erinevatele seadmetele, mis hoiavad nende kaale. Pärast ruutingut saadetakse märgid vastavasse seadmesse ning tulemused kogutakse ja akumuleeritakse pärast seda. Ruutingu keerukus sõltub paralleelsuse astmest mudeli teistes osades: teiste kihtide kopeerimine võib ruutingu vajaduse täielikult kaotada, kuna iga auaste saab valida märgid kohapeal kopeeritud ruutimistabelist. Kui aga ainult üks auaste teostab ruutingut, on märkide, indeksite ja kaalude oma vastavatele ekspertidele edastamiseks vaja ringhäälingut (broadcast). Lõpuks sünkroniseerib all-gather või all-to-all ringhääling väljundmärgid selle auastmega, mis jätkab mudeli täitmist. Selline teostus on suhteliselt lihtne, kuna torch pakub juba vajalikke primitiive, kuigi teatud eeliseid võib saavutada akumulatsiooni liitmisega ekspertidelt märke koguva kogumistoiminguga.
Ainult ekspertidele suunatud paralleelsus ei skaala ideaalselt, kuna klastris olevad sõlmed võivad jõude seisma, kui mudel käivitab mitteekspertide kihte, nagu tähelepanu, norm ja valim. Kuid nende kihtide, peamiselt tähelepanu, arvutamisest võib kasu lõigata ka tensorparalleelsus (TP). Enamik mudeleid tugineb mitme peaga tähelepanule, mis tähendab, et tähelepanupead ja nende vastavad Q-, K- ja V-projektsioonid saab samuti seadmete vahel killustada, kopeerides või kogudes viile erinevate kihtide vahel. Kui tähelepanu on jaotatud kõigi seadmete vahel, võib all-gather aktiveerimised sünkroniseerida, võimaldades ruutingut kopeerida, mis nõuab tõhusaks teostuseks eksperdiparalleelsuse juhtumiga sarnaseid sünkroonimisprimitiive. Sellel tasemel paralleelsusel on aga piirangud, kuna tähelepanupeade arvu vähendamine alla teatud künnise toob kaasa kahaneva tulu.
Kõigi seadmete parimaks ärakasutamiseks ja väga kõrge eksperdiparalleelsuse taseme toetamiseks kuni 128 või 256 GPU-ga on vaja andmeparalleelsust (DP). Selle skeemi kohaselt rühmitatakse seadmed, mille vahel mudel on jaotatud, päringute samaaegseks töötlemiseks, arvutades tähelepanu ja säilitades KV-vahemälusid, mis on jaotatud nende kohaliku rühma vahel. Mitmed selliste paralleelrühmade eksemplarid teevad eksperdihinnangute andmisel koostööd, millest igaüks majutab ekspertkaalude erinevat alamhulka. Lähtudes tähelepanupeade arvust, võib rühm tavaliselt ulatuda kuni terve sõlme suuruseni, kuna sõlmesisene suhtlus on kiirem. Näiteks ülaltoodud joonisel teenindab üks DP-aste iseseisvalt kahte päringut, A ja B, haldades päringute jaoks tähelepanu, normi ja muud arvepidamist. Teine DP-aste töötleb eraldiseisvat päringut C. Esimene sõlm majutab aga poolt ekspertidest ja teine sõlm teist poolt, seega võidakse pärast suunamist märgid A-st ja B-st saata teise sõlmesse ja vastupidi. See toob kaasa hajutatud sideprobleemi: iga seade võib saata suvalisele teisele sihtkohale erineva arvu märke. Olemasolevad primitive raamistikust torch, peamiselt all_to_all, ei sobi selleks kuigi hästi, kuna need võivad nõuda mingisugust täitmist või GPU-CPU sünkroonimist ja metaandmete ringhäälingut. Suhtluse tõhusaks rakendamiseks on vaja kohandatud tuumasid, et töödelda suunamisteavet ja algatada suhtlust seadmetest ilma CPU sekkumiseta. Pärast suunamist peab saatmistuum saatma märgid astmetele, kuhu need suunati, samas kui kombineerimise poolel tuleb praeguse DP-rühma päringutele kuuluvad aktiveeringud kokku koguda. Lisaks tuleb tööd tasakaalustada DP-rühmas, millel võib olla mitu seadet, et minimeerida ringhäälingut ja kopeerida märgid korrektselt kõigil astmetel järgmiste kihtide jaoks.
NVSHMEM
NVSHMEM on NVIDIA-spetsiifiline OpenSHMEM-i teostus, mis pakub kaasaskantavaid seadmetevahelisi sidevahendeid, mis abstraheerivad aluseks oleva riistvara keerukuse. API suudab väljendada seadmest seadmesse lugemist ja kirjutamist, mis on vastendatud üksikute transpordikihtide primitiividega. Toetatud on nii NVLink kui ka RDMA, mis tagab teatud määral kaasaskantavuse ja võimaldab NVSHMEM-i tuumadel töötada sõlmes või mitmest sõlmest koosnevas klastris. Oma tuumades kasutame andmete edastamiseks ja osalevate seadmete sünkroonimiseks kaugmälusse kirjutamise ja signaalimise toiminguid.
NVSHMEM-i toimingud on üles ehitatud sümmeetrilise mälu kontseptsioonile: need töötavad puhvritega, mis on eraldatud kõigis seadmetevahelises sides osalevates seadmetes. Kohalik seade saab toimingu sihtkoha määramiseks kasutada oma kohalikus puhvris tuletatud aadressi koos sihtkoha auastme indeksiga. Allolev joonis illustreerib seda kontseptsiooni: mõlemad GPU-d eraldavad sama suurusega sümmeetrilised puhvrid, säilitades nendele src-osutid. Esimene auaste soovib saata teisele 3 täisarvu, paigutades need puhvri algusse: nvshmem_int_put_nbi tuletab algaadressi kohalikust puhvrist, määrates sihtseadme. Teine auaste tuletab oma puhvrist nihke, saates esimesele seadmele ühe elemendi, nihutades seda ühe võrra. Kuigi sihtaadressid peavad alati olema sümmeetrilised puhvrid, mis on eraldatud funktsiooni nvshmem_alloc abil, võivad lähtepuhvrid olla seadme mälu meelevaldsed piirkonnad, eeldusel, et need on NVSHMEM-is eelregistreeritud.
Kuigi NVSHMEM pakub laia valikut primitiive, tuginevad meie tuumad ainult kolmele funktsioonile, ehitades neile kogu sünkroonimise ja piiramise.
nvshmemx_putmem_signal_nbi_warp: edastab andmeploki ühest seadmest teise, seades samal ajal kaugarvutis lipu. Toiming kas seab (NVSHMEM_SIGNAL_SET) või suurendab (NVSHMEM_SIGNAL_ADD) 64-bitist asukohta. Lippu värskendatakse pärast kogu mäluploki ülekandmist. Kui kaugarvuti märkas lipu muutumist, saab ta turvaliselt juurde pääseda oma mälu puhvrile. See funktsioon on kasulik andmeedastuse ja sünkroonimise ühendamiseks.
nvshmemx_signal_op töötab ühes mälukohas, tavaliselt 64-bitises lipus, seades või suurendades seda aatomiliselt. See on kasulik metaandmete saatmisel ja seadmete sünkroonimisel.
Funktsiooni nvshmem_uint64_wait_until kasutatakse signaali vastuvõtuotsas lipu küsitsemiseks (polling), kuni kaugseade seda värskendab.
Mis tahes järjestuse tagamine toimingute vahel funktsiooni nvshmem_quiet või nvshmem_fence kaudu on kallis, seega väldib meie tuumade teostus kõigi teiste NVSHMEM-i primitiivide kasutamist ja minimeerib sõltuvusi, mis erinevad üksikutest saatmise-vastuvõtmise paaridest. Andmete saatmisel kasutame alati funktsioonide mittekohustuslikku (non-blocking) versiooni, ootamata, et andmed isegi kohalikust auastmest välja saadetakse. Muu kaudne sünkroonimine tuumade rühmas tagab, et neid puhvreid ei kirjutata hävitavalt üle, samal ajal kui NIC-id vajavad neile juurdepääsu.
NVSHMEM kasutab GPUDirect RDMA-d, et NIC saaks otse lugeda ja kirjutada GPU mälu andmevahetuseks ilma protsessoreid kaasamata. Lisaks toetab NVSHMEM ConnectX NIC-idel GPU-algatatud sidet (tuntud ka kui InfiniBand GPUDirect Async ehk IBGDA), mis võimaldab GPU-l edastada RDMA-toiminguid otse NIC-ile ja küsitleda otse NIC-i täitmise järjekorda. Platvormidel, mis ei toeta GPU-algatatud sidet, loob NVSHMEM hosti CPU-s „puhverserveri“ lõime, et initsieerida side ja küsitleda täitmist GPU nimel. NVSHMEM-i programm on kaasaskantav sõltumata sellest, kas GPU-algatatud side on toetatud või mitte. GPU-algatatud side vähendab aga oluliselt latentsust, kuna see jätab CPU-le suunatud ringtee täielikult vahele.
Kaasaskantavad tuumad
Rakendame MoE side saatmise ja vastuvõtmise tuumade paari kaudu. Edastustuumad vastutavad märkide ja ruutimisteabe lugemise eest igas auastmes, saates need vastavatele ekspertidele. Kombineerimistuumad koguvad ekspertide toodetud aktiveerimised ja saadavad need tagasi oma lähteastmetele, arvutades samuti valitud ekspertide kaulutud keskmise ruuteri arvutatud kaalude põhjal. Tuumad on edasi jagatud saatmise ja vastuvõtmise komponendiks, et võimaldada andmeedastuse kattumist arvutustega. Saatmise tuumad on kõik blokeerimatud ja sünkroniseerimata: need lihtsalt edastavad kõik kirjutused kaugseadmetele. Teises otsas loevad kombineerimistuumad ainult mälust, oodates, kuni kõik vajalikud andmed on edastatud. Pärast töö edastamist NIC-idele, samal ajal kui andmeid edastatakse asünkroonselt võrgu kaudu, saavad GPU-d teha kohapeal muud kasulikku tööd, näiteks rakendada jagatud eksperte või arvutada tähelepanu.
Igal tuumade paaril on oma sümmeetrilised mälupuhvrid, kus iga auaste eraldab privaatse salvestusruumi andmete vastuvõtmiseks kõigist teistest auastmetest. Maksimaalne märkide arv, mida saab DP-rühmast edastada, on auastmete lõikes fikseeritud, mis määrab ka ülempiiri, mida iga auaste saab igalt DP-rühmalt iga kohaliku eksperdi jaoks vastu võtta. See võimaldab saatja auastmetel tuletada sihtkoha auastmes kirjutamiseks kordumatu aadressi, ilma et oleks vaja nende vahel sünkroonimist. Pärast andmete vastuvõtmist segavad tuumad märgid ümber, et paigutada need mällu optimaalses vormingus, mida vastuvõtvad tuumad nõuavad. Kuigi puhvritel on märkimisväärne mõõde, kasutatakse neid uuesti mudeli kõigis järjestikustes kihtides.
Ainus globaalse sünkroonimise vorm, nagu on näidatud ülaloleval joonisel, on rakendatud kombineerimise-vastuvõtmise tuumas. Kui andmed on saatmisest edastatud, naaseb auaste ja jätkab täitmist, kui see saab teistelt auastmetelt kõik vajalikud märgid, ning siseneb kombineerimise-saatmise tuumadesse niipea, kui neid töödeldakse. Tõke (barrier) kombineerimise-vastuvõtmise tuumas tagab, et ükski auaste ei saa ette liikuda ja alustada saatmise-edastamist (dispatch-send), samal ajal kui mõni teine auaste ootab endiselt andmete vastuvõtmist, mis võib põhjustada hävitava kattumise. Sünkroonimine tehakse lihtsuse huvides kombineerimistuumas, optimeerimisena võiks sama tõkke rakendada saadetise vastuvõtmise ja kombineerimise saatmise tuumade vahel, vähendades veelgi latentsust, andes NIC-idele rohkem aega ülekannete lahendamiseks, samal ajal kui GPU töötab muid tuumi.
Mõlemad tuumad on jagatud seadmete kõigi saadaolevate SM-ide vahel: samal ajal kui saatmise edastamise ja kombineerimise vastuvõtmise tuumad peavad paralleeliseerima auastmepõhise maksimaalse märkide arvu (max_m) alusel, peavad vastuvõtmise edastamise ja kombineerimise saatmise tuumad töötlema nii palju märke igast auastmest ja kohalikust eksperdist, maksimaalselt max_m * (num_experts // EP) * (EP // TP).
Edastamine (Dispatch)
Edastustuum vastutab märkide ja ploki skaleerimistegurite edastamise eest eakaaslastele, kes võõrustavad eksperte, kellele märgid suunati. Saatja pool tugineb kahe ülesande paralleeliseerimiseks lõime spetsialiseerumisele: ruutimisteabe agregeerimine, et teha kindlaks, mitu märki igast auastmest saadetakse, ja märkide pakendamine kaugseadmesse edastatavateks sõnumiteks. Vastuvõtja pool ootab esmalt kõigi märkide arvude vastuvõtmist, seejärel loeb ja pakib lahti jagatud mälu kasulikud koormused tensoriteks, mis edastatakse allavoolu rühmitatud GEMM-tuumadele. Samuti salvestab see teabe kombineerimistuumadega jagatud puhvritesse, et näidata, kuhu iga märk tuleks tagasi saata. See teave on vajalik, kuna vastuvõtutuum segab märgid piirnevates puhvrites ümber mittedeterministlikus järjekorras.
Saatja osas vastutab iga ploki üks 32 lõimest koosnev lõimemähis (warp) ruutimisteabe lugemise ja iga sihtekspeert sellelt auastmelt eeldatavasti vastu võetavate märkide arvu lugemise eest, saates arvu pluss üks, kasutades käsku nvshmem_signal_op. Arvu suurendatakse ühe võrra, kuna üleminek nullilt nullist erinevale kaugotsas tähistab allika auastme arvude kättesaamist. Paralleelselt teevad ülejäänud lõimemähised koostööd, et kopeerida märgid sümmeetrilisse mällu kõigis plokkides paralleelselt, pakkides aktiveerimised, skaleerimistegurid ja nende indeksi kohalikus auastmes külgnevaks tükiks. Indeksit nõuab kombineerimise saatja, et määrata aadress, kuhu märk kirjutatakse. Järgmisena, olles taganud, et kõik andmed on kopeeritud lõimemähise rühmade vahelise tõkke kaudu, tegutsevad lõimemähised taas iseseisvalt, saates igaüks sama puhvri erinevale eksperdile paralleelselt. Märgid saadetakse funktsiooni nvshmemx_putmem_signal_nbi_warp abil, mis suurendab ka aatomiliselt kohaliku auastme saadetud märkide arvu kaugseadmes. DP-rühma piires, kuna igal auastmel on saadetava märgi koopia, on edastamine ühtlaselt tasakaalustatud, kusjuures iga seade saadab välja alamhulga märkidest.
Vastuvõtuotsas sünkroonivad kõik tuumad esmalt saatja auastmetega, oodates märkide koguarvu ülesaatmist. Pärast seda ootavad nad kõik, kuni aatomiliselt suurendatud saadetud märkide arv stabiliseerub koguarvuni, mis näitab, et tänu putmem kutse semantikale on ka kõik lähteastmete kasulikud koormused saadetud. Tuumad küsitlevad arve funktsiooni nvshmem_uint64_wait_until abil, paralleeliseerides toimingu kõigi plokkide ja lõimede vahel. Seejärel tagab plokkidevaheline tõke, et ükski plokk ei loe puhvreid, välja arvatud juhul, kui kõik andmed on õigesti vastu võetud. Plokkide vahel jaotatud ja aatomiliselt suurendatud loenduri kaudu sünkroonitud märgid kopeeritakse sümmeetrilisest mälust tavalistesse külgnevatesse puhvritesse, millest saavad eksperte rakendavate allavoolu tuumade sisendid. Lähteaste, eksperdi indeks ja märgi indeks salvestatakse eraldi, määrates täpselt kindlaks asukoha, kuhu kombineerimistuum peab aktiveerimised saatma. Isegi kui DP-rühma sisemisi märke saadetakse erinevatest seadmetest, on need kõik rühmitatud, et anda need edasi vastavale eksperdile.
Kombineerimine (Combine)
Kombineerimistuumad jagunevad taas saatmise ja vastuvõtmise poolteks: saatjad kopeerivad kvantiseerimata 16-bitised aktiveerimised kaugseadmetele, vastuvõtutuumad ootavad andmete ülesaatmist ja arvutavad kõigi ekspertide panuste kaulutud keskmise kohapeal. Lisaks toimivad need ka tõkkena, et sünkroonida edastamise-kombineerimise jada: iga auaste seab saatmistuumadesse sisenemisel igale eakaaslasele lipu, kusjuures vastuvõtutuumadel ei lubata naasta, välja arvatud juhul, kui nad märkavad lipu seadmist. Sünkroonimise latentsus on minimaalne, kuna see kattub tegeliku side ja arvutusega.
Saatja poolel läbivad tuumad paralleelselt kõigile kohalikele ekspertidele määratud märkide loendi, kirjutades need sihtkohas asuvasse puhvrisse. Sihtaste, eksperdi indeks ja märgi indeks loetakse märkide kättesaamisel hajuti (scatter) tuumade poolt täidetud märgiohustest puhvritest. Igal saatjal on eksperdi kohta oma privaatne mälupiirkond, kuhu kirjutada, nagu on näidatud ülaloleval joonisel, vältides sünkroonimise vajadust. Sarnaselt edastamisega suurendab kombineerimine andmete vastuvõtmise tähistamiseks sihtkohas aatomiliselt märkide loendereid: kui loendur ühtib ekspertide arvuga, kellele märk edastati, pääseb märkide sisule juurde.
Vastuvõtutuumas läbitakse märkide loendit paralleelselt mitme ploki vahel, oodates nende sisu saabumist signaalimistoimingu seatud lipu küsitsemise teel. Saabumisel loetakse kasulikud koormused privaatsetest puhvritest, kusjuures ruutimistabel näitab, millist puhvrit lugeda ja milline kaal igale eksperdile määrata. Seejärel kirjutatakse tulemused väliselt eraldatud tensoritele, kusjuures tuum lõpetab täitmise, kui kõik seadmed on tõkke läbinud. DP-rühma ulatuses saavad kõik auastmed iga eksperdi aktiveerimise koopia oma koopiate arvutamiseks.
Võrdlusuuringud (Benchmarks)
Hindame oma tuumi 128 GPU-st koosneval klastril, mis on jaotatud 16 sõlme vahel, mis on ühendatud InfiniBandi ja CX-7 NIC-ide kaudu. Proovime nii GPUDirect Async (IBGDA) kui ka usaldusväärset ühendust (RC) CPU puhverserveriga. Võrdleme neid kõrgelt optimeeritud DeepSeeki teostusega, samuti PyTorchi (NCCL kaudu) või NVSHMEM-i pakutavate tihedate primitiividega.
Kuigi tiheda NVSHMEM-i all-to-all toimingu puhul on IBRC ja IBGDA jõudlus sarnane (6378 µs vs 6180 µs), on IBGDA hõredate tuumade puhul oluliselt kiirem. Lisades kokku edastamise ja kombineerimise, kasutab IBGDA 902 µs, samas kui IBRC võtab 3223 µs – see on 3,6-kordne latentsuse paranemine. Kuigi all-to-all on ribalaiusega piiratud, edastavad hõredad tuumad suurusjärgu võrra vähem andmeid, olles piiratud latentsusega. Käivitades võrguülekandeid otse GPU-st, ilma et oleks vaja protsessori puhverserverit GPU ja NIC-i koordineerimiseks, väheneb otsast-otsani latentsus oluliselt.
Kuigi meie kaasaskantavad tuumad on umbes 2 korda aeglasemad kui kõrgelt optimeeritud DeepSeeki tuumad, parandavad need latentsust 10 korda võrreldes tihedate tuumadega (902 µs vs 9944 µs).
Lisaks võimaldab jagunemine saatja-vastuvõtja komponentideks varjata osa latentsusest, erinevalt teegi primitiividest.
Ühesõlmelisel (EP8) kasutab NVSHMEM transportimiseks NVLINK-i, pakkudes madalamat latentsust ja suuremat läbilaskevõimet kui sõlmedevaheline võrk. Meie kaasaskantavad tuumad on ühesõlmelisel umbes 2,5 korda kiiremad kui DeepEP (186 µs vs 481 µs).
Täiendavad täiustused
Siin kirjeldatud tuumad ületavad ML-raamistike sisseehitatud primitiivide jõudlust ja pakuvad korralikku jõudlust ilma konkreetsete seadmetevaheliste transpordivahendite (nt NVLink või InfiniBand) jaoks ülespetsialiseerumata. Lisaks juba mainitud võimalustele on täiendav jõudluse kasv saavutatav sideteemade asendamisega spetsialiseerunud versioonidega. Näiteks NVLinki kaudu võiks sümmeetrilise mälu kasutamise asendada seadmete vahel jagatud puhvritega, kõrvaldades mõningase kopeerimise ja võimaldades peeneteralisemaid sünkroonimisskeeme üksikute märkide asemel märgipakettide kaupa. InfiniBandi kaudu võiks teostus pääseda otse juurde aluseks olevatele järjekorrapaaridele, välistades vajaduse edastada nii eeldatavaid kui ka saadetud märkide arvu ning tühjendada märgid järjekordadest väljundpuhvritesse nende saabumisel. Selliste teostustega kaasneb aga kaasaskantavuse hind, samas kui meie teostus võimaldab hinnata spetsiifiliste konfiguratsioonidega klastreid enne arendustööle pühendumist konkreetse riistvara optimeerimiseks.
Kokkuvõte
Oleme esitlenud suure jõudlusega ja kaasaskantavat teeki MoE side jaoks, mis saavutab 10 korda kiirema jõudluse võrreldes standardse all-to-all sidega, säilitades samal ajal ühilduvuse erinevate riistvarakonfiguratsioonidega. Ühesõlmelistes juurutustes NVLinkiga demonstreerib meie lahendus 2,5 korda madalamat latentsust kui eelmised teostused.
Meie lähenemine tasakaalustab jõudluse kaasaskantavusega peamiste uuenduste kaudu, mis hõlmavad GPU-algatatud side tugi, jagatud tuuma arhitektuuri, mis võimaldab arvutus-side kattuvust, ja tõhusat märkide edastamist minimaalsete NVSHMEM-i primitiivide abil. Kuigi mitmesõlmelistes häälestustes on meie teek umbes 2 korda aeglasem kui kõrgelt spetsialiseeritud teostused, pakub see suurepärast paindlikkust erinevates võrgukeskkondades (NVLink, CX-7 ja EFA).
Kuna MoE mudelid jätkavad mastaabisuurendust, muutuvad tõhusad sidevalikud, nagu meie oma, praktiliseks juurutamiseks üha olulisemaks. Meie täielikult avatud lähtekoodiga teostus on saadaval aadressil https://github.com/ppl-ai/pplx-kernels.
Viited
Tsitaat
@online{perplexity2025EfficientAndPortableMixtureOfExpertsCommunication,
author = {{Perplexity} and Nandor Licker and Lequn Chen and Phi Hoang},
title = {{Efficient and portable mixture-of-experts communication}},
date = {2025-04-02},
url = {https://perplexity.coolkeypoint.com/hub/blog/efficient-and-portable-mixture-of-experts-communication}
}