W przypadku programowania na Androida dostępne są te interfejsy LiteRT Runtime API:
CompiledModelAPI: nowoczesny standard wnioskowania o wysokiej wydajności, który usprawnia przyspieszenie sprzętowe na procesorach CPU, GPU i NPU. Dowiedz się więcej o przyczynach wyboru interfejsu CompiledModel API.InterpreterAPI: podstawowy interfejs API wnioskowania, utrzymywany ze względu na zgodność wsteczną.
Pierwsze kroki z interfejsem CompiledModel API
W przypadku klasycznych modeli ML zobacz te aplikacje demonstracyjne:
- Aplikacja do segmentacji obrazów w Kotlinie: wnioskowanie na CPU/GPU/NPU.
- Aplikacja C++ do segmentacji obrazu: wnioskowanie na CPU/GPU/NPU z wykonywaniem asynchronicznym.
W przypadku modeli generatywnej AI zapoznaj się z tymi aplikacjami demonstracyjnymi:
- EmbeddingGemma semantic similarity C++ App: wnioskowanie na CPU, GPU i NPU.
Obsługiwane wersje Androida i interfejsy API
| Wersja LiteRT | Stan | Obsługiwany interfejs API | Minimalny poziom SDK | Minimalna wersja NDK (jeśli jest używana) | Data wydania |
|---|---|---|---|---|---|
v2.1.0 ⭐ |
✅ Najnowsza | CompiledModel Interpreter(tylko CPU) |
23 (Android 6 Marshmallow) |
r26a |
Jeszcze nie wydano |
v2.0.3 ⭐ |
⚠️ Przestarzałe | CompiledModel |
26 (Android 8 Oreo) |
r26a |
8.11.2025 r. |
v1.4.1 ⭐ |
✅ Najnowsza | Interpreter |
21 (Android 5 Lollipop) |
r26a |
2025-11-07 |
v1.4.0 ⭐ |
⚠️ nieaktualne | Interpreter |
26 (Android 8 Oreo) |
r26a |
25.06.2025 r. |
v1.3.0 ⭐ |
⚠️ nieaktualne | Interpreter |
21 (Android 5 Lollipop) |
r26a |
19.05.2025 r. |
v1.2.0 ⭐ |
⚠️ nieaktualne | Interpreter |
21 (Android 5 Lollipop) |
r26a |
13.03.2025 r. |
Ważne: dbaj o aktualność zależności, aby zapewnić zgodność z najnowszymi funkcjami i aktualizacjami zabezpieczeń.
Krótkie wprowadzenie do interfejsu CompiledModel API
Przeprowadzanie wnioskowania za pomocą interfejsu Compiled Model API obejmuje te kluczowe kroki:
- Wczytaj zgodny model.
- Przydziel bufory tensorów wejściowych i wyjściowych.
- Wywołaj skompilowany model.
- Odczytaj wnioski do bufora wyjściowego.
Poniższe fragmenty kodu pokazują podstawową implementację całego procesu w językach Kotlin i 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));