Hoe verdeelt tensorparallelisme lokale AI-inferentie over meerdere GPU's?

Eva Wong is de Technisch Schrijver en en vaste knutselaar bij ZimaSpace. Een levenslange geek met een passie voor homelabs en open-source software, zij is gespecialiseerd in het vertalen van complexe technische concepten naar toegankelijke, praktische handleidingen. Eva gelooft dat zelf-hosting leuk moet zijn, niet intimiderend. Met haar tutorials stelt ze de community in staat om hardware-setup te ontrafelen, van het bouwen van hun eerste NAS tot het beheersen van Docker-containers.

Tensorparallelisme splitst lokale AI-inferentie door grote gewichtstensors binnen elke transformerlaag over meerdere GPU's te verdelen en hun gedeeltelijke resultaten te combineren.

Dat verschilt van elke GPU een afzonderlijk verzoek geven of verschillende lagen aan verschillende apparaten toewijzen. Elke tensorparallelle GPU neemt deel aan dezelfde laag, vaak bij elk gegenereerd token. Deze aanpak kan ervoor zorgen dat een model over meerdere thuis-GPU's past, maar maakt communicatie tussen GPU's onderdeel van het kritieke inferentiepad.

Tensorparallelisme splitst één laag in plaats van het hele model te kopiëren

Dataparallelisme geeft elke GPU een modelkopie en verdeelt verzoeken of batches. Tensorparallelisme doet voor één model het tegenovergestelde: het verdeelt grote parametertensors binnen afzonderlijke lagen over meerdere apparaten.

NVIDIA NeMo definieert TP als het verdelen van de parametertensor van een afzonderlijke laag over GPU's. Elke GPU bevat slechts een shard van de betreffende matrix.

Dit is nuttig wanneer één model of zelfs één grote laag niet comfortabel op één thuis-GPU past.

Kolom- en rijshards verdelen het werk van matrixvermenigvuldiging

Transformerlagen bevatten grote lineaire projecties. Bij een kolomparallelle splitsing worden verschillende uitvoerkolommen aan verschillende GPU's toegewezen, terwijl een rijparallelle splitsing verschillende invoerrijen of kenmerkbereiken toewijst.

De tensorparallellismehandleiding van PyTorch past rijgewijze en kolomgewijze parallelle stijlen toe op transformerlagen. Elke rank berekent een gedeeltelijk matrixproduct op basis van zijn lokale gewichtsshard.

Het model vertegenwoordigt nog steeds één logische laag. De splitsing verandert waar delen van de berekening plaatsvinden en hoe gedeeltelijke resultaten worden gecombineerd.

Collectieve communicatie reconstrueert de logische uitvoer van de laag

Omdat elke GPU slechts een deel van de tensor ziet, hebben sommige bewerkingen all-reduce, all-gather, reduce-scatter of vergelijkbare collectieve bewerkingen nodig voordat de volgende berekening over de vereiste representatie beschikt.

Open MPI definieert AllReduce als het combineren van waarden over processen en het terugverdelen van het resultaat naar alle deelnemers. Tensorparallelle runtimes gebruiken dit type collectieve bewerking, samen met all-gather en reduce-scatter, om resultaten van geshardde lagen te reconstrueren of opnieuw te verdelen.

Op een thuiswerkstation kan de kwaliteit van de verbinding tussen GPU's bepalen of splitsen tijd bespaart of alleen de capaciteit vergroot.

Snelle interconnects zijn belangrijk omdat communicatie op laagniveau plaatsvindt

Tensorparallelisme kan voor elk transformerblok en elk gegenereerd token meerdere collectieve bewerkingen vereisen. Systemen die alleen PCIe gebruiken, hebben veel minder peerbandbreedte dan hoogwaardige acceleratorfabrics die zijn ontworpen voor grote gedistribueerde taken.

AMD RCCL documenteert peer-to-peertransport voor via PCIe verbonden GPU's. De exacte collectieve bibliotheek verschilt per platform, maar dezelfde topologische beperking blijft gelden.

Twee GPU's met voldoende gecombineerd VRAM kunnen een groter model succesvol uitvoeren en toch een lagere tokendoorvoer dan verwacht leveren, omdat elke laag op synchronisatie wacht.

Niet-overeenkomende GPU's kunnen ervoor zorgen dat de langzaamste shard het tempo bepaalt

Een tensorparallelle laag gaat pas verder wanneer de vereiste gedeeltelijke resultaten zijn aangekomen. Als één GPU een lagere rekendoorvoer, minder geheugenbandbreedte of een tragere verbinding heeft, kan de snellere rank tijd besteden aan wachten.

De automatische tensorparallelle inferentiefunctie van DeepSpeed is ontworpen rond het sharden van modellen over een inferentieprocesgroep. De praktische efficiëntie veronderstelt dat de deelnemende apparaten een evenwichtige hoeveelheid werk kunnen leveren.

Een gemengde verzameling thuis-GPU's kan nog steeds nuttig zijn om een model passend te maken, maar gelijke shardgroottes zijn niet automatisch optimaal wanneer de hardware aanzienlijk verschilt.

Kies tensorparallelisme voor brede lagen en beperkte capaciteit op één GPU

De sterkste toepassing is een model waarvan de grote verborgen dimensies en laagtensors over meerdere GPU's moeten worden verdeeld, vooral wanneer de apparaten een snelle lokale interconnect hebben. Het is niet automatisch de beste manier om meerdere onafhankelijke kleine verzoeken te verwerken.

Het artikel van ZimaSpace over geheugenplanning voor lokale AI-accelerators biedt de capaciteitsbasis; tensorparallelisme verandert die basis door de lagen van één model over meerdere apparaten te verdelen.

Benchmark indien mogelijk één GPU en daarna twee of meer GPU's met hetzelfde model, dezelfde prompt, context en batch. Noteer het geheugen per GPU, tokens per seconde, latentie, collectieve tijd en linkgebruik.

Het artikel van ZimaSpace over lokale AI-belasting voor meerdere gebruikers biedt de vergelijking voor servergebruik: TP laat één model over meerdere apparaten lopen, terwijl gelijktijdigheid van verzoeken bepaalt hoeveel onafhankelijke contexten concurreren om dat gedistribueerde model.

Tech & AI HUB

Meer om te lezen

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.