Compatibilità con gli operatori TensorFlow Lite e TensorFlow

Gli operatori di machine learning (ML) che utilizzi nel tuo modello possono influire sul processo di conversione di un modello TensorFlow nel formato TensorFlow Lite. Il convertitore TensorFlow Lite supporta un numero limitato di operazioni TensorFlow utilizzate nei modelli di inferenza comuni, il che significa che non tutti i modelli sono direttamente convertibili. Lo strumento di conversione ti consente di includere operatori aggiuntivi, ma la conversione di un modello in questo modo richiede anche la modifica dell'ambiente runtime TensorFlow Lite che utilizzi per eseguire il modello, il che può limitare la tua capacità di utilizzare opzioni di distribuzione runtime standard, come i servizi Google Play .

Il convertitore TensorFlow Lite è progettato per analizzare la struttura del modello e applicare ottimizzazioni per renderlo compatibile con gli operatori direttamente supportati. Ad esempio, a seconda degli operatori ML nel tuo modello, il convertitore potrebbe elidere o fondere tali operatori per mapparli alle loro controparti TensorFlow Lite.

Anche per le operazioni supportate, a volte sono previsti modelli di utilizzo specifici, per motivi di prestazioni. Il modo migliore per capire come costruire un modello TensorFlow che possa essere utilizzato con TensorFlow Lite è considerare attentamente il modo in cui le operazioni vengono convertite e ottimizzate, insieme alle limitazioni imposte da questo processo.

Operatori supportati

Gli operatori integrati di TensorFlow Lite sono un sottoinsieme degli operatori che fanno parte della libreria principale di TensorFlow. Il tuo modello TensorFlow può anche includere operatori personalizzati sotto forma di operatori compositi o nuovi operatori definiti da te. Il diagramma seguente mostra le relazioni tra questi operatori.

Operatori TensorFlow

Da questa gamma di operatori di modelli ML, esistono 3 tipi di modelli supportati dal processo di conversione:

  1. Modelli con solo operatore TensorFlow Lite integrato. ( Consigliato )
  2. Modelli con operatori integrati e operatori core TensorFlow selezionati.
  3. Modelli con operatori integrati, operatori core TensorFlow e/o operatori personalizzati.

Se il tuo modello contiene solo operazioni supportate nativamente da TensorFlow Lite, non sono necessari flag aggiuntivi per convertirlo. Questo è il percorso consigliato perché questo tipo di modello verrà convertito senza problemi ed è più semplice da ottimizzare ed eseguire utilizzando il runtime TensorFlow Lite predefinito. Hai anche più opzioni di implementazione per il tuo modello come i servizi Google Play . Puoi iniziare con la guida al convertitore TensorFlow Lite . Consulta la pagina TensorFlow Lite Ops per un elenco degli operatori integrati.

Se devi includere operazioni TensorFlow selezionate dalla libreria principale, devi specificarlo al momento della conversione e assicurarti che il tuo runtime includa tali operazioni. Consulta l'argomento Selezionare gli operatori TensorFlow per i passaggi dettagliati.

Quando possibile, evita l'ultima opzione di includere operatori personalizzati nel modello convertito. Gli operatori personalizzati sono operatori creati combinando più operatori core primitivi di TensorFlow o definendone uno completamente nuovo. Quando gli operatori personalizzati vengono convertiti, possono aumentare le dimensioni del modello complessivo incorrendo in dipendenze esterne alla libreria TensorFlow Lite integrata. Le operazioni personalizzate, se non create appositamente per la distribuzione su dispositivi mobili o dispositivi, possono comportare prestazioni peggiori se distribuite su dispositivi con risorse limitate rispetto a un ambiente server. Infine, proprio come includere operatori core TensorFlow selezionati, gli operatori personalizzati richiedono la modifica dell'ambiente di runtime del modello che ti impedisce di sfruttare i servizi di runtime standard come i servizi Google Play .

Tipi supportati

La maggior parte delle operazioni di TensorFlow Lite prendono di mira sia l'inferenza in virgola mobile ( float32 ) che quella quantizzata ( uint8 , int8 ), ma molte operazioni non lo fanno ancora per altri tipi come tf.float16 e stringhe.

Oltre all'utilizzo di versioni diverse delle operazioni, l'altra differenza tra i modelli a virgola mobile e quantizzati è il modo in cui vengono convertiti. La conversione quantizzata richiede informazioni sull'intervallo dinamico per i tensori. Ciò richiede una "falsa quantizzazione" durante l'addestramento del modello, l'ottenimento di informazioni sull'intervallo tramite un set di dati di calibrazione o l'esecuzione di una stima dell'intervallo "al volo". Vedi quantizzazione per maggiori dettagli.

Conversioni semplici, piegatura costante e fusione

Numerose operazioni TensorFlow possono essere elaborate da TensorFlow Lite anche se non hanno un equivalente diretto. Questo è il caso delle operazioni che possono essere semplicemente rimosse dal grafico ( tf.identity ), sostituite da tensori ( tf.placeholder ) o fuse in operazioni più complesse ( tf.nn.bias_add ). Anche alcune operazioni supportate potrebbero talvolta essere rimosse tramite uno di questi processi.

Ecco un elenco non esaustivo delle operazioni TensorFlow che solitamente vengono rimosse dal grafico:

Operazioni sperimentali

Le seguenti operazioni TensorFlow Lite sono presenti, ma non sono pronte per i modelli personalizzati:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF