Nelle reti neurali profonde, sebbene si debbano eseguire operazioni elementari come moltiplicazioni ed addizioni, oltre a passare i risultati attraverso dei filtri e delle semplici funzioni non lineari, la numerosità e la complessità dei livelli mette in gioco un numero di pesi molto elevato.
La complessità della rete in termini di numero e tipo dei livelli, dimensione e numero dei filtri, numero dei canali e numero dei pesi presenti nel modello impattano i requisiti di memoria della topologia di rete. Invece il numero di operazioni di tipo moltiplicazione ed accumulazione (MAC) sono indicativi delle prestazioni che potrà raggiungere la rete in termini di throughput misurato come numero di operazioni svolte al secondo.
Le DNN (deep neural networks) che raggiungono decine di livelli possono richiedere l’elaborazione di un numero di pesi nell’ordine delle centinaia di milioni e un numero di decine di miliardi di operazioni di tipo MAC per ogni immagine elaborata. La complessità dei parametri delle DNN ci consente di capire quanto sia fondamentale introdurre modelli di computazione efficienti che sfruttino unità di elaborazione hardware per accelerare i calcoli.
In particolare, le elaborazioni svolte all’interno delle DNN sono altamente parallelizzabili e pertanto le architetture hardware ad elevato parallelismo, come le GPU (chip grafici), risultano particolarmente adatte ad accelerare i tempi di elaborazione.
Le principali soluzioni hardware per accelerare le reti neurali profonde sono basate su architetture di processori ad elevato parallelismo come Graphics Processing Unit (GPU) e Tensor Core e acceleratori hardware di tipo Field Programmble Gate Array (FPGA) e Application Specific Integrated Circuit (ASIC).
Architetture ad elevato parallelismo: GPU e Tensor Core
Le architetture vettoriali che si basano sul modello di computazione Single Instruction Multiple Data (SIMD) sono adatte a raggiungere alte prestazioni per carichi di lavoro caratterizzati da un massivo parallelismo dei dati soggetti alla stessa computazione. Tra le prime architetture SIMD apparse sul mercato troviamo le estensioni della famiglia di processori Intel per la gestione dello streaming (SSE) e l’estensione al calcolo vettoriale (AVX) che include istruzioni vettoriali specializzate per reti neurali (VNNI). In particolare, l’architettura AVX-512 rappresenta l’estensione SIMD a 512 bit dell’architettura Intel x86 proposta nel 2013 e implementata nella famiglia di processori Intel Xeon Phi (Knights Landing) introdotti sul mercato nel 2013 ed usati in supercalcolatori e nella successiva famiglia Xeon Skylake-X. Il principale vantaggio introdotto dall’architettura AVX-512 consiste nella compatibilità del codice sviluppato per processori x-86. Sebbene Intel abbia deciso nel 2018 di interromperne la produzione, la famiglia di processori Intel Xeon Phi è stata per molti anni il concorrente diretto delle GPU Nvidia e delle GP-GPU Radeon di AMD.
La famiglia di schede grafiche Radeon di AMD è stata creata per applicazioni nel campo del deep learning e videogiochi di fascia alta. Le ultime due generazioni architetturali della famiglia Radeon, Vega e Navi, sono state introdotte sul mercato rispettivamente nel 2017 e nel 2019.
Il modello di calcolo parallelo Single Instruction Multiple Thread (SIMT) viene adottato dalle unità di elaborazione grafica (GPU) che sono ampiamente utilizzate in molti ambiti applicativi grazie al modello di programmazione denominato Compute Unified Device Architecture (CUDA) di Nvidia. Tale modello consente ai programmatori di sfruttare l’elevato grado di parallelismo delle GPU per applicazioni general purpose (GP-GPU) così come esclusivamente per carichi di lavoro di elaborazione grafica.
Come nel caso delle funzionalità SIMD delle CPU, anche l’introduzione delle GP-GPU ha focalizzato l’attenzione della comunità del deep learning. Grazie al massiccio parallelismo disponibile nelle architetture GPU che consente di raggiungere un throughput molto elevato per l’elaborazione parallela dei thread di dati, l’introduzione delle GP-GPU è considerato uno dei fattori abilitanti dell’adozione e della popolarità di tecniche di deep learning.
L’importanza del deep learning
Negli ultimi anni, la popolarità e la diffusione dei modelli di tipo Deep Learning è cresciuta enormemente assieme alla dimensione e alla complessità dei modelli adottati. Le reti neurali usate nel Deep Learning sono indicate con il termine reti neurali profonde (Deep Neural Network) e si basano su topologie di rete multi-livello che possono variare da decine a centinaia di livelli nascosti. L’incremento nella profondità dei livelli nascosti di una rete neurale permette di incrementare l’accuratezza del modello.
Le reti neurali profonde (DNN) sono ampiamente utilizzate in molte applicazioni dell’intelligenza artificiale che richiedono elevate prestazioni come il riconoscimento e la classificazione delle immagini, la visione artificiale, il riconoscimento e l’analisi del parlato, l’elaborazione del linguaggio naturale, la robotica e la guida autonoma dei veicoli.
La fase di addestramento dei modelli deep learning richiede un’elevatissima potenza di calcolo per accelerare l’elaborazione di enormi quantità di dati in tempi contenuti.
Acceleratori basati su FPGA e ASIC
Tradizionalmente le implementazioni hardware seguono due diverse stili di progettazione: da un lato i circuti configurabili di tipo Field Programmable Gate Array e dall’altro i circuiti hardware dedicati di tipo Application Specific Integrated Circuit (ASIC). Entrambi gli stili di progettazione sono focalizzati sulla riduzione della latenza nella fase di inferenza delle reti neurali profonde nel rispetto dei vincoli sul consumo di potenza per applicazioni edge computing.
Le architetture programmabili di tipo FPGA rappresentano una soluzione molto diversa rispetto sia agli acceleratori hardware di tipo ASIC sia all’ecosistema software disponibile nei processori. Inizialmente pensati per essere usati in fase di prototipizzazione, gli FPGA hanno raggiunto fette di mercato significative non solo nelle applicazioni embedded grazie all’incremento della densità di integrazione dei processi tecnologici e all’impiego di strumenti automatici di sintesi ad alto livello impiegati per la loro progettazione on-field. Seguendo questa tendenza, l’impiego di acceleratori basati su soluzioni FPGA per applicazioni deep learning si è concentrato soprattutto per accelerare la fase di training dei modelli nei data center e nei centri di supercalcolo e per le fasi di inferenza nelle soluzioni on-the-edge. Nel settore delle applicazioni deep learning, negli ultimi anni sono state proposte diverse soluzioni basate su acceleratori FPGA sia in ambito di ricerca sia commerciali.
La dimostrazione dell’interesse commerciale verso le soluzioni FPGA offerte dai due principali produttori “storici” Altera e Xilinx è sfociata nel 2015 nell’acquisizione di Altera da parte di Intel e dalla recentissima acquisizione di Xilinx da parte di AMD. Quest’ultima acquisizione rappresenta dunque il secondo caso in cui un fornitore leader di processori acquista un’azienda specializzata in FPGA con lo scopo di ottenere il controllo su una tecnologia FPGA ritenuta complementare alla tecnologia dei processori e fondamentale soprattutto per l’accelerazione di carichi di lavoro di intelligenza artificiale (AI).
Acceleratori dedicati di tipo ASIC
Nell’ambito degli acceleratori dedicati di tipo ASIC diverse sono state le soluzioni proposte sia in ambito di ricerca come l’architettura Eyeriss proposta da MIT e basata sul modello data-flow e sia in ambito commerciale.
L’architettura della Tensor Processor Unit (TPU) è stata sviluppata da Google per accelerare in hardware le prestazioni del calcolo tensoriale e degli accessi alla memoria. L’architettura è particolarmente adatta alla fase di apprendimento delle reti profonde ed è supportata dal modello di programmazione Cloud TPU che sfrutta al massimo il parallelismo dei dati nell’elaborazione di matrici dense.
L’acceleratore NVDLA di Nvidia si rivolge invece al mercato dell’edge computing con un’architettura simile a quella della TPU contenente un core dedicato alle operazioni di convoluzione e usato anche per le moltiplicazione di matrici e un core dedicato per le operazioni di attivazione e di pooling.
Infine, l’architettura Orlando di STMicrolectronics è stata introdotta nel 2017 come sistema on-chip a bassissima dissipazione di potenza per reti neurali convoluzionali e adatto al mercato dei sistemi embedded intelligenti e ai dispostitivi IoT. In particolare, il sistema on-chip Orlando include un microcontrollore ARM Cortex, 8 Digital Signal Processor e un sistema riconfigurabile composto da 8 acceleratori convoluzionali dotati di connessione DMA streaming.
Evoluzione delle reti neurali
Il punto di svolta che ha originato l’esplosione delle potenzialità delle GP-GPU per elaborare reti neurali profonde si può ricondurre all’introduzione delle rete neurale AlexNet, che vinse la competizione internazionale ImageNet nel 2012 migliorando l’accuratezza di classificazione delle immagini utilizzando due GP-GPU Nvidia Geforce GTX 580 per addestrare il modello.
La recente evoluzione delle reti neurali ha portato allo sviluppo di reti sempre più profonde, ma sempre più efficienti ed accurate come OverFeat, VGG-16 and VGG-19, SqueezeNet, GoogLeNet, ResNet, ResNeXt e ShuffleNet. Recentemente, con l’aumento della complessità delle reti neurali per deep learning, i tempi di apprendimento (training) sono aumentati significativamente riducendo la produttività e aumentando i costi di sviluppo. D’altro canto abbiamo assistito all’esplosione della domanda di servizi di intelligenza artificiale basati su piattaforme di inferenza ad alte prestazioni per servizi cloud, data center e sistemi mobili ed autonomi. Le ultime generazioni delle GPU Nvidia Volta e Nvidia Tesla V100 hanno permesso di aumentare significativamente le prestazioni e l’efficienza energetica per deep learning.
Mentre le prestazioni disponibili nelle GPU Nvidia GPU sono ben sfruttate da librerie di basso livello come cuDNN, recentemente sono emerse soluzioni architetturali e istruzioni specializzate per il calcolo tensoriale. Queste istruzioni sono usate per programmare le unità di elaborazione Tensor Core introdotte nell’architettura Nvidia Volta e nelle architetture più recenti.
In pratica si tratta di moltiplicatori di matrici disponibili per diversi tipi di dati in virgola mobile a precisione dimezzata (FP16), singola (FP32) e doppia (FP64). Poiché i Tensor Core possono utilizzare diversi tipi di dati in virgola mobile, essi consentono di eseguire le fasi di inferenza e apprendimento dei modelli DNN a precisione mista. Con la seconda e la terza generazione di core tensoriali nelle architetture Turing e Ampere di Nvidia, il supporto del tipo di dati a singola e doppia precisione è stato esteso introducendo una nuova precisione denominata Tensor Float TF32. Utilizzando la precisione TF32 dell’architettura A100 è stato raggiunto un incremento di 10x per matrici dense e fino a 20 x per matrici sparse rispetto all’implementazione su Nvidia V100 in singola precisione FP32. Nvidia dichiara inoltre che usando l’approccio basato su precisione mista è possibile ottenere un ulteriore incremento di velocità di 2x rispetto all’architettura Volta in singola precisione (FP32).