Android 用 LiteRT

LiteRT を使用すると、Android アプリで TensorFlow、PyTorch、JAX モデルを実行できます。LiteRT システムは、ハードウェア アクセラレーションのオプションなど、Android でモデルを迅速かつ効率的に実行するための事前構築済みでカスタマイズ可能な実行環境を提供します。

LiteRT を使用する Android アプリケーションの例については、LiteRT サンプル リポジトリをご覧ください。

機械学習モデル

LiteRT は、より小さく、移植可能で、効率的な ML モデル形式に変換された TensorFlow、PyTorch、JAX モデルを使用します。Android で LiteRT を使用して事前構築済みモデルを使用することも、独自のモデルを構築して LiteRT 形式に変換することもできます。

このページでは、すでに構築されている ML モデルの使用について説明します。モデルの構築、トレーニング、テスト、変換については説明しません。LiteRT 用の ML モデルの選択、変更、構築、変換について詳しくは、モデルページをご覧ください。

Android でモデルを実行する

Android アプリ内で実行される LiteRT モデルは、データを取り込み、データを処理し、モデルのロジックに基づいて予測を生成します。LiteRT モデルを実行するには、特別なランタイム環境が必要です。また、モデルに渡されるデータは、テンソルと呼ばれる特定のデータ形式である必要があります。モデルがデータを処理する(推論を実行する)と、予測結果が新しいテンソルとして生成され、Android アプリに渡されます。これにより、ユーザーに結果を表示したり、追加のビジネス ロジックを実行したりするなどのアクションを実行できます。

Android アプリの LiteRT モデルの機能実行フロー

図 1. Android アプリの LiteRT モデルの機能実行フロー。

機能設計レベルでは、Android アプリで LiteRT モデルを実行するために次の要素が必要です。

  • モデルを実行するための LiteRT ランタイム環境
  • データをテンソルに変換するモデル入力ハンドラ
  • 出力結果テンソルを受け取り、予測結果として解釈するモデル出力ハンドラ

以降のセクションでは、LiteRT ライブラリとツールがこれらの機能要素をどのように提供するかについて説明します。

LiteRT でアプリを構築する

このセクションでは、Android アプリで LiteRT を実装する際の推奨される一般的なパスについて説明します。ランタイム環境開発ライブラリのセクションに特に注意してください。カスタムモデルを開発した場合は、高度な開発パスのセクションを必ずご確認ください。

ランタイム環境オプション

Android アプリでモデルを実行するためのランタイム環境を有効にする方法はいくつかありますが、次の方法が推奨されます。

一般に、Google Play 開発者サービスが提供するランタイム環境は、動的に読み込まれるため、標準環境よりもスペース効率がよく、アプリのサイズを小さく保つことができるため、こちらを使用すべきです。また、Google Play 開発者サービスでは、LiteRT ランタイムの最新の安定版リリースが自動的に使用されるため、時間の経過とともに機能が追加され、パフォーマンスが向上します。Google Play 開発者サービスを含まないデバイスでアプリを提供する場合や、ML ランタイム環境を厳密に管理する必要がある場合は、標準の LiteRT ランタイムを使用する必要があります。このオプションでは、追加のコードがアプリにバンドルされます。これにより、アプリの ML ランタイムをより詳細に制御できますが、アプリのダウンロード サイズが増加します。

これらのランタイム環境に Android アプリからアクセスするには、アプリ開発環境に LiteRT 開発ライブラリを追加します。アプリで標準ランタイム環境を使用する方法については、次のセクションをご覧ください。

ライブラリ

Interpreter API には、Google Play 開発者サービスを使用してアクセスできます。Android アプリで LiteRT のコア ライブラリとサポート ライブラリを使用できます。LiteRT ライブラリとランタイム環境の使用に関するプログラミングの詳細については、Android 向け開発ツールをご覧ください。

モデルを取得する

Android アプリでモデルを実行するには、LiteRT 形式のモデルが必要です。事前構築済みのモデルを使用することも、モデルを構築して Lite 形式に変換することもできます。Android アプリのモデルの取得について詳しくは、LiteRT のモデルのページをご覧ください。

入力データを処理する

ML モデルに渡すデータは、特定のデータ構造を持つテンソルである必要があります。このデータ構造は、テンソルのシェイプと呼ばれることがよくあります。モデルでデータを処理するには、アプリコードで、画像、テキスト、音声データなどのネイティブ形式のデータを、モデルに必要な形状のテンソルに変換する必要があります。

推論を実行する

モデルを介してデータを処理し、予測結果を生成することを、推論の実行といいます。Android アプリで推論を実行するには、LiteRT ランタイム環境モデル入力データが必要です。

特定のデバイスでモデルが推論を生成できる速度は、処理されるデータのサイズ、モデルの複雑さ、メモリや CPU などの利用可能なコンピューティング リソース、またはアクセラレータと呼ばれる専用プロセッサによって異なります。ML モデルは、グラフィック プロセッシング ユニット(GPU)や Tensor Processing Unit(TPU)などの専用プロセッサで、デリゲートと呼ばれる LiteRT ハードウェア ドライバを使用して高速に実行できます。デリゲートとモデル処理のハードウェア アクセラレーションについて詳しくは、ハードウェア アクセラレーションの概要をご覧ください。

出力結果を処理する

モデルは予測結果をテンソルとして生成します。Android アプリは、アクションを実行するか、ユーザーに結果を表示することで、このテンソルを処理する必要があります。モデルの出力結果は、画像分類の単一の結果に対応する数値(0 = 犬、1 = 猫、2 = 鳥)のように単純なものから、画像内の複数の分類されたオブジェクトの複数の境界ボックスと、0 ~ 1 の予測信頼度評価など、はるかに複雑な結果まであります。

高度な開発パス

より高度でカスタマイズされた LiteRT モデルを使用する場合は、上記よりも高度な開発アプローチが必要になることがあります。以降のセクションでは、Android アプリで LiteRT 用にモデルを実行して開発するための高度な手法について説明します。

高度なランタイム環境

LiteRT の標準ランタイム環境と Google Play 開発者サービス ランタイム環境に加えて、Android アプリで使用できるランタイム環境がいくつかあります。これらの環境が最も役立つのは、LiteRT の標準ランタイム環境でサポートされていない ML オペレーションを使用する ML モデルがある場合です。

LiteRT Flex ランタイムを使用すると、モデルに必要な特定の演算子を含めることができます。モデルを実行するための高度なオプションとして、Android 用の LiteRT をビルドして、TensorFlow 機械学習モデルの実行に必要な演算子やその他の機能を含めることができます。詳しくは、Android 向け LiteRT をビルドするをご覧ください。

C および C++ API

LiteRT は、C と C++ を使用してモデルを実行するための API も提供します。アプリで Android NDK を使用している場合は、この API の使用を検討してください。複数のプラットフォーム間でコードを共有できるようにしたい場合も、この API の使用を検討してください。この開発オプションの詳細については、開発ツールのページをご覧ください。

サーバーベースのモデル実行

一般に、アプリのモデルは Android デバイスで実行して、レイテンシの短縮とユーザーのデータ プライバシーの向上を実現する必要があります。ただし、クラウド サーバーでデバイス外でモデルを実行する方が適している場合もあります。たとえば、ユーザーの Android デバイスに収まるサイズに簡単に圧縮できない、またはそれらのデバイスで妥当なパフォーマンスで実行できない大きなモデルがある場合などです。このアプローチは、幅広いデバイスでモデルのパフォーマンスを一定に保つことが最優先事項である場合にも推奨されます。

Google Cloud は、AI モデルの実行に必要なサービス一式を提供しています。詳細については、Google Cloud の AI と ML のプロダクトのページをご覧ください。

カスタムモデルの開発と最適化

より高度な開発パスには、カスタムの ML モデルの開発や、Android デバイスでの使用向けにそれらのモデルを最適化することが含まれる可能性があります。カスタムモデルを構築する場合は、メモリと処理費用を削減するために、モデルに量子化手法を適用することを検討してください。LiteRT で使用する高パフォーマンス モデルを構築する方法について詳しくは、モデル セクションのパフォーマンスのベスト プラクティスをご覧ください。

サポートされている Android バージョン

LiteRT バージョン ステータス 最小 SDK レベル 最小 NDK バージョン(使用する場合) リリース日
v1.2.0 ⚠️ 非推奨 21(Android 5 Lollipop) r26a 2025-03-13
v1.3.0 ⚠️ 非推奨 21(Android 5 Lollipop) r26a 2025-05-19
v1.4.0 ⚠️ 非推奨 26(Android 8 Oreo) r26a 2025-06-25
v1.4.1 ✅ 有効 21(Android 5 Lollipop) r26a 2025-11-07
v2.0.3 ✅ 有効 26(Android 8 Oreo) r26a 2025-11-08
v2.1.0 今後の予定 23(Android 6 Marshmallow) r26a まだリリースされていません

重要: 最新の機能とセキュリティ アップデートとの互換性を確保するため、依存関係を最新の状態に保ってください。

コンパイル済みモデル API とインタープリタ API

  • Compiled Model API - アクセラレータ優先、AOT/JIT コンパイル実行、統合バッファ相互運用と非同期パイプライン。
  • インタープリタ API - 既存の TensorFlow Lite スタイルのコードとの下位互換性があります。

実行時にどちらの API を選択することもできますが、新しいパフォーマンス機能とアクセラレータ機能のほとんどは、コンパイル済みモデル API に実装されています。

実装例については、以下をご覧ください。

Common & CPU

ランタイム機能 Interpreter API コンパイル済みモデル API
プロファイリング
エラー レポーター
I/O バッファの相互運用(TensorBuffer/Environment) --
ターンキー アクセラレータの選択 --
Sync exec
カスタム オペレーション
XNNPACK の構成
動的シェイプ

GPU

ランタイム機能 Interpreter API コンパイル済みモデル API
Sync exec
メモリ キャッシュ
CPU フォールバック
非同期実行 --
ゼロコピー バッファ(AHWB/GLBuffer/Texture) --
MLD OpenCL バックエンド
MLD WebGPU バックエンド(新規) --
MLD Metal のサポート(新機能) --

NPU

ランタイム機能 Interpreter API コンパイル済みモデル API
Sync exec
非同期実行(Pixel) --
CPU フォールバック
GPU フォールバック --
ゼロバッファコピー(AHWB) --
QC/MTK AOT --
Pixel AOT --
QC/MTK/Pixel JIT --

クイックスタート(コンパイル済みモデル API)

Compiled Model API を使用して推論を実行するには、次の主な手順を行います。

  1. 互換性のあるモデルを読み込みます。
  2. 入力テンソル バッファと出力テンソル バッファを割り当てます。
  3. コンパイルされたモデルを呼び出します。
  4. 推論を出力バッファに読み取ります。

次のコード スニペットは、Kotlin と C++ でのプロセス全体の基本的な実装を示しています。

C++

// Load model and initialize runtime
LITERT_ASSIGN_OR_RETURN(auto model, Model::CreateFromFile("mymodel.tflite"));
LITERT_ASSIGN_OR_RETURN(auto env, Environment::Create({}));
LITERT_ASSIGN_OR_RETURN(auto compiled_model,
    CompiledModel::Create(env, model, kLiteRtHwAcceleratorCpu));

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

// Fill the first input
float input_values[] = { /* your data */ };
input_buffers[0].Write<float>(absl::MakeConstSpan(input_values, /*size*/));

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

// Read the output
std::vector<float> data(output_data_size);
output_buffers[0].Read<float>(absl::MakeSpan(data));

Kotlin

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

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

詳細については、Kotlin を使ってみるC++ を使ってみるのガイドをご覧ください。

主な機能(コンパイル済みモデル API)

  • ターンキー アクセラレータの選択と非同期 - 作成時に CPU/GPU/NPU を選択し、デリゲートの配管なしで非同期実行します。
  • 統合されたゼロコピー バッファ - 前処理/後処理と推論の間で AHWB/GL/OpenCL/WebGPU/Metal バッファを共有します。
  • 生成対応スループット - メモリ キャッシュと GPU/NPU フォールバックを備えた大規模モデル向けに最適化されています。

Interpreter API は、既存の TensorFlow Lite コードベースの互換性パスとして残ります。安定したデリゲート動作や、従来のインタープリタを想定したサードパーティ製ラッパーが必要な場合は、この API を使用してください。

アクセラレータ

  • CPU(デフォルト): XNNPACK 最適化、動的形状をサポート。
  • GPU: 現在は OpenCL バックエンド。WebGPU バックエンドと Metal バックエンドは、コンパイル済みモデル API を通じて利用できます。
  • NPU: Qualcomm AI Engine Direct と MediaTek NeuroPilot は AOT/JIT でサポートされています。Pixel AOT が利用可能です。Apple/Intel NPU のサポートが予定されています。

API を選択するタイミング

  • GPU/NPU への最速パス、ゼロコピー バッファ、非同期実行が必要な場合は、コンパイル済みモデル API を使用します。
  • 既存の TensorFlow Lite コード、ツール、デリゲートとの互換性を最大限に高める必要がある場合は、Interpreter API を使用します。