Migliorare le Operazioni Sparse con la Libreria PopSparse
PopSparse migliora la velocità per le operazioni su matrici sparse sugli IPU di Graphcore.
― 6 leggere min
Indice
L'uso di modelli sparsi nel deep learning ha attirato molta attenzione. I modelli sparsi possono essere utili perché riducono la quantità di memoria e potenza di calcolo necessarie. Questo è particolarmente importante quando vogliamo eseguire reti neurali su larga scala in modo efficiente. I modelli sparsi funzionano riducendo il numero di pesi non zero nel modello, il che può abbattere i costi di archiviazione e calcolo. Tuttavia, sebbene sia facile vedere i benefici in termini di dimensione, è più difficile ottenere miglioramenti in velocità durante il calcolo. Questo è particolarmente vero su hardware comune come le GPU NVIDIA quando si usano formati a bassa precisione.
In questo documento, introduciamo PopSparse, una libreria progettata per eseguire operazioni sparse veloci su IPU Graphcore. PopSparse sfrutta le caratteristiche uniche delle IPU insieme a qualsiasi struttura a blocchi presente nei dati. Ci concentriamo su due tipi di sparsità: statica, dove il pattern di sparsità è fisso durante la configurazione; e dinamica, dove il pattern può cambiare durante ogni esecuzione del modello. Forniamo risultati che mostrano come PopSparse possa eseguire la Moltiplicazione di matrici più rapidamente delle operazioni dense tradizionali sulle IPU.
Comprendere la Sparsità
La sparsità nel deep learning si riferisce al metodo di riduzione dei pesi in un modello. Ad esempio, attraverso tecniche come il pruning, possiamo ridurre il numero di pesi nel modello, solitamente rimuovendo quelli che hanno poco impatto sui risultati finali. Queste metodologie possono portare a una riduzione fino al 90-99% nel numero di pesi senza compromettere gravemente l'accuratezza.
Anche se ridurre la dimensione del modello è relativamente semplice, ottenere i benefici della velocità è spesso più difficile. I calcoli sparsi possono essere complicati da implementare in modo efficace sull'hardware moderno, progettato per operazioni altamente parallele. Per questo motivo, molti metodi di addestramento efficienti potrebbero non portare a guadagni di velocità pratici durante l'esecuzione.
Ci sono vari metodi per promuovere la struttura nei modelli sparsi per adattarsi meglio alle capacità hardware. Ad esempio, tecniche di pruning strutturato possono raggruppare il pattern di sparsità in blocchi, canali o neuroni. Tuttavia, questi metodi strutturati spesso comportano un costo in termini di prestazioni rispetto ai metodi non strutturati.
Libreria PopSparse
PopSparse è sviluppata per migliorare la velocità della moltiplicazione di matrici sparse sulle IPU Graphcore. Le IPU hanno alcuni vantaggi che aiutano ad accelerare le operazioni sparse. Per esempio, hanno una grande quantità di memoria veloce on-chip (SRAM), migliorando le prestazioni per operazioni che richiedono alta comunicazione. Inoltre, il modello di elaborazione a grana fine delle IPU suddivide i compiti su numerose unità di calcolo indipendenti, permettendo di eseguire un alto grado di compiti paralleli.
Per valutare le prestazioni di PopSparse, conduciamo test sia per le moltiplicazioni di matrici sparse statiche che dinamiche. Ogni modalità di sparsità ha caratteristiche diverse e si comporta in modo diverso a seconda della dimensione e densità delle matrici di input.
Sparsità Statica
Nella sparsità statica, il pattern dei pesi non zero è noto al momento della configurazione del programma. Durante questa fase di configurazione, i pesi non zero sono distribuiti tra le partizioni della matrice. Poiché questa distribuzione è predefinita, c'è poco bisogno di scambio di dati durante il calcolo, portando a un uso efficiente dell'IPU. Ogni tile, o unità di elaborazione, gestisce la propria parte dei pesi non zero senza dover comunicare in modo estensivo con altri tiles.
Sparsità Dinamica
La sparsità dinamica consente maggiore flessibilità. In questa modalità, il numero totale di pesi non zero è noto, ma la loro distribuzione specifica può cambiare ogni volta che il modello viene eseguito. Sebbene questo aggiunga un certo carico computazionale, offre un livello di adattabilità che può essere utile per determinate attività. Tuttavia, sono necessari passaggi aggiuntivi per distribuire e elaborare i pesi, il che può rallentare le prestazioni rispetto alla sparsità statica.
Benchmarking e Risultati
Per esplorare le prestazioni di PopSparse, confrontiamo la sua velocità rispetto ai metodi tradizionali di moltiplicazione di matrici dense sia su IPU che su GPU. Vari parametri vengono testati per identificare le configurazioni che danno i migliori risultati.
Prestazioni della Matrice Densa
Quando confrontiamo le operazioni di matrice densa, scopriamo che con batch size più grandi, le prestazioni di IPU e GPU sono comparabili in formati a bassa precisione. Tuttavia, per batch size più piccoli, l'IPU tende a performare meglio. La flessibilità offerta dalla SRAM consente di gestire il movimento dei dati in modo più efficiente rispetto alle GPU, che possono avere difficoltà in condizioni simili.
Prestazioni della Matrice Sparsa
Le prestazioni delle configurazioni di sparsità statica e dinamica sull'IPU mostrano risultati promettenti. In generale, la sparsità statica supera la sparsità dinamica. Detto ciò, entrambe le modalità di operazioni sparse offrono prestazioni migliori rispetto alle operazioni dense, soprattutto quando le matrici di input sono grandi con dimensioni di blocchi significative.
I nostri esperimenti rivelano che le implementazioni sparse su IPU possono superare le operazioni dense, specialmente in condizioni specifiche: bassa densità di pesi non zero, dimensioni di blocchi più grandi e dimensioni di caratteristiche maggiori. Questo rende PopSparse un'opzione favorevole per molti scenari di deep learning.
Confronto con GPU
Quando guardiamo alle prestazioni della GPU insieme ai risultati dell'IPU, vediamo che le GPU possono avere difficoltà con densità più basse di pesi non zero. Anche se funzionano bene nel complesso, la loro efficienza può diminuire rispetto alle operazioni ottimizzate di PopSparse sull'IPU.
Conclusione
PopSparse aumenta efficacemente le prestazioni della moltiplicazione di matrici sparse sulle IPU, offrendo un vantaggio competitivo rispetto ai metodi densi tradizionali e alle implementazioni GPU. Abbiamo stabilito che la sparsità statica può portare a significativi miglioramenti di velocità mantenendo un carico inferiore rispetto alla sparsità dinamica. Questo lavoro evidenzia il potenziale della sparsità strutturata come metodo per migliorare la velocità e l'efficienza nelle operazioni delle reti neurali.
L'esplorazione della sparsità a blocchi e la sua applicazione nei modelli di deep learning promettono di favorire future ricerche e sviluppo in quest'area. Dimostrando come la sparsità a blocchi statica possa accelerare l'inferenza delle reti neurali, speriamo di stimolare ulteriori indagini su algoritmi e applicazioni di pruning sparse efficienti nel machine learning.
Lavori Futuri
Guardando avanti, puntiamo a mostrare come la sparsità a blocchi statica possa migliorare effettivamente l'inferenza di grandi modelli sulle IPU. Questo comporterà il raggiungimento di alta efficienza di memoria mantenendo le prestazioni computazionali. In generale, l'uso della sparsità strutturata potrebbe diventare una parte fondamentale per migliorare l'efficienza dei modelli di deep learning in futuro.
Titolo: PopSparse: Accelerated block sparse matrix multiplication on IPU
Estratto: Reducing the computational cost of running large scale neural networks using sparsity has attracted great attention in the deep learning community. While much success has been achieved in reducing FLOP and parameter counts while maintaining acceptable task performance, achieving actual speed improvements has typically been much more difficult, particularly on general purpose accelerators (GPAs) such as NVIDIA GPUs using low precision number formats. In this work we introduce PopSparse, a library that enables fast sparse operations on Graphcore IPUs by leveraging both the unique hardware characteristics of IPUs as well as any block structure defined in the data. We target two different types of sparsity: static, where the sparsity pattern is fixed at compile-time; and dynamic, where it can change each time the model is run. We present benchmark results for matrix multiplication for both of these modes on IPU with a range of block sizes, matrix sizes and densities. Results indicate that the PopSparse implementations are faster than dense matrix multiplications on IPU at a range of sparsity levels with large matrix size and block size. Furthermore, static sparsity in general outperforms dynamic sparsity. While previous work on GPAs has shown speedups only for very high sparsity (typically 99\% and above), the present work demonstrates that our static sparse implementation outperforms equivalent dense calculations in FP16 at lower sparsity (around 90%). IPU code is available to view and run at ipu.dev/sparsity-benchmarks, GPU code will be made available shortly.
Autori: Zhiyi Li, Douglas Orr, Valeriu Ohan, Godfrey Da costa, Tom Murray, Adam Sanders, Deniz Beker, Dominic Masters
Ultimo aggiornamento: 2023-04-05 00:00:00
Lingua: English
URL di origine: https://arxiv.org/abs/2303.16999
Fonte PDF: https://arxiv.org/pdf/2303.16999
Licenza: https://creativecommons.org/licenses/by-sa/4.0/
Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.
Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.