LiteRT を使用すると、Android アプリで TensorFlow、PyTorch、JAX モデルを実行できます。LiteRT システムは、ハードウェア アクセラレーションのオプションなど、Android でモデルを迅速かつ効率的に実行するための、事前構築済みのカスタマイズ可能な実行環境を提供します。
LiteRT を使用する Android アプリの例については、LiteRT サンプル リポジトリをご覧ください。
機械学習モデル
LiteRT は、TensorFlow、PyTorch、JAX モデルを使用します。これらのモデルは、より小さく、ポータブルで、より効率的な ML モデル形式に変換されます。Android では、LiteRT で事前ビルド済みモデルを使用できます。また、独自のモデルをビルドして LiteRT 形式に変換することもできます。
このページでは、すでに構築された ML モデルの使用について説明します。モデルの構築、トレーニング、テスト、変換については説明しません。LiteRT 用 ML モデルの選択、変更、構築、変換の詳細については、モデル ページをご覧ください。
Android でモデルを実行する
Android アプリ内で実行される LiteRT モデルは、データを取得して処理し、モデルのロジックに基づいて予測を生成します。LiteRT モデルを実行するには、特別なランタイム環境が必要です。モデルに渡されるデータは、テンソルと呼ばれる特定のデータ形式にする必要があります。モデルがデータを処理する(推論を実行する)と、予測結果が新しいテンソルとして生成され、Android アプリに渡されます。これにより、結果をユーザーに表示したり、追加のビジネス ロジックを実行したりなどのアクションを実行できます。
図 1. Android アプリの LiteRT モデルの機能実行フロー。
機能設計レベルでは、LiteRT モデルを実行するために Android アプリに次の要素が必要です。
- モデルを実行するための LiteRT ランタイム環境
- データをテンソルに変換するモデル入力ハンドラ
- 出力結果テンソルを受け取って予測結果として解釈するモデル出力ハンドラ
以降のセクションでは、LiteRT ライブラリとツールがこれらの機能要素を提供する方法について説明します。
LiteRT でアプリを作成する
このセクションでは、Android アプリに LiteRT を実装するための推奨される一般的な方法について説明します。特に、ランタイム環境と開発ライブラリのセクションに注意してください。カスタムモデルを開発している場合は、高度な開発パスのセクションをご確認ください。
ランタイム環境のオプション
Android アプリでモデルを実行するためのランタイム環境を有効にする方法はいくつかありますが、推奨されるオプションは次のとおりです。
- Google Play 開発者サービスのランタイム環境の LiteRT(推奨)
- スタンドアロンの LiteRT ランタイム環境
一般的に、Google Play 開発者サービスが提供するランタイム環境を使用することをおすすめします。これは、動的に読み込まれるため、スタンダード環境よりもスペース効率が高く、アプリのサイズを小さく保つことができるためです。また、Google Play 開発者サービスでは、LiteRT ランタイムの最新の安定版が自動的に使用されるため、時間の経過とともに機能が追加され、パフォーマンスが向上します。Google Play 開発者サービスが含まれていないデバイスでアプリを提供する場合や、ML ランタイム環境を厳密に管理する必要がある場合は、標準の LiteRT ランタイムを使用する必要があります。このオプションでは、追加のコードをアプリにバンドルします。これにより、アプリ内の ML ランタイムをより細かく制御できますが、アプリのダウンロード サイズが増加します。
Android アプリでこれらのランタイム環境にアクセスするには、LiteRT 開発ライブラリをアプリ開発環境に追加します。アプリで標準ランタイム環境を使用する方法については、次のセクションをご覧ください。
ライブラリ
Google Play サービスを使用して Interpreter API にアクセスできます。Android アプリでは、LiteRT のコアとサポート ライブラリを使用できます。LiteRT ライブラリとランタイム環境の使用に関するプログラミングの詳細については、Android 向け開発ツールをご覧ください。
モデルを取得する
Android アプリでモデルを実行するには、LiteRT 形式のモデルが必要です。事前構築済みモデルを使用することも、モデルを構築して Lite 形式に変換することもできます。Android アプリのモデルの取得方法については、LiteRT のモデルのページをご覧ください。
入力データを処理する
ML モデルに渡すデータは、特定のデータ構造を持つテンソルである必要があります。このデータ構造は、テンソルの形状と呼ばれることもあります。モデルでデータを処理するには、アプリコードでデータをネイティブ形式(画像、テキスト、音声データなど)から、モデルに必要な形状のテンサーに変換する必要があります。
推論を実行する
モデルを介してデータを処理して予測結果を生成するプロセスを推論の実行といいます。Android アプリで推論を実行するには、LiteRT ランタイム環境、モデル、入力データが必要です。
モデルが特定のデバイスで推論を生成できる速度は、処理されるデータのサイズ、モデルの複雑さ、利用可能なコンピューティング リソース(メモリ、CPU、アクセラレータと呼ばれる専用プロセッサなど)によって異なります。機械学習モデルは、グラフィック プロセッシング ユニット(GPU)や Tensor Processing Unit(TPU)などの専用プロセッサで、デリゲートと呼ばれる LiteRT ハードウェア ドライバを使用して高速に実行できます。モデル処理のデリゲートおよびハードウェア アクセラレーションについて詳しくは、ハードウェア アクセラレーションの概要をご覧ください。
出力結果を処理する
モデルは予測結果をテンソルとして生成します。この結果は、アクションを実行するか、結果をユーザーに表示することで、Android アプリで処理する必要があります。モデルの出力結果は、画像分類の単一の結果に対応する数値(0 = 犬、1 = 猫、2 = 鳥)のように単純なものから、画像内の複数の分類対象オブジェクトの複数の境界ボックスや、0 ~ 1 の予測信頼度など、はるかに複雑な結果までさまざまです。
高度な開発パス
より高度でカスタマイズされた LiteRT モデルを使用する場合は、上記よりも高度な開発アプローチが必要になる場合があります。以降のセクションでは、Android アプリでモデルを実行し、LiteRT 用にモデルを開発するための高度な手法について説明します。
高度なランタイム環境
LiteRT の標準ランタイム環境と Google Play 開発者サービスのランタイム環境に加えて、Android アプリで使用できるランタイム環境が他にもあります。これらの環境は、LiteRT の標準ランタイム環境でサポートされていない ML オペレーションを使用する ML モデルがある場合に最も適しています。
- LiteRT のFlex ランタイム
- カスタムビルドの LiteRT ランタイム
LiteRT Flex ランタイムを使用すると、モデルに必要な特定のオペレータを追加できます。モデルの実行の高度なオプションとして、LiteRT for Android をビルドして、TensorFlow 機械学習モデルの実行に必要な演算子などの機能を含めることができます。詳細については、Android 用 LiteRT をビルドするをご覧ください。
C と C++ API
LiteRT には、C と C++ を使用してモデルを実行するための API も用意されています。アプリで Android NDK を使用している場合は、この API の使用を検討してください。複数のプラットフォーム間でコードを共有する場合は、この API の使用も検討してください。この開発オプションの詳細については、開発ツールのページをご覧ください。
サーバーベースのモデル実行
一般に、レイテンシの短縮とユーザーのデータ プライバシーの向上を実現するには、Android デバイス上のアプリでモデルを実行する必要があります。ただし、デバイスではなくクラウド サーバーでモデルを実行するほうが適切なソリューションである場合もあります。たとえば、ユーザーの Android デバイスに収まるサイズに簡単に圧縮できない大規模なモデルがある場合や、それらのデバイスで妥当なパフォーマンスで実行できるモデルがある場合などです。また、幅広いデバイスでモデルの一貫したパフォーマンスが最優先である場合は、このアプローチが推奨されるソリューションになることもあります。
Google Cloud には、AI モデルの実行に必要な一連のサービスが用意されています。詳細については、Google Cloud の AI と ML のプロダクトのページをご覧ください。
カスタムモデルの開発と最適化
より高度な開発パスでは、カスタム機械学習モデルの開発や、Android デバイスでの使用に向けてモデルの最適化が含まれる可能性があります。カスタムモデルを構築する場合は、モデルに量子化手法を適用して、メモリと処理費用を削減することを検討してください。LiteRT で使用する高パフォーマンス モデルを作成する方法については、モデル セクションのパフォーマンスのベスト プラクティスをご覧ください。