[ad_1]
Non molto tempo fa, l’inferenza dell’intelligenza artificiale (AI) all’edge era una novità facilmente supportata da un acceleratore IP a singola unità di elaborazione neurale (NPU) incorporato nel dispositivo edge. Da allora le aspettative hanno subito una rapida accelerazione. Ora vogliamo che l’inferenza dell’intelligenza artificiale incorporata gestisca più telecamere, la segmentazione complessa delle scene, il riconoscimento vocale con soppressione intelligente del rumore, la fusione tra più sensori e ora modelli di intelligenza artificiale generativa molto grandi e complessi.
Tali applicazioni possono fornire un throughput accettabile per i prodotti edge solo se eseguite su processori AI multi-core. Per soddisfare questa esigenza sono già disponibili acceleratori IP NPU, che si estendono a otto o più core paralleli e sono in grado di gestire più attività di inferenza in parallelo. Ma come suddividere i carichi di lavoro di inferenza dell’intelligenza artificiale previsti affinché il tuo prodotto tragga il massimo vantaggio da tutta quella potenza?
Figura 1 I processori AI multi-core possono fornire un throughput accettabile per applicazioni edge come la segmentazione delle scene. Fonte: Ceva
Percorsi per sfruttare il parallelismo per l’intelligenza artificiale inferenza
Come in ogni problema di parallelismo, iniziamo con un insieme definito di risorse per il nostro obiettivo di inferenza AI: un certo numero di acceleratori disponibili con cache L1 locale, cache L2 condivisa e un’interfaccia DDR, ciascuno con dimensioni di buffer definite. Il compito è quindi quello di mappare i grafici di rete richiesti dall’applicazione su quella struttura, ottimizzando il throughput totale e l’utilizzo delle risorse.
Una strategia ovvia consiste nell’elaborare immagini di input di grandi dimensioni che devono essere suddivise in più tessere, partizionandole per mappa di input in cui a ciascun motore viene assegnata una tessera. Qui, più motori cercano in parallelo la mappa di input, cercando la stessa caratteristica. Al contrario, puoi partizionare per mappa di output: la stessa tessera viene inserita in più motori in parallelo e utilizzi lo stesso modello ma pesi diversi per rilevare contemporaneamente caratteristiche diverse nell’immagine di input.
Il parallelismo all’interno di una rete neurale è comunemente visto nei sottografi, come nell’esempio seguente (figura 2). L’allocazione delle risorse in genere ottimizzerà in termini di ampiezza e quindi di profondità, ottimizzando ogni volta fino al passaggio corrente. Ovviamente questo approccio non troverà necessariamente un ottimo globale in un passaggio, quindi l’algoritmo deve consentire il backtracking per esplorare i miglioramenti. In questo esempio, tre motori possono fornire >230% delle prestazioni che sarebbero possibili se fosse disponibile un solo motore.
figura 2 I sottografi evidenziano il parallelismo all’interno di una rete neurale. Fonte: Ceva
Mentre alcuni modelli o sottografi di inferenza dell’intelligenza artificiale possono mostrare un parallelismo significativo come nel grafico sopra, altri possono visualizzare lunghi thread di operazioni, che potrebbero non sembrare molto parallelizzabili. Tuttavia, possono ancora essere messi in pipeline, il che può essere utile quando si considerano le operazioni di streaming attraverso la rete.
Un esempio è l’elaborazione strato per strato in una rete neurale profonda (DNN). La semplice organizzazione delle operazioni sui livelli per immagine per ridurre al minimo i cambi di contesto per motore può aumentare la produttività, consentendo al contempo il passaggio delle operazioni successive della pipeline in un secondo momento, ma comunque prima rispetto all’elaborazione puramente sequenziale. Un altro buon esempio è fornito dalle reti di intelligenza artificiale generativa basate su trasformatori in cui l’alternanza tra fasi di attenzione e normalizzazione consente di eseguire attività di riconoscimento sequenziali.
Il partizionamento in batch è un altro metodo, che fornisce supporto per lo stesso modello di inferenza AI in esecuzione su più motori, ciascuno alimentato da un sensore separato. Ciò potrebbe supportare più sensori di immagine per un dispositivo di sorveglianza. Infine, è possibile eseguire la partizione facendo in modo che motori diversi eseguano modelli diversi. Questa strategia è utile soprattutto nella segmentazione semantica, ad esempio per la guida autonoma dove alcuni motori potrebbero rilevare la segnaletica orizzontale. Altri potrebbero gestire la segmentazione dello spazio libero (guidabile), mentre altri potrebbero rilevare oggetti (pedoni e altre automobili).
Progettazione dell’architettura
Esistono numerose opzioni per ottimizzare la produttività e l’utilizzo, ma come decidere il modo migliore per ottimizzare le esigenze delle applicazioni di inferenza dell’intelligenza artificiale? Questa fase di pianificazione dell’architettura deve necessariamente precedere la compilazione e l’ottimizzazione del modello. Qui vuoi esplorare i compromessi tra le strategie di partizionamento.
Ad esempio, un sottografo con parallelismo seguito da un thread di operazioni potrebbe talvolta essere meglio gestito semplicemente tramite pipelining piuttosto che con una combinazione di parallelismo e pipelining. Le migliori opzioni in ciascun caso dipenderanno dal grafico, dalle dimensioni del buffer e dalle latenze nel cambio di contesto. In questo caso, il supporto alla sperimentazione è fondamentale per determinare implementazioni ottimali.
Rami Drucker è architetto software di machine learning presso Ceva.
Contenuto relativo
- Cinque tendenze di inferenza dell’intelligenza artificiale per il 2022
- Come rendere l’intelligenza artificiale generativa più verde
- Le tecnologie chiave spingono l’intelligenza artificiale al limite
- Aggiunta di inferenza AI/ML a basso consumo ai dispositivi Edge
- I vantaggi del calcolo in memoria per l’inferenza dell’intelligenza artificiale
Il post Partizionamento per ottimizzare l’inferenza dell’intelligenza artificiale per piattaforme multi-core è apparso per primo su EDN.
[ad_2]
Source link