Skilvirk og meðfærileg samskipti fyrir mixture-of-experts
Yfirlit yfir meðfærileg samskipti fyrir Mixture-of-Experts (MoE) líkön, með áherslu á að hámarka samhliða vinnslu GPU og draga úr töf í stórum gervigreindarlíkönum
Við kynnum afkastamikið, meðfærilegt og opið forritasafn fyrir Mixture-of-Experts (MoE) samskipti sem nær 10 sinnum meiri afköstum miðað við staðlaða All-to-All samskiptagrunnvirkni.
Útfærsla okkar felur í sér nokkrar lykilatriði í tækninýjungum sem skila yfirburða skilvirkni í MoE samskiptum:
GPU-iniceraðar samskiptaaðgerðir (IBGDA): Styður bein samskipti á milli GPU og NIC, sem dregur verulega úr töf með því að framhjáfarast aðkomu CPU
Skörun samskipta og útreikninga: Skipt kjarnaarkitektúr með aðskildum sendingar- og móttökustigum gerir því kleift að útreikningar eigi sér stað á sama tíma og netflutningar
Hraðustu afköst á einum hnúti: 2,5 sinnum minni töf en áður hraðasta útfærslan á stillingum með einum hnúti
Skilvirk og meðfærileg afköst á mörgum hnútum: Útfærsla okkar nær allt að 10 sinnum meiri hraða en staðlaðar all-to-all samskiptaaðgerðir. Þrátt fyrir að vera um það bil 2 sinnum hægari en mjög sérhæfðar útfærslur, býður nálgun okkar upp á betri meðfærileika á milli NVSHMEM útgáfa og netumhverfa (NVLink, CX-7 og EFA)
Forritasafnið er alveg opið (open-source) og fáanlegt á https://github.com/ppl-ai/pplx-kernels.
Í þessari grein könnum við áskoranir sérfræðinga-samhliðunar í stórum MoE líkönum og lýsum nálgun okkar við skilvirka dreifingu og samsetningu tákna yfir dreifð GPU-umhverfi.
Inngangur
Mixture-of-Experts (MoE) líkön, eins og DeepSeek R1 og Mixtral 8x7B, bæta þétt líkön með því að takmarka fjölda þyngda sem eru virkjaðar fyrir hvert tákn. Í stað þess að ná háum fjölda stika með því að auka fjölda laga eða stækka línulegu lögin í Multi-Layer Perceptron (MLP) í hverju afkóðunarlagi, skipta MoE líkön hefðbundnu MLP út fyrir marga sérfræðinga og beini (router). Til dæmis, af þeim 671B stikum sem DeepSeek R1 hefur, eru aðeins 37B margfaldaðar með gefnu tákni við ályktun. Þetta dregur verulega úr magni útreikninga sem þarf til að afkóða tákn og bætir töf miðað við þétt líkan.
MoE líkön hafa í för með sér nokkrar frekari áskoranir við ályktun miðað við þétt líkön. Þó að sérfræðingarnir sjálfir séu lítil MLP-lög, þá inniheldur hvert afkóðunarlag beini sem ákveður hvaða sérfræðingum tákn er úthlutað til, þar sem hverju tákn er úthlutað á marga sérfræðinga. Beirinn er venjulega lítið línulegt lag sem skilar líkindadreifingu. Venjulega eru sérfræðingarnir með efstu K-einkunnirnar valdir og endanleg virkjun er reiknuð út sem vegið meðaltal, þar sem lagt er saman útkomur sérfræðinganna margfaldaðar með þyngd sem er fengin út frá líkindadreifingu beirisins.
Til að lágmarka töf í dreifðum MoE kerfum má nýta samhliða vinnslu yfir mörg tæki, en það kynnir samskiptaáskoranir. Líkön eins og Mixtral 8x7B eða Llama-70B komast fyrir í 8 tækjum á einum hnúti og njóta góðs af hröðum NVLink-tengingum með lítilli töf (allt að 900Gbps). Hins vegar krefjast stærri líkön þess að sérfræðingar séu hlutaðir niður (sharded) á marga hnúta með InfiniBand (sem nær hápunkti við 400Gbps), sem veldur frekari áskorunum varðandi töf.
Í þessari grein könnum við vandamálið við sérfræðinga-samhliðun og lýsum útfærslu okkar á GPU-kjörnum sem senda tákn á skilvirkan hátt til tækja sem hýsa úthlutaða sérfræðinga og safna þeim saman aftur með því að reikna út vegið summu úttaka sérfræðinga. Þó að til séu árásargjarnt fínstilltar útfærslur sem miða að tilteknum netvélbúnaði, kynnum við mjög meðfærilega útfærslu sem treystir á lágmarksfjöldi NVSHMEM-grunnvinnslu en skilar þó afköstum sem eru 10 sinnum hraðari en staðlaðar all-to-all samskiptaaðgerðir. Útfærsla okkar nær framúrskarandi afköstum á stillingum með einum hnúti á meðan hún viðheldur frábærum meðfærileika í ýmsum netumhverfum.
Niðurskipting og samhliða vinnsla
Fyrir skilvirka ályktun verður að geyma þyngdir líkansins í vinnusvæði tækisins, á meðan nægilegt pláss er látið eftir fyrir virkjanir, KV skyndiminni og önnur biðminni sem krafist er fyrir áframleiðslu í gegnum líkanið. Öflugustu líkönin fara yfir getu jafnvel öflugustu GPU-tækjanna, þess vegna verður að dreifa ályktun á mörg tæki sem geta sameiginlega geymt þyngdir líkansins. Byggt á niðurskiptingarkerfum þyngda þarf að nota mismunandi samskipta- og útreiðslukerfi til að fella útreikninga af höndum og samstilla tæki.
Sérfræðinga-samhliðun (EP), eins og sýnt er á fyrstu myndinni, samhliða vinnur aðeins útreikninga sérfræðinga. Mismunandi sérfræðingar eru úthlutaðir á mismunandi tæki sem hýsa þyngdir þeirra. Eftir beiningu eru tákn send í viðkomandi tæki og niðurstöðunum safnað saman og safnað upp á eftir. Flækjustig beiningar fer eftir gráðu samhliðunar í öðrum hluta líkansins: afritun annarra laga gæti eytt þörfinni fyrir beiningu alveg, þar sem hver staða (rank) getur valið táknin úr staðbundið afritaðri beiningartöflu. Hins vegar, ef aðeins ein staða framkvæmir beiningu, er krafist útsendingar (broadcast) til að senda tákn, vísitölur og þyngdir til viðkomandi sérfræðinga. Að lokum samstillir all-gather eða all-to-all útsending úttakstáknin við hvaða stöðu sem er sem heldur áfram framkvæmd líkansins. Slík útfærsla er tiltölulega einföld þar sem torch býður þegar upp á nauðsynlega grunnvinnslu, þó að hægt sé að ná einhverjum ávinningi með því að sameina uppsöfnun og söfnunaraðgerðina sem safnar táknunum frá sérfræðingunum.
Sérfræðinga-einangruð samhliða vinnsla skalast ekki fullkomlega, þar sem hnútar í klasa gætu verið aðgerðalausir á meðan líkaniðkeyrslan keyrir lög sem ekki eru sérfræðingar, svo sem athygli (attention), stöðlun (norm) og úrtak (sampling). Hins vegar geta útreikningarnir á þessum lögum, aðallega athygli, einnig notið góðs af tensor-samhliðun (TP). Flest líkön treysta á fjölhöfðaathygli, sem þýðir að athyglishausarnir og tilheyrandi Q, K og V vörpun þeirra geta einnig verið skipt niður á tæki, með því að afrita eða safna sneiðunum á milli ýmissa laga. Ef athygli er dreifð yfir öll tæki getur all-gather samstillt virkjanirnar, gert kleift að afrita beiningu og krafist samstillingargrunnvinnslu sem líkist tilfelli sérfræðinga-samhliðunar fyrir skilvirka útfærslu. Hins vegar eru takmörkunum bundið við þetta stig samhliðunar, þar sem fækkun á fjölda athyglisgagna niður fyrir ákveðið þröskuld gefur minnkandi ávinning.
Til að nýta öll tæki sem best og styðja við mjög mikla gráðu af sérfræðinga-samhliðun, allt að 128 eða 256 GPU-tæki, er krafist gagna-samhliðunar (DP). Samkvæmt þessu kerfi eru tækin sem líkani er skipt á hópum saman til að sinna beiðnum samtímis, reikna út athygli og viðhalda KV-skyndiminni skipt niður á staðbundinn hóp þeirra. Mörg tilvik af þessum samhliða hópum vinna saman að mati sérfræðinga, þar sem hvert hýsir mismunandi hlutmengi af þyngdum sérfræðinga. Miðað við fjölda athyglisgagna getur hópur venjulega spannað allt að stærð eins hnútar, þar sem samskipti innan hnútar eru hraðari. Til dæmis, á myndinni hér að ofan, þjónar ein DP staða sjálfstætt tveimur beiðnum, A og B, og sér um athygli, stöðlun og aðra bókhaldsvinnu fyrir beiðnirnar. Hin DP staðan vinnur úr sérstakri beiðni C. Hins vegar hýsir fyrsti hnúturinn helming sérfræðinga, en hinn hnúturinn hinn helminginn, þannig að eftir beiningu gætu tákn frá A og B verið sent á seinni hnútinn og öfugt. Þetta leiðir til dreifðra samskiptavandamála: hvert tæki gæti sent mismunandi fjölda tákna til hvaða annars áfangastaðar sem er. Núverandi grunnsendingar frá torch, aðallega all_to_all, henta ekki sérstaklega vel, þar sem þær gætu þurft einhvers konar fyllingu (padding) eða samstillingu á milli GPU og CPU og útsendingu lýsigagna. Til að útfæra samskipti á skilvirkan hátt er þörf á sérsniðnum kjörnum til að vinna úr beiningarupplýsingum og setja af stað samskipti frá tækjum án afskipta CPU. Eftir beiningu verður sendingarkjarni (dispatch kernel) að senda tákn á stöðurnar sem þau voru beind til, á meðan á samsetningarhliðinni verður að safna virkjunum sem tilheyra beiðnunum í núverandi DP hóp. Að auki verður að jafna vinnu innan DP hóps sem gæti haft mörg tæki, í þeim tilgangi að lágmarka útsendingu og afrita táknin rétt á öllum stöðum fyrir síðari lög.
NVSHMEM
NVSHMEM er sérstök OpenSHMEM útfærsla frá NVIDIA, sem veitir meðfærilega samskiptaaðstöðu milli tækja sem dregur saman flækjustig undirliggjandi vélbúnaðar. Forritaskil (API) geta tjáð lestur og skriftir milli tækja, sem eru vörpuð yfir á grunnvinnslu einstakra flutningslaga. Bæði NVLink og RDMA eru studd, sem veitir ákveðinn meðfærileika og gerir NVSHMEM-kjörnum kleift að starfa innan hnútar eða yfir klasa af mörgum hnútum. Í kjörnum okkar notum við fjarminnisskriftir og merkingaraðgerðir til að flytja gögn og samstilla tækin sem taka þátt.
NVSHMEM aðgerðir eru byggðar í kringum hugtakið samhverft minni: þær vinna á biðminni sem hefur verið úthlutað á öllum tækjum sem taka þátt í samskiptum milli tækja. Staðbundið tæki getur notað vistfang sem er dregið út innan eigin staðbundins biðminnis ásamt vísitölu markstöðu til að tilgreina áfangastað aðgerðar. Myndin hér að ofan sýnir þetta hugtak: báðir GPU-kjakar úthluta samhverfum biðminni af sömu stærð, og halda src ábendingum að þeim. Fyrsta staðan vill senda 3 heiltölur til hinnar seinni og staðsetja þær í upphafi biðminnisins: nvshmem_int_put_nbi leiðir upphafsveffangið frá staðbundna biðminninu og tilgreinir markstöðina. Seinni staðan leiðir út hliðrun (offset) frá sínu eigin biðminni og sendir eitt stak í fyrsta tækið með hliðrun um eitt. Þó að áfangastaðarvistföng verði alltaf að vera samhverf biðminni sem úthlutað er með nvshmem_alloc, geta upprunabiðminni verið geðþótta svæði í tækisminni, að því tilskildu að þau séu forskráð hjá NVSHMEM.
Þó að NVSHMEM bjóði upp á breitt úrval af grunntækjum, treysta kjarnar okkar á aðeins 3 föll, og byggja alla samstillingu og girðingar (fencing) á þeim.
nvshmemx_putmem_signal_nbi_warp: Flytur gagnablokk úr einu tæki yfir í annað, á meðan það stillir einnig fána (flag) á fjartækinu. Aðgerðin annað hvort stillir (NVSHMEM_SIGNAL_SET) eða eykur (NVSHMEM_SIGNAL_ADD) 64-bita staðsetningu. Fáninn er uppfærður eftir að öllum gagnablokknum hefur verið komið á áfangastað. Ef fjartækið sér breytingu á fönunni getur það öruggt nálgast biðminnið í sínu eigin minni. Þetta fall er gagnlegt til að sameina gagnaflutning og samstillingu.
nvshmemx_signal_op vinnur á einni minnisstaðsetningu, venjulega 64-bita fána, og stillir hann eða eykur atómískt. Það er gagnlegt til að senda lýsigögn og samstilla tæki.
nvshmem_uint64_wait_until er notað á móttökuhlið merkis til að kanna (poll) fána þar til fjartækið uppfærir hann.
Það er kostnaðarsamt að tryggja hvers kyns röðun á milli aðgerða í gegnum nvshmem_quiet eða nvshmem_fence, þess vegna kemur útfærsla okkar á kjörnum í veg fyrir notkun á öðrum NVSHMEM grunnvinnslum og lágmarkar allar háðir aðrar en stök sendingar-móttökupör. Þegar við sendum gögn notum við alltaf óblokkandi útgáfu af föllum, án þess að bíða eftir að gögnin séu einu sinni send út úr staðbundnu stöðunni. Önnur, óbein samstilling yfir hóp kjarna tryggir að þessum biðminnum sé ekki eyðilagt yfirskrifað á meðan NIC þurfa aðgang að þeim.
NVSHMEM notar GPUDirect RDMA þannig að NIC getur beint lesið og skrifað í GPU-minni fyrir gagnaflutning án þess að blanda CPU í málið. Þar að auki, á ConnectX NIC-tækjum, styður NVSHMEM GPU-iniceraðar samskiptaaðgerðir (einnig þekkt sem InfiniBand GPUDirect Async, eða IBGDA), sem gerir GPU kleift að senda RDMA-aðgerðir beint í NIC og kanna biðröð fyrir lokun (completion queue) hjá NIC beint. Á kerfum sem styðja ekki GPU-iniceraðar samskiptaaðgerðir býr NVSHMEM til „proxy“-þráð á hýsil-CPU til að hefja samskipti og kanna lokun fyrir hönd GPU. NVSHMEM forritið er meðfærilegt óháð því hvort GPU-iniceraðar samskiptaaðgerðir eru studdar eða ekki. Hins vegar draga GPU-iniceraðar samskiptaaðgerðir verulega úr töf vegna þess að þær sniðganga alveg krókvísina yfir á CPU.
Meðfærilegir kjarnar
Við útfærum MoE samskipti í gegnum par af sendingar- og móttökukjörnum. Sendingarkjarnarnir sjá um að lesa tákn og beiningarupplýsingar á hverri stöðu og senda þau til viðeigandi sérfræðinga. Samsetningarkjarnarnir safna virkjunum sem framleiddar eru af sérfræðingunum og senda þær aftur á upprunastað þeirra, á meðan þeir reikna einnig út vegið meðaltal frá völdum sérfræðingum miðað við þyngdir sem reiknaðar eru út af beirinum. Kjarnarnir eru ennfremur skiptir í sendingar- og móttökuhluta, til að leyfa gagnaflutningum að skarast við útreikninga. Sendingarkjarnarnir eru allir óblokkandi og ósamstilltir: þeir senda einfaldlega allar skriftir til fjartækja. Á hinum endanum lesa samsetningarkjarnarnir aðeins úr minni og bíða þar til öll nauðsynleg gögn hafa verið flutt. Eftir að hafa sent vinnu til NIC-tækja, á meðan gögnin eru flutt ósamstillt í gegnum vírinn, geta GPU-in gert aðra gagnlega vinnu staðbundið, svo sem að beita sameiginlegum sérfræðingum eða reikna út athygli.
Hvert par af kjörnum hefur sitt eigið samhverfa minnisbiðminni, þar sem hver staða úthlutar einkageymslu til að fá gögn frá öllum öðrum stöðum. Hámarksfjöldi tákna sem hægt er að senda frá DP hópi er fastur þvert á stöðurnar, sem setur einnig efri mörk fyrir það sem hver staða getur tekið við fyrir hvern staðbundinn sérfræðing frá hverju DP þrepi. Þetta gerir sendistöðum kleift að leiða út einstakt vistfang á áfangastaðarstöðunni til að skrifa í, án þess að krefjast samstillingar á milli þeirra. Eftir að gögn hafa borist stokka kjarnarnir táknin um til að raða þeim upp í minni í besta mögulega sniðinu sem móttökukjarnarnir krefjast. Þó að biðminnin hafi stóra stærð, eru þau endurnotuð í gegnum öll röðuð lög líkansins.
Eina form alheims samstillingar, eins og sýnt er á myndinni hér að ofan, er útfært í samsetningar-móttökukjarnanum. Þegar gögn eru send frá sendingu snýr staða aftur og heldur áfram framkvæmd þegar hún fær öll þau tákn sem hún þarf frá hinum stöðunum og fer inn í samsetningar-sendingarkjarnana um leið og þeim hefur verið unnið úr. Hindrunin (barrier) í samsetningar-móttöku tryggir að engin staða geti hlaupið á undan sér og byrjað sendingar-sendingu á meðan einhver önnur staða bíður enn eftir að fá gögn, sem gæti valdið eyðileggjandi skörun. Samstilling er gerð í samsetningar-kjarnanum til einföldunar; sem fínstilling gæti sama hindrun verið útfærð á milli móttöku-sendingar og samsetningar-sendingarkjarna, sem dregur enn frekar úr töf með því að gefa NIC-tækjum meiri tíma til að setja flutningana á meðan GPU keyrir aðra kjarna.
Báðir kjarnar eru skiptir yfir alla tiltæka SM-einingar tækjanna: á meðan sendingar-sendingar- og samsetningar-móttökukjarnarnir verða að vinna samhliða yfir hámarksfjölda tákna á hverja stöðu (max_m), verða móttöku-sendingar- og samsetningar-sendingarkjarnarnir að höndla þann fjölda tákna frá hverri stöðu og staðbundnum sérfræðingi, að hámörkum max_m * (num_experts // EP) * (EP // TP).
Sending (Dispatch)
Sendingarkjarninn sér um að senda tákn og blokkaskölunarþætti til jafningja (peers) sem hýsa sérfræðingana sem táknunum var beint til. Sendendamegin treystir kerfið á sérhæfingu vafnings (warp specialization) til að vinna tvö verkefni samhliða: að safna saman beiningarupplýsingum til að ákvarða hversu mörg tákn eru send frá hverri stöðu og pakka táknunum inn í skilaboð sem á að senda til fjartækja. Móttökumegin bíður kerfið fyrst eftir að allar táknatölur berist, les síðan og afpakkar gögnunum (payloads) úr sameiginlegu minni yfir í tensorana sem verða sendir áfram til niðurstreymis Grouped GEMM kjarna. Það geymir einnig upplýsingar í biðminni sem er deilt með samsetningarkjörnum, til að gefa til kynna hvar hverju tákn ætti að vera skilað til baka. Þessar upplýsingar eru nauðsynlegar þar sem móttökukjarninn stangar táknunum um í samfelldum biðminnum í óákveðinni röð.
Í sendandahlutanum sér stakur vafningur (warp) með 32 þráðum á hverri blokk um að lesa beiningarupplýsingarnar og telja fjölda tákna sem hver áfangastaðarsérfræðingur getur búist við að fá frá þessari stöðu, og sendir fjöldann auk eins með því að nota nvshmem_signal_op. Fjöldinn er aukinn um einn, þar sem breytingin úr núlli í ó-núll á fjarenda þýðir móttöku talninga frá upprunastöðu. Samhliða vinna eftirstandandi vafningar saman að því að afrita tákn í samhverft minni yfir allar blokkir samhliða, pakka virkjunum, skölunarþáttum og vísitölu þeirra á staðbundnu stöðunni inn í samfelldan hluta. Vísitalan er krafist af samsetningar-sendandanum til að ákvarða vistfangið þar sem táknið verður skrifað. Næst, eftir að hafatryggt að öll gögn hafi verið afrituð í gegnum hindrun yfir vafningahópana, starfa vafningarnir aftur sjálfstætt, þar sem hver sendir sama biðminni til mismunandi sérfræðings samhliða. Táknum er send með því að nota nvshmemx_putmem_signal_nbi_warp, sem eykur einnig atómískt fjölda senta tákna frá staðbundnu stöðunni á fjartækinu. Innan DP hóps, þar sem hver staða á afrit af tákninu sem á að senda, er sending jöfnuð jafnt, þar sem hvert tæki sendir út hlutmengi af táknunum.
Móttökumegin samstilla allir kjarnar sig fyrst við sendandastöðurnar með því að bíða eftir því að heildarfjöldi tákna sé sendur yfir. Eftir það bíða þeir allir eftir að atómískt auknir sentu táknatölur setjist að heildartölunum, sem gefur til kynna að öll gögn frá upprunastöðum hafi einnig verið send yfir, þökk sé málfræði putmem kallstengingarinnar. Kjarnarnir kanna tölurnar með nvshmem_uint64_wait_until, og samhliða keyrsluna yfir allar blokkir og þræði. Í kjölfarið tryggir þver-blokkahindrun að engin blokk lesi biðminnin nema öll gögn hafi borist rétt. Dreifð yfir blokkir og samstillt í gegnum atómískt aukinn teljara, eru táknin afrituð úr samhverfu minni yfir í regluleg samfelld biðminni sem verða inntök fyrir niðurstreymiskjarna sem útfæra sérfræðingana. Upprunastaða, vísitala sérfræðings og vísitala tákns eru geymd sérstaklega, sem staðsetur nákvæmlega hvar samsetningarkjarninn þarf að senda virkjanirnar. Jafnvel þó að tákn innan DP hóps séu send frá mismunandi tækjum, eru þau öll hópuð saman til að vera send áfram til viðkomandi sérfræðings.
Samsetning (Combine)
Samsetningarkjarnarnir eru aftur á móti skiptir í sendingar- og móttökuhluta: sendendurnir afrita ómagnaðar 16-bita virkjanir yfir í fjartækin, á meðan móttökukjarnarnir bíða eftir því að gögnin séu send yfir og reikna út vegið meðaltal allra framlaga sérfræðinga staðbundið. Að auki virka þeir einnig sem hindrun til að samstilla sendingar- og samsetningarröðina: hver staða stillir fána á hverjum jafningi við innkomu í sendingarkjarna, þar sem móttökukjörnum er ekki leyft að snúa aftur nema þeir sjá að fáninn er stilltur. Töf samstillingarinnar er í lágmarki, þar sem hún skarast við eiginleg samskipti og útreikninga.
Sendingarmegin fara kjarnarnir yfir lista yfir tákn sem úthlutað er til allra staðbundinna sérfræðinga samhliða, og skrifa þau í biðminni á áfangastaðarstöðunni. Markstaða, vísitala sérfræðings og vísitala tákns eru lesin úr biðminni á hvert tákn sem fyllt er út af dreifingarkjörnum við móttöku táknanna. Hver sendandi hefur sitt eigið einkaminnessvæði á hvern sérfræðing til að skrifa í, eins og sýnt er á myndinni hér að ofan, sem kemur í veg fyrir þörfina á samstillingu. Svipað og sending, eykur samsetning atómískt teljara á hvert tákn á áfangastaðarstöðunni til að gefa til kynna móttöku gagnanna: þegar teljarinn passar við fjölda sérfræðinga sem tákni var beint til, er hægt að nálgast innihald táknsins.
Í móttökukjarnanum er farið yfir lista yfir tákn samhliða yfir margar blokkir, beðið eftir að innihald þeirra berist með því að kanna fánann sem stilltur er af merkingaraðgerðinni. Við komu eru gögnin lesin úr einkabiðminnum, þar sem beiningartaflan gefur til kynna hvaða biðminni á að lesa úr og hvaða þyngd á að úthluta hverjum sérfræðingi. Niðurstöðunum er síðan skrifað í ytra úthlutaða tensorana, þar sem kjarninn klárar framkvæmd þegar öll tæki hafa farið í gegnum hindrunina. Yfir DP hóp fá allar stöður afrit af hverri virkjun sérfræðings til að reikna út sín eigin afrit.
Viðmiðunarpróf (Benchmarks)
Við metum kjarna okkar á klasa með 128 GPU-tækjum sem dreifðir eru yfir 16 hnúta sem eru tengdir í gegnum InfiniBand og CX-7 NIC-tæki. Við prófum bæði GPUDirect Async (IBGDA) og Reliable Connection (RC) með CPU-proxy. Við berum þau saman við mjög fínstilltu DeepSeek útfærsluna, sem og þéttu grunnsendingarnar frá PyTorch (í gegnum NCCL) eða NVSHMEM.
Þó að á þéttu NVSHMEM all-to-all aðgerðinni séu afköst IBRC og IBGDA svipuð (6378 µs á móti 6180 µs), er IBGDA verulega hraðar með dreifðu kjörnunum. Þegar lagt er saman sending og samsetning notar IBGDA 902 µs á meðan IBRC tekur 3223 µs - sem er 3,6 falda bót á töf. Þó að all-to-all sé takmarkað af bandbreidd, senda dreifðu kjarnarnir margfalt minni gögn og eru takmarkaðir af töf. Með því að koma af stað netflutningum beint úr GPU, án þess að krefjast CPU-proxy til að samstilla GPU og NIC, minnkar lokatöf (end-to-end latency) verulega.
Þó að meðfærilegir kjarnar okkar séu um það bil 2 sinnum hægari en mjög fínstilltu DeepSeek kjarnarnir, bæta þeir töf um 10 sinnum miðað við þéttu kjarnana (902 µs á móti 9944 µs).
Að auki gerir skiptingin í sendanda-móttökuhluta það einnig kleift að fela hluta af töfinni, ólíkt grunnvinnslu forritasafnsins.
Á einum hnúti (EP8) notar NVSHMEM NVLINK fyrir flutning, sem skilar minni töf og meiri afköstum en netkerfi á milli hnúta. Meðfærilegir kjarnar okkar eru um það bil 2,5 sinnum hraðari en DeepEP á einum hnúti (186 µs á móti 481 µs).
Frekari endurbætur
Kjarnarnir sem lýst er hér standa sig betur en innbyggðar grunnvinnslur vélbúnaðarramma (ML frameworks) og bjóða upp á viðunandi afköst án þess að sérhæfa sig umfram það sem þarf fyrir tiltekna flutninga á milli tækja, svo sem NVLink eða InfiniBand. Auk þeirra tækifæra sem þegar hafa verið nefnd er hægt að ná fram frekari afkastaaukningu með því að skipta samskiptagrunnvinnslunni út fyrir sérhæfðari útgáfur. Til dæmis, yfir NVLink, gæti notkun á samhverfu minni verið skipt út fyrir biðminni sem er deilt á milli tækja, sem eyðir einhverju afriti og leyfir fínni samstillingarkerfi, yfir einstök tákn í stað táknabunkar. Yfir InfiniBand gæti útfærsla nálgast undirliggjandi biðraðapör beint, sem eyðir þörfinni á að flytja bæði væntanlegar og sendar táknatölur og hreinsa tákn úr biðröðunum inn í úttaksbiðminni þegar þau berast. Hins vegar koma slíkar útfærslur á kostnað meðfærileika, á meðan útfærsla okkar gerir kleift að meta klasa með sérstökum stillingum áður en þróunarvinna er skuldbundin til að fínstilla fyrir tiltekinn vélbúnað.
Niðurstaða
Við höfum kynnt afkastamikið og meðfærilegt forritasafn fyrir MoE samskipti sem nær 10 sinnum meiri afköstum miðað við staðlaðar all-to-all samskiptaaðgerðir á meðan það viðheldur samhæfni yfir fjölbreyttar vélbúnaðarstillingar. Við útfærslur á einum hnúti með NVLink sýnir lausn okkar 2,5 sinnum minni töf en fyrri útfærslur.
Nálgun okkar jafnar afköst og meðfærileika í gegnum lykilnýjungar þar á meðal stuðning við GPU-iniceraðar samskiptaaðgerðir, skipta kjarnaarkitektúr sem gerir kleift að skara útreikningum og samskiptum, og skilvirka táknadreifingu með lágmarki NVSHMEM grunnvinnslu. Þó að vera u.þ.b. 2 sinnum hægari en mjög sérhæfðar útfærslur á uppsetningum með mörgum hnútum, býður forritasafn okkar upp á yfirburða sveigjanleika yfir ýmsum netumhverfum (NVLink, CX-7 og EFA).
Þar sem MoE líkön halda áfram að stækka, verða skilvirkar samskiptaaðferðir eins og okkar sífellt mikilvægari fyrir raunverulega uppsetningu. Fullkomlega opin (open-source) útfærsla okkar er fáanleg á https://github.com/ppl-ai/pplx-kernels.
Heimildir
Tilvitnun
@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}
}