Accelerazione hardware con LiteRT Next

L'accelerazione hardware è l'utilizzo di hardware per computer specializzato per migliorare la velocità di esecuzione e l'efficienza di un modello di IA. Per LiteRT, questo principalmente involve l'utilizzo di unità di elaborazione grafica (GPU) o unità di elaborazione neurale (NPU) per l'inferenza IA, nonché di istruzioni vettoriali di unità di elaborazione centrale (CPU) di uso generale.

LiteRT supportava l'accelerazione hardware tramite l'utilizzo di rappresentanti TFLite, che assume il controllo di parti del grafico LiteRT sostituendo le proprie operazioni al suo interno. LiteRT Next perfeziona questo processo gestendo l'accelerazione hardware in due passaggi:

  1. Compilazione:prepara un modello per l'esecuzione con un hardware specifico.
  2. Invio:esegui le operazioni selezionate sull'hardware pertinente.

La fase di compilazione modifica un modello LiteRT con una nuova interfaccia che offre maggiore flessibilità tramite i plug-in del compilatore. La compilazione del modello avviene in anticipo (AOT), prima dell'esecuzione del grafico, e personalizza un grafico specifico da eseguire sul dispositivo.

Tipi di acceleratori

LiteRT fornisce tre tipi di acceleratori: NPU, GPU e CPU.

  • L'accelerazione NPU supporta hardware specializzato unificato da una singola interface. Il supporto NPU è disponibile tramite un programma di accesso in anteprima.
  • L'accelerazione GPU supporta i dispositivi con WebGL e OpenCL abilitati.
  • L'accelerazione della CPU supporta una serie di processori tramite l'utilizzo della libreria XNNPack. Si tratta del livello di accelerazione predefinito ed è sempre disponibile.

Questi acceleratori possono essere combinati per ottenere le migliori prestazioni possibili quando alcune operazioni complesse non sono disponibili su un determinato hardware. Quando gli acceleratori competono per un'operazione, LiteRT utilizza il seguente ordine di precedenza: NPU, GPU, CPU.

Accelerazione GPU

Con l'accelerazione GPU di LiteRT Next, puoi creare buffer di input e output adatti alle GPU, eseguire la copia zero con i dati nella memoria GPU ed eseguire le attività in modo asincrono per massimizzare il parallelismo. LiteRT Next utilizza un delegato GPU nuovo e migliorato, non offerto da LiteRT.

L'esecuzione di modelli su GPU con LiteRT richiede la creazione esplicita di delegati, chiamate di funzioni e modifiche al grafico. Con LiteRT Next, è sufficiente specificare l'acceleratore:

// Create a compiled model targeting GPU
LITERT_ASSIGN_OR_RETURN(auto compiled_model,
    CompiledModel::Create(env, model, kLiteRtHwAcceleratorGpu));

Per ulteriori informazioni sull'accelerazione GPU, consulta Accelerazione GPU con LiteRT

Accelerazione NPU

LiteRT Next fornisce un'interfaccia unificata per sfruttare le NPU senza costringerti a gestire individualmente i compilatori, i runtime o le dipendenze delle librerie specifici del fornitore. L'utilizzo di LiteRT Next per l'accelerazione NPU evita molte complicazioni specifiche del fornitore e del dispositivo, migliora le prestazioni per l'inferenza in tempo reale e con modelli di grandi dimensioni e riduce al minimo le copie di memoria con l'utilizzo di buffer hardware senza copia.

L'utilizzo di NPUs con LiteRT prevede la conversione e la compilazione di un modello con Play for On-device AI (PODAI) e il deployment del modello con Play AI Pack e Feature Module.