Android 開発では、次の LiteRT ランタイム API を使用できます。
CompiledModelAPI: 高性能推論の最新標準。CPU/GPU/NPU 全体でハードウェア アクセラレーションを効率化します。CompiledModel API を選択する理由の詳細を確認する。InterpreterAPI: 下位互換性を維持するために保持されている基本的な推論 API。
CompiledModel API を使ってみる
従来の ML モデルの場合は、次のデモアプリをご覧ください。
- 画像セグメンテーション Kotlin アプリ: CPU/GPU/NPU 推論。
- 画像セグメンテーション C++ アプリ: 非同期実行による CPU/GPU/NPU 推論。
生成 AI モデルの場合は、次のデモアプリをご覧ください。
- EmbeddingGemma セマンティック類似性 C++ アプリ: CPU/GPU/NPU 推論。
サポートされている Android のバージョンと API
| LiteRT バージョン | ステータス | サポートされている API | 最小 SDK レベル | 最小 NDK バージョン(使用する場合) | リリース日 |
|---|---|---|---|---|---|
v2.1.0 ⭐ |
✅ 最新 | CompiledModel Interpreter(CPU のみ) |
23(Android 6 Marshmallow) |
r26a |
まだリリースされていません |
v2.0.3 ⭐ |
⚠️ 廃止 | CompiledModel |
26(Android 8 Oreo) |
r26a |
2025-11-08 |
v1.4.1 ⭐ |
✅ 最新 | Interpreter |
21(Android 5 Lollipop) |
r26a |
2025-11-07 |
v1.4.0 ⭐ |
⚠️ 廃止 | Interpreter |
26(Android 8 Oreo) |
r26a |
2025-06-25 |
v1.3.0 ⭐ |
⚠️ 廃止 | Interpreter |
21(Android 5 Lollipop) |
r26a |
2025-05-19 |
v1.2.0 ⭐ |
⚠️ 廃止 | Interpreter |
21(Android 5 Lollipop) |
r26a |
2025-03-13 |
重要: 最新の機能とセキュリティ アップデートとの互換性を確保するため、依存関係を最新の状態に保ってください。
CompiledModel API のクイックスタート
Compiled Model API を使用して推論を実行するには、次の主な手順を行います。
- 互換性のあるモデルを読み込みます。
- 入力テンソル バッファと出力テンソル バッファを割り当てます。
- コンパイルされたモデルを呼び出します。
- 推論を出力バッファに読み取ります。
次のコード スニペットは、Kotlin と 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));