Tensor Core: Caratteristiche e funzionamento

  • Hardware
preview tensore core

Negli ultimi anni buona parte della ricerca in campo informatico si è concentrata su Reti Neurali, Deep Learning e Intelligenza Artificiale. Processo che richiede un’enorme potenza computazionale, di calcolo parallelo e che per questo ha visto nelle GPU il suo motore.


Nvidia, già impegnata in questo campo e nella realizzazione di hardware per HPC (High Performance Computing) è andata incontro alle richieste dei suoi clienti realizzando un hardware in grado di accelerare questi compiti: i Tensore Core

Come funziona una Rete Neurale

Lo studio delle reti neurali viene spesso visto come una materia complicata e si potrebbe pensare che anche i calcoli su cui si basa lo siano. In realtà si basa totalmente sull’algebra lineare, quindi esclusivamente su somma e prodotto, ma eseguite su molti valori contemporaneamente.

Una rete neurale è formata da nodi, di cui alcuni in input (a sinistra), alcuni in output (a destra) e una serie di nodi intermedi chiamati hidden node. I nodi in input rappresentano un vettore di numeri, mentre i nodi dei livelli successivi sono i risultati intermedi derivati da determinate operazioni. Ogni linea rappresenta la moltiplicazione di un valore arbitrario per il valore del nodo da cui parte. Il risultato verrà poi messo in un nodo del livello successivo, sommato a tutti i risultati delle linee che entrano in quel nodo.

Il compito del deep learning è quello di trovare il valore arbitrario da associare ad ogni linea, in modo da ottenere un certo risultato finale. Durante la fase di apprendimento si utilizza una serie di dati in input, di cui si conosce già un risultato sperato. Il compito della rete, durante questa fase, sarà quello di trovare i valori necessari per ottenere un risultato più simile possibile a quello sperato.

Esiste poi un ulteriore valore arbitrario chiamato bias, che può essere sommato ai nodi per aggiustare il risultato.

Principio matematico.

Tutte le operazioni di moltiplicazione e somma presenti tra un livello e l’altro sono in realtà un’unica operazione: una moltiplicazione tra matrici.
L’esempio semplificato riporta delle moltiplicazioni tra i vettori dei nodi e le matrici che hanno come entrate i valori imparati durante l’apprendimento. Questa operazione permette infatti di ottenere un vettore di dimensione m (numero nodi del secondo layer), partendo da un vettore di dimensione n(numero di nodi del primo layer) usando una matrice nxm.

nell’esempio quindi per passare dal primo layer (dim 3) al secondo layer (dim 5) serve un prodotto per una matrice di dimensione 3×5, i cui valori vengono stabiliti durante la fase di apprendimento. Mentre per ottenere l’output, il vettore di input verrà moltiplicati per 3 matrici: una 3×5, una 5×3 e una 3×2.

Nei casi più complicati è possibile che i nodi di un livello non siano rappresentati da un singolo vettore, ma da una matrice bidimensionale (come per le immagini). In questo caso partendo da una matrice di dimensioni nxm, è possibile ottenere una matrice nxp, moltiplicando per una matrice mxp (sempre da delineare durante l’apprendimento) .

Funzionamento Tensore Core.

I tensore core sono unità specializzate in moltiplicazione e accumulo di matrici 4×4. Possono moltiplicare, con una sola operazione, le matrici A e B e sommare una terza matrice C (accumulatore), ottenendo come risultato una matrice D 4×4.

Per il calcolo vengono usati valori in virgola mobile a 16bit (FP16). Sui chip GV100 delle Tesla, pensati per deep learning, è possibile ottenere risultati a precisione piena(FP32), caratteristica non disponibile sulle RTX.

L’accumulatore permette di comporre più operazioni per eseguire il prodotto di matrici più grandi, utilizzando più cicli di clock. Però l’architettura Volta e Turing dispongono di 8 tensor core per ogni SM, con un cablaggio che permette operazioni dirette su matrici 16×16.

Volendo si può inserire un valore iniziale nell’accumulatore, per tenere conto direttamente di bias, senza operazioni aggiuntive.

Prestazioni

Ogni core permette di eseguire 64 operazioni in flosting point, mixed precision per ciclo di clock. Considerando tutti e 8 i core di un SM, si ottengono 1024 floating point operation per ciclo di clock. Quindi circa 1TFLOPS per ogni SM ad una frequenza di 1GHz.

Una RTX 2080ti con 72 SM (544 tensore) ed una frequenza di 1350MHz, dovrebbe raggiungere di 100 Tensor TFLOPS; 114 TFLOPS con frequenza di picco. Contro i 125 della Tesla v100, dotata di 640 tensore core.

Permettendo un miglioramento delle prestazioni per le reti neurali di 12 volte rispetto a Pascal, a parità di SM.

Da notare che in questo caso il termine mixed precision è un modo elegante per dire che non si tratta di precisione piena. 16bit probabilmente sono sufficienti per le reti neurali ma in genere i calcoli si eseguono in precisione singola(32bit) o doppia(64bit). La potenza di picco della RTX 2080ti in precisione singola è di 14.2 TFLOPS.

Utilizzo dei Tensore Core

I tensore core hanno fatto la loro comparsa con l’architettura Volta sulla Tesla V100: una scheda ad alte prestazioni per Data Center e HPC.

Il processo di apprendimento delle IA richiede l’individuazione delle entrate di matrici di grandi dimensioni, in modo da generare l’errore minore. Questo processo va ripetuto su centinaia di migliaia di test, per permettere alla rete di automigliorarsi.

Operazione impossibile per una singola scheda. Le Tesla V100 sono state studiate appositamente per lavorare in configurazioni da centinaia di unità, ognuna formata da 16 schede, collegate grazie a NVLink.

Attualmente questa è la configurazione più efficiente per il Deep Learning, però non è l’unico utilizzo dei tensore core. Da dicembre 2017 è possibile trovare questa tecnologia anche su schede di fascia consumer, come la Titan V e più recentemente su tutte le RTX.

In questo caso il loro scopo non è il deep learning, ma semplicemente l’utilizzo di reti neurali già allenate. Giustificando la minore precisione dell’output sulle RTX, in favore dei nuovi RT Core (leggi l’articolo sulla specializzazione delle RTX). Permettendo l’esecuzione di algoritmi di sintesi e riconoscimento vocale o di post produzione per immagini, con un’efficienza superiore.

Attualmente Nvidia si è concentrata principalmente sulla grafica neurale, rilasciando il pacchetto NGX, con un relativo SDK (software development kit) per i partner interessati.

DLSS

Il principale utilizzo spiegato durante la presentazione delle RTX è il DLSS (Deep Learning Super Sampling). Una tecnica che prevede l’utilizzo di modelli allenati direttamente da Nvidia con un supercomputer da 660 unità.

Le software house dovranno fornire una “ground truth image” ad alta risoluzione, che permetterà di allenare un modello specifico per ogni gioco.

Pare che la tecnologia lavorerà in simbiosi con Geforce Experience, che nel caso rilevi una scheda compatibile, provvederà al download di NGX core e dei modelli relativi ai giochi installati.

Attualmente il DLSS viene allenato per simulare la qualità del TAA (Temporal Anti Aliasing), evitando però artefatti e sfocature e con un minore impatto sulle prestazioni. Attualmente i giochi compatibili dovrebbero essere 25.

Secondo le dichiarazioni di Nvidia, con il DLSS x2 si dovrebbe ottenere una qualità simile al super sampling 64x.

Upscaling

Visto che il DLSS viene applicato in post produzione, in teoria dovrebbe permettere anche il miglioramento dell’immagine durante l’upscaling. Online sono presenti esempi, precedenti alla presentazione delle RTX, in cui viene eseguito l’upscaling sfruttando l’intelligenza artificiale, con ottimi risultati.

Reputo che questa tecnologia possa anche portare a risoluzione 4k giochi renderizzati in FHD con ray tracing. Permettendo di ottenere una qualità tendenzialmente superiore al 4k nativo renderizzato mediante rasterizzazione. Resta solo da vedere quanto impatti il DLSS, in combinazione con RT.

Attualmente il suo scopo sembra non essere questo e visto che tutto il processo è gestito da Nvidia, sia per quanto riguarda il training della rete neurale, che le api NGX, bisogna vedere se porterà ad un vantaggio economico o se rappresenterà solo un problema per la vendita di schede di fascia superiore.