LiteRT Next の概要

LiteRT Next は、特にオンデバイス ML と AI アプリケーションのハードウェア アクセラレーションとパフォーマンスにおいて、LiteRT を改善した新しい API セットです。この API はアルファ版リリースで、Kotlin と C++ で利用できます。

LiteRT Next Compiled Model API は TensorFlow Lite Interpreter API を基盤としており、デバイス上の ML のモデルの読み込みと実行プロセスを簡素化します。新しい API は、ハードウェア アクセラレーションを効率的に使用するための新しい方法を提供します。これにより、モデルの FlatBuffers、I/O バッファの相互運用性、デリゲートを扱う必要がなくなります。LiteRT Next API は LiteRT API と互換性がありません。LiteRT Next の機能を使用するには、スタートガイドをご覧ください。

LiteRT Next の実装例については、次のデモ アプリケーションをご覧ください。

クイックスタート

LiteRT Next 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++ を使ってみるのガイドをご覧ください。

主な機能

LiteRT Next には、次の主なメリットと機能があります。

  • 新しい LiteRT API: アクセラレータの自動選択、真の非同期実行、効率的な I/O バッファ処理により、開発を効率化します。
  • クラス最高の GPU パフォーマンス: デバイス上の ML に最先端の GPU アクセラレーションを使用します。新しいバッファの相互運用により、ゼロコピーが可能になり、さまざまな GPU バッファタイプ間でレイテンシが最小化されます。
  • 優れた生成 AI 推論: GenAI モデルで最高のパフォーマンスを実現する最もシンプルな統合を可能にします。
  • 統合 NPU アクセラレーション: 一貫したデベロッパー エクスペリエンスで、主要なチップセット プロバイダの NPU にシームレスにアクセスできます。LiteRT NPU アクセラレーションは、早期アクセス プログラムを通じて利用できます。

主な改善点

LiteRT Next(Compiled Model API)には、LiteRT(TFLite Interpreter API)の次の重要な改善点が含まれています。LiteRT Next を使用してアプリを設定する包括的なガイドについては、スタートガイドをご覧ください。

  • アクセラレータの使用: LiteRT で GPU でモデルを実行するには、明示的なデリゲートの作成、関数呼び出し、グラフの変更が必要です。LiteRT Next では、アクセラレータのみを指定します。
  • ネイティブ ハードウェア バッファの相互運用性: LiteRT にはバッファのオプションはなく、すべてのデータを CPU メモリ経由で強制的に転送します。LiteRT Next では、Android ハードウェア バッファ(AHWB)、OpenCL バッファ、OpenGL バッファ、その他の特殊なバッファを渡すことができます。
  • 非同期実行: LiteRT Next には、同期フェンスに基づく真の非同期メカニズムを提供する、再設計された非同期 API が付属しています。これにより、さまざまなタスクにさまざまなハードウェア(CPU、GPU、CPU、NPU など)を使用することで、全体的な実行時間が短縮されます。
  • モデルの読み込み: LiteRT Next では、モデルの読み込み時に個別のビルダー ステップは必要ありません。