Suure jõudlusega GPU mälu edastus AWS Sagemaker Hyperpodil

Teekond 3200 Gbps-ni

AutoridPerplexity Research

Moodne süvaõppe taristu nõuab sageli suurte andmemahtude edastamist masinate vaheliste graafikaprotsessorite (GPU-de) vahel. Perplexity's põrkusime unikaalse tehnilise probleemiga: kuidas edastada masinate vahel tõhusalt mitte-kontiguusseid GPU-mälu piirkondi võimalikult suure kiirusega. Meie sihtplatvorm, AWS-i p5 instantsid, pakub muljetavaldavat 3200 Gbps võrguriba laiust 32 võrgukaardi kaudu. See artikl jagab meie kogemust kohandatud suure jõudlusega võrgulahenduse loomisel, mis saavutab 97,1% sellest teoreetilisest ribalaiusest.

Tehniline väljakutse

Meie kasutusjuht esitas mitu peamist tehnilist nõuet:

  • Suure ribalaiusega andmeedastus kaug-GPU-de mitte-kontiguussete mäluplokkide vahel
  • Võime Kubernetes-i juurutustesse dünaamiliselt sõlme lisada või neid eemaldada jooksvat tööd katkestamata
  • Võrdõigusliku (peer-to-peer) suhtlusmustrite tugi

Kuigi NVIDIA NCCL raamatukogu on hajutatud süvaõppe de facto standard, polnud see meie kasutusjuhtumi jaoks ideaalne:

  • NCCL on suurepärane kollektiivses suhtluses, kuid eeldab staatilise "maailma" loomist, mis nõuab osalevate sõlmede kohandamisel kogu klastri taaskäivitamist.
  • NCCL-i sünkroonne suhtlusmudel lisab meie asünkroonsele töökoormusele keerukust
  • Soovisime optimeerimiseks otsest kontrolli oma mälu edastamise mustrite üle
  • Oma lahenduse ehitamine pakkus väärtuslikke õppimisvõimalusi

Kaasaegsed suure jõudlusega võrgud

Meie lahenduse mõistmiseks uurime kõigepealt, kuidas kaasaegsed suure jõudlusega võrgud erinevad traditsioonilisest võrgundusest.

Enamik võrke, mida me iga päev kasutame, põhineb TCP/IP protokollidel, kus rakendused suhtlevad võrgukaardiga operatsioonisüsteemi tuuma kaudu soklite (socket) abil. Suure jõudlusega võrgud kasutavad aga RDMA-d (Remote Direct Memory Access) – täiesti erinevat riist- ja tarkvarapaketti, mis võimaldab otsest mälu juurdepääsu masinate vahel ilma CPU-d kaasamata.

AWS pakub Elastic Fabric Adapterit (EFA), kohandatud võrguliidest, mis rakendab Amazoni kohandatud protokolli nimega Scalable Reliable Datagram (SRD). Erinevalt traditsioonilisest TCP/IP võrgundusest, kus andmeid tuleb mitu korda kopeerida kasutajaruumi, tuumaruumi ja võrgupuhvrite vahel, võimaldab EFA koos RDMA-ga otsest andmeedastust GPU mälu ja võrgukaardi vahel, möödudes CPU-st täielikult.

Suure jõudlusega võrgudisaini filosoofia

Suure jõudlusega võrgusüsteemide ülesehitamine nõuab mitme põhimõttelise eelduste ümbermõtestamist:

  1. Puhvri omandiõigus: Erinevalt traditsioonilistest soklitest, kus tuum haldab võrgupuhvreid ja nõuab kopeerimist kasutajaruumi ja tuumaruumi vahel, nõuab RDMA, et rakendused haldaksid oma puhvreid. Kui rakendus algatab võrguoperatsiooni, annab see puhvri omandiõiguse üle võrgukaardile kuni operatsiooni valmimiseni, mis välistab vajaduse andmete kopeerimise järele.
  2. Mälu registreerimine: Rakendused peavad registreerima mälupiirkonnad operatsioonisüsteemi tuumaga. Tuum seab sisse virtuaalaadresside vastendused, mis võimaldavad CPU-l, GPU-del ja võrgukaartidel kõigil mõista samu virtuaalaadresse. See registreerimine on ühekordne operatsioon, mis võimaldab järgnevaid nullkopeerimisega andmeedastusi.
  3. Juhttasand vs andmetasand: Suure jõudlusega võrgud jagavad operatsioonid kahte kategooriasse:
    1. Turvalisuse tagamiseks liiguvad juhttasandi operatsioonid (nagu ühenduse häälestus ja mälu registreerimine) läbi tuuma
    2. Andmetasandi operatsioonid (tegelik andmeedastus) lähevad maksimaalse jõudluse tagamiseks tuumast mööda
  4. Vastuvõtmine enne edastamist: Ilma tuumahaldusega puhvriteta peavad rakendused vastuvõtuoperatsioonid ette postitama, määrates ära, kuhu saabuvad andmed tuleks paigutada. See on põhimõtteline nihe soklimudelist, kus rakendused saavad andmeid vastu võtta igal ajal.
  5. Küsitluspõhine valmimine: Selle asemel, et oodata tuumamärguandeid mehhanismide kaudu nagu epoll, küsitlevad rakendused otse riistvara valmimisjärjekondi. See välistab süsteemikutsete lisakulud ja võimaldab viivitamatut reageerimist lõpetatud operatsioonidele.
  6. Riistvara topoloogia teadlikkus: Riistvara topoloogia mõistmine ja selle jaoks optimeerimine on maksimaalse jõudluse saavutamiseks ülioluline.

Riistvara topoloogia mõistmine

AWS-i p5 instantsidel on keerukas sisemine arhitektuur. Nagu allpool näidatud, sisaldab iga instants kahte CPU pesa, mis moodustavad kaks NUMA sõlme, kusjuures iga NUMA sõlm ühendub nelja PCIe lülitiga:

Süsteemi topoloogia kahe NUMA sõlme, kaheksa GPU ja 32 EFA liidesega.

Iga PCIe lüliti alt leiame:

  • Neli 100 Gbps EFA võrgukaarti
  • Ühe NVIDIA H100 GPU
  • Ühe NVMe SSD

TCP/IP ja RDMA edastuste andmete teed näitavad nende lähenemisviiside põhimõttelisi erinevusi:

TCP ja GPUDirect RDMA andmeedastusteed GPUde, kasutajaruumirakenduste, Linuxi tuumade ja võrguliideste vahel.

TCP/IP korral (vasakul küljel) tuleb andmeid mitu korda kopeerida:

  1. GPU mälust rakenduse puhvrisse kasutajaruumis
  2. Kasutajaruumi puhvrist tuumapuhvrisse
  3. Tuumapuhvrist võrgukaardile
  4. Vastuvõtval poolel toimub vastupidine protsess

Iga kopeerimisoperatsioon tarbib CPU tsükleid ja mälu ribalaiust. Samuti peab rakendus iga võrguoperatsiooni jaoks konteksti lülitama kasutajaruumi ja tuumaruumi vahel.

Seevastu RDMA (paremal pool) pakub tõelist nullkopeerimisega andmeedastust:

  1. Võrgukaart loeb otse GPU mälust
  2. Andmed liiguvad otse kaugvõrgukaardile
  3. Kaugvõrgukaart kirjutab otse sihtkohaks olevasse GPU mällu
  4. Rakendus peab lihtsalt kontrollima kasutajaruumis asuvat valmimisjärjekorda (CQ), et teada saada, millal edastus on lõppenud

RDMA ja õige riistvara sidumisega nõuab andmete edastamine kahe GPU vahel ainult kohaliku PCIe lüliti ja võrgu läbimist:

Paaris kohalikud ja kaug-GPUd, mis on ühendatud PCIe Gen5 x16 ja nelja 100 Gbit/s EFA lingi kaudu.

Seevastu TCP/IP edastused peavad andmeid põhimälu kaudu mitu korda kopeerima, mis põhjustab olulist PCIe siini ummistust:

TCP ülekannetest tingitud süsteemisiinide ülekoormus peamälu, protsessori, nelja PCIe kommutaatori ja nelja GPU vahel.

Ehitamine libfabricu abil

Kasutasime libfabricut – raamistikku, mis pakub üldist liidest kangateenuste jaoks. Meie rakendus kasutab kahte tüüpi RDMA operatsioone:

  • Kahepoolne RDMA (SEND/RECV) juhtimissõnumite jaoks, mis kannavad metaandmeid mälupiirkondade kohta (nt nihked ja suurused).
  • Ühepoolne RDMA WRITE tegeliku andmeedastuse jaoks, kus iga WRITE operatsioon haldab ühte kontiguusset mäluplokki.

Teekond tippjõudluseni

Meie arendus läbis mitu etappi:

  1. Rakendati põhilist ühesuunalist sõnumiedastust SEND/RECV abil
  2. Laiendati kahepoolsele suhtlusele
  3. Lisati GPUDirect RDMA WRITE otse GPU-de vaheliseks edastuseks
  4. Laiendatud mitme samaaegse edastuse käsitlemiseks
  5. Vastupidavuse tagamiseks võeti kasutusele operatsioonide järjekorda panemine
  6. Saavutati 97,4% ribalaiuse kasutus ühe võrgukaardi peal

32 võrgukaardile skaleerimisel rakendasime mitmeid olulisi optimeerimisi:

  1. Operatsioonide järjekorda panemine: Selle asemel, et operatsioone otse võrgukaartidele esitada, hoiame rakenduse tasemel järjekorda. See tagab vastupidavuse võrgu ummikutele ja lihtsustab programmeerimismudelit.
  2. Võrgu soojendamine: Ühenduste eelnev loomine parandas käivitusjõudlust.
  3. Mitmelõimelisus: Spetsiaalsed lõimed iga GPU võrguoperatsioonide jaoks.
  4. CPU tuumade sidumine: Lõimede sidumine konkreetsete CPU tuumadega, et vältida NUMA efekte ja vahemälu möödalaskmisi.
  5. Olekute killustamine (sharding): Lõimede vahelise konkurentsi vähendamine.
  6. Operatsioonide pakettimine: Mitme operatsiooni esitamine korraga.
  7. Laisk operatsioonide postitamine: Operatsioonid pannakse esmalt rakenduses järjekorda. Pärast valmimisjärjekorra pärimist proovime ootel olevad operatsioonid võrgukaardile esitada, tagades võrguressursside tõhusa kasutamise.
  8. NUMA-teadlik ressursside eraldamine: Eraldage libfabrici ressursid, nagu valmimisjärjekorrad, õiges NUMA sõlmes, et minimeerida mälule juurdepääsu latentsust.

Nende optimeerimiste abil saavutasime lõpliku jõudluse 3108 Gbps – 97,1% teoreetilisest maksimaalsest ribalaiusest.

Allolev video näitab meie käsureaprogrammi töös. See edastab GPU mälu mitte-kontiguusseid plokke kaugkonsoolile, saavutades edastuskiiruse 3108,283 Gbps – mis demonstreerib võrgutaristu peaaegu teoreetilist ribalaiuse kasutust:

Kokkuvõte

Suure jõudlusega võrgusüsteemi ülesehitamine eeldab nii riistvara arhitektuuri kui ka süsteemidisaini põhimõtete mõistmist. Kuigi sellised raamatukogud nagu NCCL pakuvad suurepäraseid lahendusi levinud mustrite jaoks, on spetsiifiliste nõuete jaoks mõnikord vaja kohandatud lahendusi.

Meie teekond näitab, et peaaegu teoreetilise võrgujõudluse saavutamine on võimalik süsteemi arhitektuurile, riistvara topoloogiale ja erinevatele optimeerimistehnikatele hoolika tähelepanu pööramisega. Võti pole mitte ainult üksikute komponentide mõistmises, vaid ka selles, kuidas nad tervikliku süsteemi moodustamiseks omavahel suhtlevad.

Selle teekonna täielik tehniline analüüs, sealhulgas rakendamise üksikasjad ja koodinäited, on saadaval meie avatud lähtekoodiga hoidlas.

Viide

BibTeX
@online{perplexity2025HighPerformanceGpuMemoryTransferOnAwsSagemakerHyperpod,
  author = {{Perplexity} and Lequn Chen and Phi Hoang},
  title = {{High-performance GPU memory transfer on AWS Sagemaker Hyperpod}},
  date = {2025-02-10},
  url = {https://www.perplexity.ai/hub/blog/high-performance-gpu-memory-transfer-on-aws-sagemaker-hyperpod}
}