L'API LiteRT Compiled Model est disponible en Kotlin, ce qui offre aux développeurs Android une expérience fluide et axée sur les accélérateurs avec des API de haut niveau.
Pour obtenir un exemple d'application LiteRT en Kotlin, consultez la démonstration de segmentation d'images avec Kotlin.
Premiers pas
Suivez les étapes ci-dessous pour ajouter l'API LiteRT Compiled Model à votre application Android.
Ajouter un package Maven
Ajoutez la dépendance LiteRT avec l'API Compiled Model à votre application :
dependencies {
...
implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}
Créer le modèle compilé
À l'aide de l'API CompiledModel, initialisez le runtime avec un modèle et l'accélération matérielle de votre choix :
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite",
CompiledModel.Options(Accelerator.CPU),
env,
)
Créer des tampons d'entrée et de sortie
Créez les structures de données (tampons) nécessaires pour contenir les données d'entrée que vous fournirez au modèle pour l'inférence, ainsi que les données de sortie que le modèle produira après l'exécution de l'inférence.
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()
Si vous utilisez la mémoire du processeur, remplissez les entrées en écrivant directement les données dans le premier tampon d'entrée.
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
Appeler le modèle
Fournissez les tampons d'entrée et de sortie, puis exécutez le modèle compilé.
model.run(inputBuffers, outputBuffers)
Récupérer les sorties
Récupérez les sorties en lisant directement la sortie du modèle à partir de la mémoire.
val outputFloatArray = outputBuffers[0].readFloat()
Concepts et composants clés
Consultez les sections suivantes pour en savoir plus sur les concepts et composants clés des API LiteRT Kotlin Compiled Model.
Inférence de base (CPU)
Voici une implémentation simplifiée et condensée de l'inférence avec 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()
Modèle compilé (CompiledModel)
L'API Compiled Model (CompiledModel) est chargée de charger un modèle, d'appliquer l'accélération matérielle, d'instancier le runtime, de créer des tampons d'entrée et de sortie, et d'exécuter l'inférence.
L'extrait de code simplifié suivant montre comment l'API Compiled Model prend un modèle LiteRT (.tflite) et crée un modèle compilé prêt à exécuter l'inférence.
val model =
CompiledModel.create(
context.assets,
"mymodel.tflite"
)
L'extrait de code simplifié suivant montre comment l'API CompiledModel prend un tampon d'entrée et un tampon de sortie, et exécute des inférences avec le modèle compilé.
// 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()
Pour obtenir une vue plus complète de l'implémentation de l'API CompiledModel, consultez le code source sur Model.kt.
TensorBuffer
LiteRT offre une compatibilité intégrée pour l'interopérabilité des tampons d'E/S, en utilisant l'API Tensor Buffer (TensorBuffer) pour gérer le flux de données entrant et sortant du CompiledModel. L'API Tensor Buffer permet d'écrire (Write<T>()) et de lire (Read<T>()) des tampons, et de les verrouiller.
Pour obtenir une vue plus complète de l'implémentation de l'API Tensor Buffer, consultez le code source sur TensorBuffer.kt.