Google lancia un motore di inferenza GPU mobile basato su OpenCL
Recentemente, in un annuncio ufficiale, Google ha lanciato un motore di inferenza GPU mobile basato su OpenCL per Android. Il gigante della tecnologia afferma che il motore di inferenza offre una velocità fino a ~ 2x rispetto al backend OpenGL su reti neurali che includono un carico di lavoro sufficiente per la GPU. Questo motore di inferenza GPU è attualmente reso disponibile nell’ultima versione della libreria TensorFlow Lite (TFLite).
Capire OpenGL e OpenCL
OpenGL
Open Graphics Library o OpenGL è un’API progettata per il rendering di grafica vettoriale attraverso la quale un’applicazione client può controllare questo sistema. È una popolare interfaccia software che consente a un programmatore di comunicare con l’hardware grafico.
OpenGL è fondamentalmente utilizzato per la programmazione grafica e consente di scrivere programmi per eseguire operazioni grafiche. Il sistema di rendering OpenGL è accuratamente specificato per rendere consentite le implementazioni hardware.
OpenCL
Open Computing Language o OpenCL è uno standard aperto e gratuito per la programmazione parallela multipiattaforma di diversi acceleratori che si trovano in supercomputer, server cloud, personal computer, dispositivi mobili e piattaforme integrate.
Questo standard aperto aiuta a migliorare la velocità e la reattività di un ampio spettro di applicazioni in diverse categorie di mercato, come strumenti creativi professionali, elaborazione della visione, formazione sulla rete neurale, inferenza e altro.
Perché utilizzare OpenCL?
Secondo il team GPU di TensorFlow Lite, oltre a migliorare il motore di inferenza GPU mobile basato su OpenGL esistente, continuano anche a indagare e sperimentare continuamente con altre tecnologie. È qui che viene alla luce il motore di inferenza della GPU mobile basato su OpenCL.
Il team ha utilizzato shader di calcolo OpenGL per l’utilizzo della GPU per attività generiche. Compute shader è uno stadio shader in grado di eseguire il rendering e lo spazio su cui opera uno shader di calcolo è per lo più astratto, ovvero dipende da ciascuno degli shader di calcolo per decidere cosa significa spazio.
Secondo il team, gli shader di calcolo sono stati aggiunti con la versione OpenGL ES 3.1, ma le sue decisioni di progettazione delle API compatibili con le versioni precedenti stavano limitando loro di raggiungere il pieno potenziale della GPU. È qui che entra in gioco OpenCL. OpenCL è progettato per il calcolo con vari acceleratori dall’inizio ed è quindi più rilevante per il dominio dell’inferenza della GPU mobile.
Hanno affermato di aver sperimentato e esaminato un motore di inferenza basato su OpenCL. Ha portato molte funzionalità intuitive che consentono agli sviluppatori di ottimizzare il motore di inferenza della GPU mobile.
Miglioramenti dovuti a OpenCL
Ci sono molte funzionalità intuitive in OpenCL che hanno segnato un miglioramento rispetto al backend OpenGL. Loro sono:
1 | Profilazione delle prestazioni:
Secondo il team TFLite, l’ottimizzazione del backend OpenCL è stata molto più semplice di OpenGL. Questo perché OpenCL offre eccellenti funzionalità di profiling e con queste API di profiling, gli sviluppatori sono ora in grado di misurare le prestazioni di ogni invio del kernel in modo molto preciso.
2 | Dimensioni ottimizzate del gruppo di lavoro:
Gli sviluppatori TFLite hanno osservato che le prestazioni della GPU TFLite sulle GPU Qualcomm Adreno sono molto sensibili alle dimensioni del gruppo di lavoro. Inoltre, scegliere la dimensione corretta del gruppo di lavoro può aumentare le prestazioni, per cui scegliere quella sbagliata può degradare le prestazioni in egual misura.
Con l’aiuto delle funzionalità di profilazione delle prestazioni in OpenCL, gli sviluppatori sono ora in grado di implementare un ottimizzatore per le dimensioni del gruppo di lavoro. Ciò ha comportato una velocità fino al 50% rispetto all’implementazione media.
3 | Punto mobile di precisione nativo a 16 bit (FP16):
Il backend OpenCL mantiene l’FP16 in modo nativo. Richiede l’acceleratore per definire la disponibilità del tipo di dati. Secondo gli sviluppatori, utilizzando OpenCL, anche alcune delle vecchie GPU, ad esempio, Adreno 305 possono funzionare al massimo delle loro capacità. Mentre nel caso di OpenGL, si basa principalmente su suggerimenti che i fornitori possono anche scegliere di ignorare nelle loro implementazioni e quindi senza garanzie di prestazioni.
4 | Memoria costante:
Secondo il team, OpenCL ha una teoria della memoria costante. Il principale produttore di chip, Qualcomm ha aggiunto una memoria fisica, che ha le proprietà per renderlo ideale per essere utilizzato con la memoria costante di OpenCL. Inoltre, OpenCL su Adreno può superare in modo significativo le prestazioni di OpenGL grazie alla sinergia con questa memoria fisica costante e il supporto FP16 nativo di cui sopra.
Valutazione delle prestazioni
Gli sviluppatori TFLite hanno valutato le prestazioni del motore di inferenza su dispositivi Android selezionati con OpenCL su un paio di reti neurali popolari: MNASNet 1.3 e SSD MobileNet v3 (grande). Di conseguenza, il nuovo backend OpenCL ha mostrato circa il doppio della velocità del backend OpenGL e funziona particolarmente meglio sui dispositivi Adreno se annotato con SD.
Uno dei problemi principali che gli sviluppatori TFLite hanno dovuto affrontare durante l’utilizzo del motore di inferenza OpenCL è che OpenCL non fa parte della distribuzione Android standard. Sebbene i principali fornitori di Android includano OpenCL come parte della loro libreria di sistema, è possibile che OpenCL non sia disponibile per alcuni utenti.