Migliorare le prestazioni di quantizzazione in TVM
Questo articolo esamina modi per migliorare la quantizzazione nei modelli di deep learning usando TVM.
― 6 leggere min
Indice
La Quantizzazione è un metodo usato nel deep learning per rendere i modelli più piccoli e veloci. Funziona cambiando il modo in cui i numeri sono memorizzati in un modello. Normalmente, i modelli usano numeri in virgola mobile a 32 bit, ma con la quantizzazione passiamo a interi a 8 bit. Questo cambiamento aiuta a ridurre la quantità di memoria necessaria e accelera i calcoli senza compromettere troppo l'accuratezza.
Cos'è TVM?
TVM, o Tensor Virtual Machine, è uno strumento open-source che aiuta a eseguire modelli di deep learning su diversi tipi di hardware. È progettato per aiutare gli sviluppatori di machine learning a far girare i loro modelli in modo efficiente su vari dispositivi. TVM ha due parti principali che ottimizzano le performance dei modelli. La prima parte si concentra su come i dati fluiscono attraverso il modello, mentre la seconda parte migliora il modo in cui il modello usa la memoria.
La sfida con la quantizzazione in TVM
Anche se molti studi hanno parlato dei vantaggi della quantizzazione nel ridurre il tempo e la memoria usati per eseguire un modello, abbiamo scoperto che la versione quantizzata dei modelli in TVM spesso non performa come ci si aspetterebbe. Quando la gente usa la quantizzazione a 8 bit, di solito si aspetta che il modello giri circa il doppio più veloce rispetto a quando usa numeri a 32 bit. Tuttavia, in TVM, questa versione quantizzata a volte girava più lentamente, quasi il doppio del tempo rispetto alla versione a precisione completa.
Nella nostra ricerca, abbiamo esaminato attentamente perché ciò stesse accadendo e trovato modi per far funzionare meglio la quantizzazione a 8 bit in TVM. Ci siamo concentrati su due diversi tipi di compiti: quelli in cui i limiti principali sono i calcoli (computation-bound) e quelli in cui il limite principale è l'uso della memoria (memory-bound).
Tipi di compiti
Compiti computation-bound
I compiti computation-bound sono quelli in cui la sfida principale deriva dalla quantità di potenza di calcolo necessaria. Questo tipo di compito di solito comporta calcoli pesanti, come moltiplicare matrici o eseguire convoluzioni. Nel machine learning, molti compiti rientrano in questa categoria perché richiedono uno sforzo computazionale significativo per fare previsioni o allenare modelli. Ad esempio, se stiamo eseguendo un modello con una dimensione del batch di uno, vediamo che la quantizzazione può aiutare. Questo perché usa operazioni aritmetiche più semplici con una minore richiesta di risorse rispetto alle procedure standard a 32 bit.
Alcuni hardware sono migliori nell'eseguire calcoli a bassa precisione rispetto a quelli ad alta precisione. Questo significa che i calcoli usando numeri a 8 bit possono spesso essere eseguiti più velocemente rispetto a quelli con numeri a 32 bit.
Compiti memory-bound
I compiti memory-bound sono diversi perché sono limitati da quanto velocemente i dati possono essere spostati dentro e fuori dalla memoria. Input grandi possono causare ritardi mentre il sistema fatica a trasferire dati tra la memoria e il processore. Questo problema tende a presentarsi di più con dimensioni di batch maggiori (ad esempio, 8, 64 o 256) poiché queste richiedono più memoria per i dati di input e i calcoli.
Riducendo la dimensione dei numeri da 32 bit a 8 bit con la quantizzazione, possiamo risparmiare molta memoria. Questa dimensione più piccola significa che meno dati devono muoversi avanti e indietro tra la memoria e il processore, il che può aiutare a migliorare la velocità.
Impostazione degli esperimenti
Per vedere come la quantizzazione influisce sulle performance, abbiamo esaminato un modello chiamato ResNet18 compilato da TVM. Abbiamo eseguito questo modello su un sistema potente con una CPU a 8 core e una buona quantità di memoria. Nei nostri esperimenti, abbiamo testato diverse dimensioni di numeri e layout per vedere come influenzavano le performance. Ogni test prevedeva di eseguire il modello più e più volte, calcolando la media del tempo preso per ogni esecuzione.
Risolvere i problemi di performance
Durante i nostri test, abbiamo scoperto che la quantizzazione stava rendendo il modello più lento di quanto dovesse. Dopo aver esaminato la configurazione, abbiamo identificato un bug che causava il sotto-performare del modello quantizzato. Una volta sistemato questo bug, il modello quantizzato ha iniziato a mostrare Prestazioni migliori.
Abbiamo anche scoperto che TVM ha diversi tipi di esecutori per eseguire modelli. Un esecutore è migliore per modelli statici con operazioni fisse, mentre l'altro è più adatto per modelli dinamici che possono cambiare. Per i nostri esperimenti, abbiamo cambiato all'esecutore per modelli statici, che ci ha permesso di ottimizzare meglio il modello quantizzato. Dopo questo cambiamento, abbiamo visto un miglioramento significativo nelle performance.
Analisi delle performance computation-bound
Con il bug sistemato e l'esecutore giusto in atto, abbiamo esaminato ulteriormente come migliorare le performance per i compiti computation-bound. Ci siamo concentrati sull'ottimizzazione delle convoluzioni nel nostro modello, poiché richiedono molti calcoli.
Tuttavia, abbiamo imparato che non tutte le strategie di ottimizzazione funzionano bene insieme. Diverse impostazioni in TVM portano a diversi risultati di performance perché alcune strategie sono già ottimizzate per determinati compiti. I miglioramenti variano in base a quanto bene la particolare configurazione e i piani si adattano ai compiti in esecuzione.
Ad esempio, il packing spaziale è una tecnica che aiuta ad accelerare l'accesso alla memoria per i compiti cambiando il modo in cui i dati sono memorizzati. L'obiettivo è rendere più facile per l'hardware accedere ai dati, il che aiuta a migliorare le performance. Questo cambiamento può portare a un aumento significativo della velocità per i calcoli.
Analisi delle performance memory-bound
In aggiunta ai benefici delle performance dai calcoli migliori, la quantizzazione aiuta anche nell'uso della memoria. Utilizzando interi a 8 bit invece di numeri in virgola mobile a 32 bit, possiamo ridurre quanta memoria il modello richiede e quanto spesso ha bisogno di recuperare i dati.
Abbiamo notato che con dimensioni di batch maggiori, i vantaggi della riduzione della larghezza di banda della memoria diventavano ancora più chiari. Salvare i risultati intermedi in un formato a precisione più alta manteneva comunque i guadagni di performance dell'uso della quantizzazione a 8 bit, assicurando che non perdessimo precisione durante i calcoli.
Conclusione
La quantizzazione può essere uno strumento potente per migliorare l'efficienza dei modelli di deep learning, specialmente quando implementata correttamente in un sistema come TVM. Capendo i punti di forza e di debolezza dei compiti computation-bound e memory-bound, possiamo applicare meglio la quantizzazione per ottenere miglioramenti significativi delle performance.
Attraverso una messa a punto attenta e la risoluzione di problemi all'interno del modello, possiamo trasformare la quantizzazione in un asset piuttosto che in una responsabilità. Questo lavoro apre a ulteriori ottimizzazioni e prepara il terreno per utilizzare queste tecniche potenti nelle applicazioni del mondo reale.
Titolo: Analyzing Quantization in TVM
Estratto: There has been many papers in academic literature on quantizing weight tensors in deep learning models to reduce inference latency and memory footprint. TVM also has the ability to quantize weights and support low-bit computations. Although quantization is typically expected to improve inference time, in TVM, the performance of 8-bit quantization does not meet the expectations. Typically, when applying 8-bit quantization to a deep learning model, it is usually expected to achieve around 50% of the full-precision inference time. However, in this particular case, not only does the quantized version fail to achieve the desired performance boost, but it actually performs worse, resulting in an inference time that is about 2 times as slow as the non-quantized version. In this project, we thoroughly investigate the reasons behind the underperformance and assess the compatibility and optimization opportunities of 8-bit quantization in TVM. We discuss the optimization of two different types of tasks: computation-bound and memory-bound, and provide a detailed comparison of various optimization techniques in TVM. Through the identification of performance issues, we have successfully improved quantization by addressing a bug in graph building. Furthermore, we analyze multiple optimization strategies to achieve the optimal quantization result. The best experiment achieves 163.88% improvement compared with the TVM compiled baseline in inference time for the compute-bound task and 194.98% for the memory-bound task.
Autori: Mingfei Guo
Ultimo aggiornamento: 2023-08-19 00:00:00
Lingua: English
URL di origine: https://arxiv.org/abs/2308.10905
Fonte PDF: https://arxiv.org/pdf/2308.10905
Licenza: https://creativecommons.org/licenses/by/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.