Vai a Mappa Corsi Laboratorio Glossario Come funziona Problemi comuni Inizia →
ITEN
← Corso 06 · Dal modello all'app (Lezione 06.04 · 18 minuti · Nessun sensore · Per tutti)

Formati e motori.

LiteRT, Core ML, ONNX Runtime, ExecuTorch, MediaPipe, WebGPU. Qui metti ordine tra i nomi, capisci cosa c'è dentro il file di un modello e chi riesce ad arrivare alla NPU del telefono.

Cosa impari
  1. Cosa contiene il file di un modello e cosa fa un motore di inferenza
  2. Quali motori si usano su Android, su iPhone e nel browser
  3. Come si sceglie il motore giusto per un progetto
Ti serve sapere

Se non ti ricordi una di queste cose, il link ti porta al capitolo che la spiega.

Come vuoi seguirla
Preparo la scena…
  1. 01 Il file e il motore

    Un modello è un file, e lo usa un motore.

    Dopo l'addestramento il modello si salva in un file. Dentro ci sono i pesi e la ricetta, cioè l'ordine delle operazioni. Per usarlo sul telefono serve un programma che legga il file e faccia i calcoli, il motore di inferenza01.03. Ogni motore legge i suoi formati e decide su quale parte del chip lavorare.

    In pratica. Scegli il motore prima di addestrare. Alcune operazioni esistono in un formato e non in un altro, e scoprirlo alla fine costa caro.

01 / 07
(Approfondisci)

Qualche numero in più.


(01)

Cosa c'è dentro un file tflite

Un file tflite è un unico blocco di byte organizzato per essere letto senza essere copiato, in un formato che si chiama FlatBuffers. Contiene l'elenco delle operazioni, come convoluzioni e somme, l'elenco dei tensori con la loro forma, i pesi, e per i modelli quantizzati la scala e lo zero di ogni tensore.

Per guardarci dentro c'è Netron, un visualizzatore gratuito che funziona anche nel browser. Mostra la rete come un disegno a blocchi, con la forma di ingressi e uscite. Legge anche i file di ONNX, Core ML e molti altri formati.

(02)

Chi arriva dove, dentro e fuori dal telefono

La tabella riassume come ogni motore raggiunge le tre parti del chip. Sulla CPU quasi tutti usano XNNPACK, una libreria di Google molto ottimizzata. Per la NPU servono pezzi scritti da chi fa il chip, come Qualcomm, MediaTek o Apple. Per questo una NPU può funzionare con un motore e non con un altro, o solo con modelli a 8 bit.

Gli stessi modelli girano anche fuori dal telefono. Su un microcontrollore da pochi euro, con LiteRT per microcontrollori, un modello di qualche decina di KB riconosce un gesto o un suono con una batteria piccola. Su un Raspberry Pi gira un modello come quelli del laboratorio, con una fotocamera e senza schermo. Sulle schede con una GPU, come le Jetson di NVIDIA, girano modelli che seguono un video in tempo reale.

MotoreFileCPUGPUNPU
LiteRTtfliteXNNPACKDelegato GPUDelegati dei produttori
Core MLmlpackageSìSìNeural Engine
ONNX RuntimeonnxSìSìFornitori come QNN e Core ML
ExecuTorchpteXNNPACKVulkan e MetalBackend dei produttori
BrowservariWebAssemblyWebGL e WebGPUNon ancora, con WebNN in arrivo

Le esercitazioni, una per ogni corso →

(03)

Convertire senza sorprese

Ogni conversione può cambiare le risposte di poco o di tanto. Un'operazione tradotta in modo diverso, un ordine dei colori invertito, una normalizzazione dimenticata. Il controllo è semplice. Si fanno passare gli stessi cento esempi nel modello originale e in quello convertito e si confrontano le uscite.

Per i modelli con i numeri a virgola le differenze devono essere minuscole, alla terza o quarta cifra dopo la virgola. Per quelli quantizzati si guarda che la classe scelta sia la stessa quasi sempre. Se non torna, il problema è quasi sempre nella preparazione dell'ingresso, non nel motore.

(Prova sul telefono)

Dentro un modello vero


Scarica il modello che sfoca lo sfondo nella lezione sulla segmentazione, pesa 250 KB. Poi aprilo con Netron, dal telefono o dal computer, e cerca queste cose nel disegno a blocchi.

  1. (01) L'ingresso, con la sua forma, un'immagine di 256 per 256 pixel e 3 colori
  2. (02) L'uscita, la maschera con la confidenza per ogni pixel
  3. (03) Un blocco di convoluzione, con la misura dei suoi filtri
  4. (04) I pesi di un filtro, toccando il blocco
  5. (05) Il punto in cui la rete si stringe e poi torna ad allargarsi

Hai visto la ricetta di cui parla il primo capitolo. Ogni blocco è un'operazione che il motore deve saper fare sulla CPU, sulla GPU o sulla NPU.

(Verifica)

4 domande per chiudere la lezione.

Quando rispondi a tutte, la lezione risulta fatta e sulla mappa la sua pietra diventa gialla. Conta rispondere, non il punteggio.


  1. (01)

    Cosa contiene il file di un modello?

  2. (02)

    Un'operazione non è supportata dal delegato della NPU. Cosa succede?

  3. (03)

    Fai un'app solo per iPhone. Quale motore è la scelta più naturale?

  4. (04)

    Perché il laboratorio del corso usa la GPU e non la NPU?

Per chiudere la lezione rispondi alla verifica

← Potare, distillare, scegliere l'architettura Torna alla mappa
(Prossima lezione · 06.05) Un'app che funziona senza rete