Google ha annunciato LiteRT.js, una versione JavaScript di LiteRT, la sua libreria di inferenza su dispositivi locali in precedenza chiamata TensorFlow Lite. LiteRT.js permette di eseguire modelli .tflite direttamente nel browser, mantenendo le inferenze locali. Questo approccio offre vantaggi in termini di privacy degli utenti, zero costi per il server e una latenza estremamente bassa.
LiteRT.js non introduce un nuovo formato di modello, ma Google ha compilato il proprio runtime nativo in WebAssembly e lo ha esposto a JavaScript. Fino ad ora, soluzioni per AI sul web come TensorFlow.js si basavano su nuclei JavaScript, definiti meno performanti da Google. LiteRT.js invece include il runtime ottimizzato nativo, con miglioramenti di prestazioni portati da Android, iOS e desktop al browser.
Come Funziona LiteRT.js
LiteRT.js punta a tre backends: CPU, GPU e NPU. Il backend CPU utilizza XNNPACK, la libreria ottimizzata di Google con supporto a multithreading; il backend GPU utilizza ML Drift, soluzione su dispositivi per GPU, funzionante tramite WebGPU; il backend NPU utilizza l’API WebNN, attualmente sperimentale in Chrome e Edge.
Due regole principali sono associate alla gestione dei backends. Prima, LiteRT.js non supporta la delega parziale. Un grafico non può essere suddiviso tra CPU e GPU. In secondo luogo, la delega è completa per modello. Se un modello non può essere interamente delegato all’acceleratore scelto, LiteRT.js cade in esecuzione wasm. Il percorso CPU ha la copertura più ampia degli operatori.
Risultati sulle Prestazioni
In base a Google, le prestazioni di LiteRT.js rispetto ad altri run-time di inferenza sul web raggiungono fino a 3 volte di velocità in CPU e GPU, coprendo modelli classici in visione artificiale e elaboarzione audio. Confronto rispetto alla propria esecuzione CPU mostra velocità di 5-60 volte più veloce quando si utilizza GPU o NPU. Queste prestazioni si applicano a operazioni impegnative come tracciamento oggetti o trascrizione audio.
Tutti i benchmark sono stati effettuati in un ambiente controllato su un MacBook Pro 2024 con M4. Google ha notato che i risultati variano in base alla GPU, alla throttling termica e all’ottimizzazione dei driver. I dati “10 volte” menzionati con lancio non appaiono nell’annuncio.
Introduzione di un Modello PyTorch
LiteRT Torch consente di convertire modelli PyTorch in formati .tflite in un singolo passo. Tuttavia, ci sono rigorosi requisiti. Il modello deve poter essere esportato con torch.export.export, che richiede TorchDynamo, non può comprendere condizioni Python basate sui valori tensoriali runtime e non può avere dimensioni dinamiche di input o output, incluso il batch.
Per ridurre le dimensioni, il quantizer AI Edge configura schema per model layer diversi. Modelli pre-allenati .tflite sono disponibili anche su Kaggle e la comunità LiteRT su Hugging Face.
Pipeline Minima
Dopo la conversione, il codice runtime è breve. Di seguito viene illustrato il percorso per WebGPU, verificato su @litertjs/core v2.5.2:
- Importa libreria LiteRT.js
- Carica LiteRT.js dal nodo o da CDN
- Carica modello .tflite
- Esegui inferenze
- Risolvi risultati in CPU
- Elimina tensori per gestire la memoria
Esempi di Applicazione
LiteRT.js supporta diversi casi d’uso:
- Rilevamento oggetti in tempo reale: Ultralytics YOLO26 esportato direttamente dal pacchetto Python LiteRT.
- Profondità da webcam: Depth-Anything-V2 esegue WebGPU in tempo.
- Risoluzione d'immagini : Real-ESRGAN ingrandisce patch da 128×128 a 512×512 e le ricompone in un'immagine da 4.
- Ricerca semantica: EmbeddingGemma cerca vettori in pagina con calcolo lato client.
LiteRT.js vs TensorFlow.js
I demo spingono le squadre di ML esistenti verso una domanda ovvia. LiteRT.js e TensorFlow.js si differenziano in diversi aspetti:
- Nuclei: LiteRT.js utilizza il runtime nativo compilato WebAssembly; TensorFlow.js utilizza nuclei JavaScript.
- Formato modello: LiteRT.js usa .tflite; TensorFlow.js usa modelli in formato grafico e layers.
- Path CPU: LiteRT.js utilizza XNNPACK con multithreading; TensorFlow.js utilizza JS e WebAssembly.
- Path GPU: LiteRT.js utilizza ML Drift con WebGPU; TensorFlow.js utilizza WebGL e WebGPU.
- Path NPU: LiteRT.js utilizza WebNN (sperimentale); TensorFlow.js non ha supporto.
- Gestione memoria: LiteRT.js gestisce manualmente i tensori; TensorFlow.js offre memoria automatica e utilizza tf.tidy e tf.dispose.
- Condivisione multipiattaforma: LiteRT.js condivide artifatti con Android, iOS, desktop; TensorFlow.js è limitato al web.
Integrazione
I due framework non sono esclusivi. Google ha posizionato LiteRT.js come sostituzione per TensorFlow Graph Models, non per l'intera libreria. Rimane consigliabile TensorFlow.js per le operazioni pre-post processing. Il pacchetto @litertjs/tfjs-interop gestisce tensori con runWithTfjsTensors. Per prestazioni WebGPU, si deve evitare di utilizzare tensor.dataSync, che ha un impatto negativo.
Esempio Interattivo
L’immagine embedded seguente anima i sei passaggi di pipeline per ogni backend.
Dati Importanti
- LiteRT.js esegue modelli .tflite in browser tramite WebAssembly.
- Le prestazioni segnalate vanno fino a 3 volte rispetto agli altri runtimes web; 5–60 volte per GPU/NPU rispetto al percorso CPU.
- I backends sono XNNPACK su CPU, ML Drift con WebGPU, WebNN per NPUs. Niente delega parziale, fallback su wasm.
- I tensori vengono gestiti manualmente; richiede .delete()
- WebNN è sperimentale; WebGPU rappresenta il bersaglio pratico.
Risorse
Per ulteriori informazioni, puoi visitare i seguenti link:
- LiteRT.js, un runtime avanzato per AI su Web - developers.googleblog.com
- Guida per iniziare con LiteRT.js - developers.google.com
- LiteRT Torch - GitHub
- AI Edge Quantizer - AI Edge Quantizer
- ← Volver a las noticias