Compatibilità degli operatori LiteRT e TensorFlow

Gli operatori di machine learning (ML) che utilizzi nel modello possono influire di conversione di un da modello TensorFlow al formato LiteRT. Il convertitore LiteRT supporta un numero limitato di operazioni TensorFlow usate in comune di inferenza, il che significa che non tutti i modelli sono convertibili direttamente. Lo strumento di conversione ti consente di includere operatori aggiuntivi, ma un modello richiede anche la modifica del runtime LiteRT ambiente che utilizzi per eseguire il modello, il che può limitare la tua capacità usa le opzioni di deployment del runtime standard, Google Play Services

Il convertitore LiteRT è progettato per analizzare il modello strutturare e applicare ottimizzazioni in modo da renderla compatibile operatori supportati direttamente. Ad esempio, a seconda degli operatori ML in il modello, il convertitore può eluda o fonde questi elementi per mapparli alle rispettive controparti LiteRT.

A volte sono previsti pattern di utilizzo specifici anche per le operazioni supportate, per motivi legati alle prestazioni. Il modo migliore per capire come creare un TensorFlow modello che può essere utilizzato LiteRT deve valutare attentamente come le operazioni vengono convertite ottimizzate, insieme alle limitazioni imposte da questo processo.

Operatori supportati

Gli operatori integrati LiteRT sono un sottoinsieme degli operatori che fanno parte della libreria TensorFlow Core. Il tuo modello TensorFlow includi anche operatori personalizzati sotto forma di operatori composti o nuovi operatori da te definiti. Il diagramma seguente mostra le relazioni tra questi operatori.

Operatori TensorFlow

In questa gamma di operatori del modello ML, esistono 3 tipi di supportati dal processo di conversione:

  1. Modelli con solo operatore LiteRT integrato. (opzione consigliata)
  2. Modelli con gli operatori integrati e selezione di TensorFlow e operatori principali.
  3. Modelli con gli operatori integrati, gli operatori principali di TensorFlow e/o e operatori personalizzati.

Se il modello contiene solo operazioni supportate in modo nativo LiteRT, non sono necessari ulteriori flag per convertirlo. Questo è il percorso consigliato perché questo tipo di modello converte ed è più semplice da ottimizzare ed eseguire utilizzando il runtime LiteRT predefinito. Hai anche più opzioni di deployment per il tuo modello, ad esempio Google Play Services Puoi iniziare a usare il Guida per la conversione LiteRT. Consulta: nella pagina LiteRT Ops per una un elenco di operatori integrati.

Se devi includere operazioni TensorFlow selezionate dalla libreria di base, devi specificarlo al momento della conversione e assicurarti che il runtime includa quelle operazioni aziendali. Consulta l'argomento Selezione di operatori TensorFlow per i passaggi dettagliati.

Se possibile, evita l'ultima opzione, che prevede l'inclusione di operatori personalizzati nel modello convertito. Operatori personalizzati sono operatori creati combinando più operatori principali di TensorFlow o definendone uno completamente nuovo. Quando gli operatori personalizzati vengono convertiti, possono aumentare le dimensioni dell'importo complessivo del modello incorrendo in dipendenze al di fuori della libreria LiteRT integrata. Operazioni personalizzate, se non create specificatamente per l'implementazione su dispositivi mobili o dispositivi mobili, può peggiorare le prestazioni quando viene eseguito dispositivi con risorse limitate rispetto a un ambiente server. Infine, come per l'inclusione di alcuni operatori principali di TensorFlow, richiede modificare l'ambiente di runtime del modello che ti impedisce di sfruttare i servizi di runtime standard, Google Play Services.

Tipi supportati

La maggior parte delle operazioni LiteRT ha come target sia la rappresentazione in virgola mobile (float32) che dell'inferenza quantizzata (uint8, int8), ma molte operazioni non lo fanno ancora per altri tipi come tf.float16 e stringhe.

A parte l'utilizzo di versioni diverse delle operazioni, l'altra differenza tra modelli a virgola mobile e quantizzati è il modo in cui vengono convertiti. La conversione quantizzata richiede informazioni sull'intervallo dinamico per i tensori. Questo richiede la "quantizzazione falsa" durante l'addestramento del modello, ottenere informazioni sull'intervallo tramite un set di dati di calibrazione oppure "on-the-fly" una stima dell'intervallo di lavoro. Consulta: quantizzazione per ulteriori dettagli.

Conversioni semplici, piegatura e fusione costanti

Alcune operazioni TensorFlow possono essere elaborate da LiteRT, anche se non hanno un equivalente diretto. È il caso delle operazioni che possono può essere semplicemente rimossa dal grafico (tf.identity), sostituita da tensori (tf.placeholder) o fusi in operazioni più complesse (tf.nn.bias_add). A volte anche alcune operazioni supportate possono essere rimosse attraverso una delle seguenti i processi di machine learning.

Di seguito è riportato un elenco non esaustivo delle operazioni TensorFlow che in genere vengono rimosse dal grafico:

  • tf.add
  • tf.debugging.check_numerics
  • tf.constant
  • tf.div
  • tf.divide
  • tf.fake_quant_with_min_max_args
  • tf.fake_quant_with_min_max_vars
  • tf.identity
  • tf.maximum
  • tf.minimum
  • tf.multiply
  • tf.no_op
  • tf.placeholder
  • tf.placeholder_with_default
  • tf.realdiv
  • tf.reduce_max
  • tf.reduce_min
  • tf.reduce_sum
  • tf.rsqrt
  • tf.shape
  • tf.sqrt
  • tf.square
  • tf.subtract
  • tf.tile
  • tf.nn.batch_norm_with_global_normalization
  • tf.nn.bias_add
  • tf.nn.fused_batch_norm
  • tf.nn.relu
  • tf.nn.relu6
di Gemini Advanced.

Operazioni sperimentali

Le seguenti operazioni LiteRT sono presenti, ma non sono pronte per essere personalizzate di machine learning:

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