LiteRT Compiled Model API unter Android mit Kotlin ausführen

Die LiteRT Compiled Model API ist in Kotlin verfügbar und bietet Android-Entwicklern eine nahtlose, beschleunigerorientierte Erfahrung mit APIs auf hoher Ebene.

Ein Beispiel für eine LiteRT-Anwendung in Kotlin finden Sie in der Demo zur Bildsegmentierung mit Kotlin.

Jetzt starten

Führen Sie die folgenden Schritte aus, um die LiteRT Compiled Model API zu Ihrer Android-Anwendung hinzuzufügen.

Maven-Paket hinzufügen

Fügen Sie Ihrer Anwendung die LiteRT-Abhängigkeit mit der Compiled Model API hinzu:

dependencies {
  ...
  implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}

Kompiliertes Modell erstellen

Initialisieren Sie die Laufzeit mit einem Modell und der von Ihnen ausgewählten Hardwarebeschleunigung über die CompiledModel API:

val  model =
  CompiledModel.create(
    context.assets,
    "mymodel.tflite",
    CompiledModel.Options(Accelerator.CPU),
    env,
  )

Eingabe- und Ausgabepuffer erstellen

Erstellen Sie die erforderlichen Datenstrukturen (Puffer) für die Eingabedaten, die Sie in das Modell für die Inferenz einfügen, und für die Ausgabedaten, die das Modell nach der Inferenz erzeugt.

val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()

Wenn Sie den CPU-Arbeitsspeicher verwenden, füllen Sie die Eingaben, indem Sie Daten direkt in den ersten Eingabepuffer schreiben.

inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })

Modell aufrufen

Stellen Sie die Ein- und Ausgabepuffer bereit und führen Sie das kompilierte Modell aus.

model.run(inputBuffers, outputBuffers)

Ausgaben abrufen

Ausgaben abrufen, indem die Modellausgabe direkt aus dem Speicher gelesen wird.

val outputFloatArray = outputBuffers[0].readFloat()

Wichtige Konzepte und Komponenten

In den folgenden Abschnitten finden Sie Informationen zu den wichtigsten Konzepten und Komponenten der LiteRT Kotlin Compiled Model APIs.

Einfache Inferenz (CPU)

Im Folgenden finden Sie eine gekürzte, vereinfachte Implementierung der Inferenz mit 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()

Kompiliertes Modell (CompiledModel)

Die Compiled Model API (CompiledModel) ist für das Laden eines Modells, das Anwenden von Hardwarebeschleunigung, das Instanziieren der Laufzeit, das Erstellen von Ein- und Ausgabepuffern und das Ausführen der Inferenz verantwortlich.

Das folgende vereinfachte Code-Snippet zeigt, wie mit der Compiled Model API ein LiteRT-Modell (.tflite) in ein kompiliertes Modell umgewandelt wird, das für die Inferenz bereit ist.

val  model =
  CompiledModel.create(
    context.assets,
    "mymodel.tflite"
  )

Das folgende vereinfachte Code-Snippet zeigt, wie die CompiledModel API einen Eingabe- und einen Ausgabepuffer verwendet und Inferenzvorgänge mit dem kompilierten Modell ausführt.

// 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()

Eine umfassendere Ansicht der Implementierung der CompiledModel API finden Sie im Quellcode unter Model.kt.

Tensor-Puffer (TensorBuffer)

LiteRT bietet integrierte Unterstützung für die Interoperabilität von E/A-Puffern. Dazu wird die Tensor Buffer API (TensorBuffer) verwendet, um den Datenfluss in und aus dem CompiledModel zu verarbeiten. Die Tensor Buffer API bietet die Möglichkeit, Puffer zu schreiben (Write<T>()), zu lesen (Read<T>()) und zu sperren.

Eine umfassendere Ansicht der Implementierung der TensorBuffer API finden Sie im Quellcode unter TensorBuffer.kt.