In che modo il parallelismo dei tensori suddivide l’inferenza dell’IA locale tra più GPU?

Eva Wong è la Technical Writer e smanettatrice residente di ZimaSpace. Una geek da sempre con una passione per homelab e software open-source, si specializza nel tradurre concetti tecnici complessi in guide accessibili e pratiche. Eva crede che l'auto-ospitare debba essere divertente, non intimidatorio. Attraverso i suoi tutorial, dà potere alla comunità di demistificare le configurazioni hardware, dalla costruzione del loro primo NAS al dominio dei container Docker.

Il parallelismo tensoriale suddivide l’inferenza locale dell’IA dividendo i grandi tensori dei pesi all’interno di ogni livello del trasformatore tra più GPU e combinando i risultati parziali.

È diverso dall’assegnare a ogni GPU una richiesta separata o dall’assegnare livelli diversi a dispositivi diversi. Ogni GPU che partecipa al parallelismo tensoriale contribuisce allo stesso livello, spesso a ogni token generato. Questo approccio può consentire a un modello di distribuirsi su più GPU domestiche, ma trasforma la comunicazione tra GPU in parte del percorso critico dell’inferenza.

Il parallelismo tensoriale suddivide un livello invece di copiare l’intero modello

Il parallelismo dei dati assegna a ogni GPU una copia del modello e suddivide le richieste o i batch. Il parallelismo tensoriale fa l’opposto per un singolo modello: divide i grandi tensori dei parametri all’interno dei singoli livelli tra i dispositivi.

NVIDIA NeMo definisce il TP come la distribuzione del tensore dei parametri di un singolo livello tra le GPU. Ogni GPU conserva solo una porzione della matrice interessata.

È utile quando un modello, o persino un singolo livello di grandi dimensioni, non entra comodamente in una sola GPU domestica.

Le porzioni per colonne e per righe suddividono il lavoro della moltiplicazione tra matrici

I livelli dei trasformatori contengono grandi proiezioni lineari. Una suddivisione parallela per colonne assegna colonne di output diverse a GPU diverse, mentre una suddivisione parallela per righe assegna righe di input o intervalli di caratteristiche diversi.

Il tutorial sul parallelismo tensoriale di PyTorch applica stili di parallelismo per righe e per colonne ai livelli dei trasformatori. Ogni rank calcola un prodotto tra matrici parziale usando la propria porzione dei pesi.

Il modello rappresenta comunque un unico livello logico. La suddivisione modifica il punto in cui vengono eseguite le parti dei calcoli e il modo in cui vengono combinati i risultati parziali.

La comunicazione collettiva ricostruisce l’output logico del livello

Poiché ogni GPU vede solo una parte del tensore, alcune operazioni richiedono all-reduce, all-gather, reduce-scatter o collettive equivalenti prima che il calcolo successivo disponga della rappresentazione necessaria.

Open MPI definisce AllReduce come la combinazione dei valori tra i processi e la distribuzione del risultato a tutti i partecipanti. I runtime con parallelismo tensoriale utilizzano questo tipo di collettiva, insieme ad all-gather e reduce-scatter, per ricostruire o ridistribuire i risultati dei livelli suddivisi.

Su una workstation domestica, la qualità del collegamento tra GPU può determinare se la suddivisione consente di risparmiare tempo o aumenta soltanto la capacità.

Le interconnessioni veloci sono importanti perché la comunicazione avviene a ogni livello

Il parallelismo tensoriale può richiedere più operazioni collettive per ogni blocco del trasformatore e per ogni token generato. I sistemi basati solo su PCIe offrono una larghezza di banda tra peer molto inferiore rispetto ai fabric per acceleratori di fascia alta progettati per grandi carichi distribuiti.

AMD RCCL documenta il trasporto peer-to-peer per le GPU collegate tramite PCIe. La libreria per le operazioni collettive varia a seconda della piattaforma, ma lo stesso vincolo topologico rimane valido.

Due GPU con una quantità complessiva di VRAM sufficiente possono eseguire correttamente un modello più grande, offrendo però una velocità di generazione dei token inferiore alle attese perché ogni livello attende la sincronizzazione.

Le GPU non omogenee possono fare sì che sia la porzione più lenta a determinare il ritmo

Un livello con parallelismo tensoriale procede solo dopo l’arrivo dei risultati parziali richiesti. Se una GPU ha una velocità di calcolo inferiore, una larghezza di banda della memoria minore o un collegamento più lento, il rank più veloce può trascorrere del tempo in attesa.

La funzionalità di inferenza con parallelismo tensoriale automatico di DeepSpeed è progettata per suddividere il modello all’interno di un gruppo di processi per l’inferenza. L’efficienza pratica presuppone che i dispositivi partecipanti possano svolgere una quantità di lavoro equilibrata.

Una raccolta di GPU domestiche miste può comunque essere utile per far entrare il modello, ma dimensioni uguali delle porzioni non sono automaticamente ottimali quando l’hardware presenta differenze sostanziali.

Scegli il parallelismo tensoriale per i livelli ampi e quando la memoria di una singola GPU è insufficiente

Il caso più indicato è quello di un modello le cui grandi dimensioni nascoste e i tensori dei livelli devono essere suddivisi tra più GPU, soprattutto quando i dispositivi dispongono di un’interconnessione locale veloce. Non è automaticamente il modo migliore per gestire diverse richieste indipendenti di piccole dimensioni.

L’articolo di ZimaSpace sulla pianificazione della memoria per gli acceleratori di IA locali fornisce il riferimento di capacità; il parallelismo tensoriale modifica questo riferimento distribuendo i livelli di un singolo modello tra i dispositivi.

Quando possibile, esegui il benchmark su una GPU, poi su due o più GPU usando lo stesso modello, prompt, contesto e batch. Registra la memoria per GPU, i token al secondo, la latenza, il tempo delle operazioni collettive e l’utilizzo del collegamento.

L’articolo di ZimaSpace sulla pressione dell’IA locale multiutente offre il confronto dal punto di vista del servizio: il TP estende un modello su più dispositivi, mentre la concorrenza delle richieste determina quanti contesti indipendenti competono per quel modello distribuito.

Hub Tecnologico e AI

Altro da leggere

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.