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.
In questa gamma di operatori del modello ML, esistono 3 tipi di supportati dal processo di conversione:
- Modelli con solo operatore LiteRT integrato. (opzione consigliata)
- Modelli con gli operatori integrati e selezione di TensorFlow e operatori principali.
- 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
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