L'API LiteRT Compiled Model è disponibile in Kotlin e offre agli sviluppatori Android un'esperienza semplice e incentrata sull'acceleratore con API di alto livello.
Per un esempio di applicazione LiteRT in Kotlin, consulta la demo di segmentazione delle immagini con Kotlin.
Inizia
Segui questi passaggi per aggiungere l'API LiteRT Compiled Model alla tua applicazione Android.
Aggiungi pacchetto Maven
Aggiungi la dipendenza LiteRT con l'API Compiled Model alla tua applicazione:
dependencies {
...
implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}
Crea il modello compilato
Utilizzando l'API CompiledModel, inizializza il runtime con un modello e la tua scelta di accelerazione hardware:
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite",
CompiledModel.Options(Accelerator.CPU),
env,
)
Creare buffer di input e output
Crea le strutture di dati (buffer) necessarie per contenere i dati di input che inserirai nel modello per l'inferenza e i dati di output che il modello produce dopo l'esecuzione dell'inferenza.
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
Se utilizzi la memoria della CPU, compila gli input scrivendo i dati direttamente nel primo buffer di input.
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
Richiamare il modello
Fornisci i buffer di input e output ed esegui il modello compilato.
model.run(inputBuffers, outputBuffers)
Recuperare gli output
Recupera gli output leggendo direttamente l'output del modello dalla memoria.
val outputFloatArray = outputBuffers[0].readFloat()
Concetti e componenti chiave
Consulta le sezioni seguenti per informazioni sui concetti e sui componenti chiave delle API LiteRT Kotlin Compiled Model.
Inferenza di base (CPU)
Di seguito è riportata un'implementazione semplificata e condensata dell'inferenza con LiteRT Next.
// Load model and initialize runtime
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
// Invoke
model.run(inputBuffers, outputBuffers)
// Read the output
val outputFloatArray = outputBuffers[0].readFloat()
// Clean up buffers and model
inputBuffers.forEach { it.close() }
outputBuffers.forEach { it.close() }
model.close()
Modello compilato (CompiledModel)
L'API Compiled Model (CompiledModel) è responsabile del caricamento di un modello, dell'applicazione dell'accelerazione hardware, dell'istanza del runtime, della creazione di buffer di input e output e dell'esecuzione dell'inferenza.
Il seguente snippet di codice semplificato mostra come l'API Compiled Model
accetta un modello LiteRT (.tflite) e crea un modello compilato pronto per
eseguire l'inferenza.
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
Il seguente snippet di codice semplificato mostra come l'API CompiledModel
accetta un buffer di input e un buffer di output ed esegue inferenze con il modello
compilato.
// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
// Invoke
model.run(inputBuffers, outputBuffers)
// Read the output
val outputFloatArray = outputBuffers[0].readFloat()
// Clean up buffers and model
inputBuffers.forEach { it.close() }
outputBuffers.forEach { it.close() }
model.close()
Per una visione più completa di come viene implementata l'API CompiledModel, consulta il codice sorgente all'indirizzo
Model.kt.
Buffer tensore (TensorBuffer)
LiteRT fornisce il supporto integrato per l'interoperabilità dei buffer I/O, utilizzando l'API Tensor Buffer (TensorBuffer) per gestire il flusso di dati in entrata e in uscita dal CompiledModel. L'API Tensor Buffer consente di scrivere
(Write<T>()) e leggere (Read<T>()) e bloccare i buffer.
Per una visione più completa di come viene implementata l'API Tensor Buffer, consulta il codice sorgente all'indirizzo TensorBuffer.kt.