LiteRT pour Android

Les API d'exécution LiteRT suivantes sont disponibles pour le développement Android :

  • CompiledModel API : la norme moderne pour l'inférence à hautes performances, qui simplifie l'accélération matérielle sur les CPU/GPU/NPU. En savoir plus sur les raisons de choisir l'API CompiledModel
  • API Interpreter : API d'inférence de base, maintenue pour la rétrocompatibilité.

Premiers pas avec l'API CompiledModel

Versions et API Android compatibles

Version LiteRT État API compatible Niveau SDK minimal Version NDK minimale (le cas échéant) Date de sortie
v2.1.0 ⭐ ✅ Dernière version CompiledModel
Interpreter(CPU uniquement)
23 (Android 6 Marshmallow) r26a Pas encore disponible
v2.0.3 ⚠️ Obsolète CompiledModel 26 (Android 8 Oreo) r26a 2025-11-08
v1.4.1 ⭐ ✅ Dernière version Interpreter 21 (Android 5 Lollipop) r26a 2025-11-07
v1.4.0 ⭐ ⚠️ Obsolète Interpreter 26 (Android 8 Oreo) r26a 25/06/2025
v1.3.0 ⚠️ Obsolète Interpreter 21 (Android 5 Lollipop) r26a 2025-05-19
v1.2.0 ⭐ ⚠️ Obsolète Interpreter 21 (Android 5 Lollipop) r26a 2025-03-13

Important : Assurez-vous que vos dépendances sont à jour pour garantir la compatibilité avec les dernières fonctionnalités et mises à jour de sécurité.

Guide de démarrage rapide avec l'API CompiledModel

L'exécution de l'inférence avec l'API Compiled Model implique les étapes clés suivantes :

  1. Chargez un modèle compatible.
  2. Allouez les tampons Tensor d'entrée et de sortie.
  3. Appelez le modèle compilé.
  4. Lire les inférences dans un tampon de sortie.

Les extraits de code suivants montrent une implémentation de base de l'ensemble du processus en Kotlin et en C++.

Kotlin

// Load model and initialize runtime
val compiledModel = CompiledModel.create(
    "/path/to/mymodel.tflite",
    CompiledModel.Options(Accelerator.CPU))

// Preallocate input/output buffers
val inputBuffers = compiledModel.createInputBuffers()
val outputBuffers = compiledModel.createOutputBuffers()

// Fill the input buffer
inputBuffers.get(0).writeFloat(input0)
inputBuffers.get(1).writeFloat(input1)

// Invoke
compiledModel.run(inputBuffers, outputBuffers)

// Read the output
val output = outputBuffers.get(0).readFloat()

C++

// Load model and initialize runtime
LITERT_ASSIGN_OR_RETURN(auto env, GetEnvironment());
LITERT_ASSIGN_OR_RETURN(auto options, GetOptions());
LITERT_ASSIGN_OR_RETURN(
    auto compiled_model,
    CompiledModel::Create(env, "/path/to/mymodel.tflite", options));

// Preallocate input/output buffers
LITERT_ASSIGN_OR_RETURN(auto input_buffers,compiled_model.CreateInputBuffers(signature_index));
LITERT_ASSIGN_OR_RETURN(auto output_buffers,compiled_model.CreateOutputBuffers(signature_index));

// Fill the input buffer
LITERT_ABORT_IF_ERROR(input_buffers[0].Write(input0));
LITERT_ABORT_IF_ERROR(input_buffers[1].Write(input1));

// Invoke
LITERT_ABORT_IF_ERROR(compiled_model.Run(signature_index, input_buffers, output_buffers));

// Read the output
LITERT_ABORT_IF_ERROR(output_buffers[0].Read(output0));