TF Lite Delegate: その概要、GPUおよびNNAPIデリゲート

著者: IT Sectr 公開日: 2026-07-18 読了時間: 10 分

TF Lite Delegate はTensorFlow Liteのコンポーネントで、ニューラルネットワーク操作の実行を専用ハードウェア(GPU、NPU、DSP、最適化CPU)にリダイレクトします。デリゲートがない場合、モデルは完全互換モードでCPU上で実行されます — 遅いですが予測可能です。デリゲートはチップとモデルに応じて推論を3~10倍高速化します。TensorFlow、2025によると、GPUおよびNNAPIデリゲートは精度を大きく損なうことなく推論レイテンシを60~90%削減します。

重要なポイント

  • TF Lite Delegate — TensorFlow Liteモデルのハードウェア高速化レイヤー
  • GPU Delegate — OpenGL/Metalを介して浮動小数点演算を高速化
  • NNAPI Delegate — NPUおよびDSPにAndroid Neural Networks APIを使用
  • XNNPACK Delegate — SIMD命令(ARM NEON、SSE)によるCPU最適化
  • Core ML Delegate — iOSでApple Neural Engineとネイティブ統合

TF Lite Delegateとは:アーキテクチャと動作原理

TF Lite Delegate はTensorFlow Lite Runtimeとデバイスのハードウェアアクセラレータ間のソフトウェアアダプタです。デリゲートはモデルグラフの操作(畳み込み、プーリング、行列乗算)をインターセプトし、CPUの代わりに専用の計算ユニットで実行します。デリゲートが特定の操作をサポートしていない場合、その操作はCPUで実行されます — これを部分デリゲーションと呼びます。

TF Lite Delegateのアーキテクチャ はSimpleDelegate APIインターフェースとC++のTfLiteDelegate構造体を中心に構築されています。各デリゲートはグラフノードのデリゲーション、メモリ割り当て、ターゲットデバイスでの実行のメソッドを実装します。開発者はInvokeを呼び出す前にInterpreter::ModifyGraphWithDelegateを介してデリゲートを接続します。TensorFlowガイドによると、デリゲートはモデルのサポートされているすべての操作に自動的に適用されます。

互換性チェック は必須のステップです。すべての操作がすべてのデリゲートでサポートされているわけではありません。TensorFlow LiteはDelegation Compatibility Checkツールを提供しています:デリゲートでモデルを実行し、デリゲートされた操作(ops)の数を確認します。80%未満しかデリゲートされていない場合は、別のデリゲートを選択するかCPUを使用することを検討してください。TensorFlow(2025)によると、GPU Delegateは45の操作をサポートし、NNAPIは60以上をサポートします。

IT Sectrのプロジェクトでは、iOSにGPUデリゲート、AndroidにXNNPACKを組み込み互換性検証とともに使用しています:モデルはすべてのデリゲートでテストされ、少なくとも90%のデリゲーション完了率で最速のものが選択されます。

kotlin
// AndroidでのGPU Delegate接続
val gpuDelegate = GpuDelegate()
val options = Interpreter.Options().apply {
    addDelegate(gpuDelegate)
    setNumThreads(4)
}
val interpreter = Interpreter(modelBuffer, options)
interpreter.run(input, output)
gpuDelegate.close()

デリゲートされた操作の確認 — Interpreterを介した互換性制御。デフォルトでは、デリゲートはサポートするすべての操作を受け入れます。デバッグには、デリゲートされたノード数のログ記録を使用します。モデルにカスタム操作が含まれている場合、デリゲートはそれらを高速化しませんが、壊すこともありません — CPUで実行されます。

kotlin
// デリゲートされた操作数の確認
val delegateCount = interpreter.getDelegateOpsCount(gpuDelegate)
val totalNodes = interpreter.getNodesCount()
Log.d("TFLite", "デリゲート済み: $delegateCount / $totalNodes")
if (delegateCount < totalNodes * 0.8) {
    // 80%しきい値 — 別のデリゲートを選択
}

GPU Delegate:グラフィックプロセッサでの高速化

GPU Delegate はOpenGL ES 3.1以上(Android)またはMetal(iOS)を介してGPUでモデルを実行するためのTensorFlow Liteデリゲートです。グラフィックプロセッサは並列行列演算に最適化されており、Core MLおよび畳み込みニューラルネットワーク(CNN)が最も恩恵を受けます。GPU DelegateはMobileNet、EfficientNet、Inceptionなどのモデルで推論レイテンシを4~8倍削減します。

GPU Delegateの制限:すべての操作をサポートしているわけではなく(TF Liteの約120のうち45のみ)、OpenGL ES 3.1またはMetalが必要で、CPUより多くの電力を消費します。GPUはモバイルシナリオでバッチサイズが1より大きい場合に非効率的です。TensorFlowベンチマーク(2025)によると、Adreno 740 GPUを搭載したPixel 8では、MobileNetV2がGPUで4.2ms、CPUで18.7msで実行され、4.4倍の高速化となります。

GPU Delegateの設定 には精度選択が含まれます:float16は精度を低下させますが、ほとんどのタスクで品質の顕著な低下なしに推論を30~40%高速化します。最大のGPUパフォーマンスを得るにはallow_precision_loss=trueを有効にしてください。高精度タスク(医療、金融)にはfloat32を使用してください。

kotlin
// 精度最適化付きGPU Delegate
val gpuOptions = GpuDelegateFactory.Options().apply {
    isPrecisionLossAllowed = true
    inferencePreference = GpuDelegateFactory.Options.InferencePreference.SUSTAINED_SPEED
}
val delegate = GpuDelegateFactory.create(gpuOptions)

iOSのGPU Delegate はMetal Delegateを介してMetal Performance Shadersを使用します。iOSでは、デリゲートはApple Neural Engine用のCore MLデリゲートまたは直接Metalを介して動作します。Apple A17 ProはMobileNetV2を1.3msで実行し、CPUより6倍高速です。MetalデリゲートはiOS 12以降で利用可能で、A7+チップを搭載したすべてのデバイスをサポートしています。

NNAPI Delegate:Neural Networks APIを介したAndroidでのニューラルネットワーク

NNAPI Delegate(Android Neural Networks API)は、Android NN HAL(Hardware Abstraction Layer)を介してハードウェア高速化を使用するTF Liteデリゲートです。NNAPIは利用可能なデバイスドライバに応じてモデル操作をNPU、DSP、またはGPUにリダイレクトします。Android 8.1以上(API 27以上)でサポートされており、Androidのデフォルト推奨デリゲートです。

NNAPIの利点 — 自動アクセラレータ選択。デバイスにNPU(Qualcomm Hexagon、MediaTek APU、Samsung NPU)がある場合、NNAPIはそこに操作をデリゲートします。NPUがない場合はOpenCLを介してGPUへ。GPUもサポートされていない場合はDSP最適化とともにCPUへ。開発者は特定のアクセラレータを指定しません — NNAPIが最適なものを選択します。Google I/O 2024によると、Snapdragon 8 Gen 3のNNAPIデリゲートはLLMモデルを12倍高速化します。

NNAPIの制限:デバイス間でサポートにばらつきがあります。古いデバイス(Android 8.1)には限られたドライバセットしかありません。Kirin搭載のHuaweiはGoogle Servicesを介したNNAPIをサポートしていません — GPU Delegateを使用してください。保証された互換性のために、GoogleはGPUまたはXNNPACKへのフォールバックとともに、NNAPI Delegateを最初の選択肢として推奨しています。

kotlin
// CPUフォールバック付きNNAPI Delegate
val nnApiOptions = NnApiDelegate.Options().apply {
    acceleratorName = null // null = 自動選択
    allowFp16 = true
    executionPreference = NnApiDelegate.ExecutionPreference.SUSTAINED_SPEED
}
val delegate = NnApiDelegate(nnApiOptions)
val interpreter = Interpreter(model, Interpreter.Options().apply {
    addDelegate(delegate)
    setNumThreads(4)
})

NNAPIアクセラレータ名 — 明示的なアクセラレータ選択のためのパラメータ。nullを渡すと、NNAPIが自動的に選択します。テスト用に特定のものを指定します:"qti"、"google-edgetpu"、"mediatek"。利用可能なアクセラレータのリストはNnApiDelegate.getAvailableAccelerators()で出力されます。本番環境では、互換性しきい値を設定した自動選択を使用します。

XNNPACK Delegate:SIMDによるCPU最適化

XNNPACK Delegate はSIMD命令(ARM NEON、SSE、AVX)を介した最適化CPU実行のためのTensorFlow Liteデリゲートです。XNNPACKはGPUやNPUを必要としません — 純粋なCPUデリゲートですが、SIMD、オペレーターフュージョン、メモリプリフェッチ、量子化推論(INT8)により2~4倍の高速化を実現します。専用NPUがないデバイスや、保証された互換性が必要な場合に最適です。

XNNPACK はGoogleによってCPU用のデフォルトTF Liteデリゲートとして開発されました(デフォルトでTFLite Runtimeに含まれています)。90以上の操作をサポートしており、GPUやNNAPIよりも多くなっています。XNNPACKは量子化モデル(INT8、INT16)に特に効果的で、操作はfloat32バージョンの2~3倍高速に実行されます。Googleベンチマーク(2025)によると、XNNPACKはINT8 MobileNetV2をベースラインCPU比で2.8倍高速化します。

XNNPACK対GPU:NPUのないデバイスでは、XNNPACKは小さなバッチ(1~4)でGPU Delegateよりも高速なことがよくあります — GPUにはCPUとGPU間のデータ転送にオーバーヘッドがあります。XNNPACKは同じCPUアドレス空間で動作するため、メモリコピーが発生しません。5MBまでのモデルでは、XNNPACKがGPUより高速な場合があります。大規模なCNNモデルでは、並列処理によりGPUが勝ります。

kotlin
// TFLite 2.18+でデフォルト有効のXNNPACK Delegate
// XnnpackDelegateを使用した明示的な使用
val xnnpackOptions = XnnpackDelegate.Options().apply {
    numThreads = 4
    flags = XnnpackDelegate.Flags.USE_XNNPACK
}
val delegate = XnnpackDelegate(xnnpackOptions)
val interpreter = Interpreter(modelBuffer, Interpreter.Options().apply {
    addDelegate(delegate)
})

XNNPACKフラグ:USE_XNNPACK — デリゲートを強制的に有効化、FLUSH_TO_ZERO — 高速化のための非正規化数の処理、ENABLE_XNNPACK_SHAPES — 動的入力サイズ。最大の互換性を得るにはデフォルトオプションを使用します。古いデバイスでエラーが発生した場合はXNNPACKを無効にします — モデルはCPU上で引き続き動作しますが低速になります。

Core MLおよびMetal Delegate:iOSでの高速化

Core ML Delegate はApple Core ML Frameworkを使用するiOS用のTensorFlow Liteデリゲートです。Core MLはTF Liteモデルを.mlmodel形式に変換し、Apple Neural Engine(ANE)、GPU(Metal)、またはCPUで実行します。Apple A17 ProおよびM3には専用のNeural Engineがあり、Core MLが自動的に使用します。Core ML Delegateは最新のiOSデバイスでCPUと比較して推論を5~10倍高速化します。

iOSのCore ML はflex delegate(Core MLで利用可能な操作の動的デリゲーション)とフルモデル変換(モデル全体を.mlmodelに変換)をサポートしています。Appleはflex delegateを推奨しています — 事前変換なしでランタイムで動作するため高速です。Core ML Delegateはfloat32、float16、および量子化モデル(INT8)をサポートしています。

Metal Delegate はMetal Performance Shadersと直接動作する低レベルのデリゲートです。Core MLが特定の操作をサポートしない場合にMetalを使用します。Metal DelegateはGPUを最大限に制御できますが、より多くのコードが必要です。Apple(WWDC 2024)によると、ネイティブSwiftモデル用のMetal Delegateは変換オーバーヘッドがないため、Core MLより15~20%高速になる可能性があります。

swift
// TFLite Swift APIを介したiOSのCore ML Delegate
import TensorFlowLite

let coreMLDelegate = CoreMLDelegate()
var options = InterpreterOptions()
options.addDelegate(coreMLDelegate)

let interpreter = try Interpreter(modelPath: modelPath, options: options)
try interpreter.invoke(at: 0)

Core MLとMetalの選択:本番環境にはCore ML、エッジケースにはMetal。Core MLは自動的にNEメモリを管理し、CPUフォールバックをサポートし、手動変換を必要としません。Metalはバッファ制御を提供し、カスタム操作に適しています。IT Sectrのプロジェクトでは、すべてのiOSモデルにCore ML Delegateを使用し、リアルタイムビデオ分析タスクにのみMetalを使用しています。

プロジェクトに適したデリゲートの選び方

TF Lite Delegateの選択 はターゲットプラットフォーム、モデル、レイテンシ要件によって異なります。普遍的に最適なデリゲートはありません — それぞれに長所と短所があります。最適な戦略は、ターゲットデバイスで利用可能なすべてのデリゲートをテストし、必要最小限の速度のものを選択することです — 最速ではなく、必要最小限で十分なものです。

デリゲートプラットフォーム高速化互換性
GPUAndroid、iOS4~8倍45操作
NNAPIAndroid 8.1以上3~12倍60操作以上
XNNPACKAndroid、iOS2~4倍90操作以上
Core MLiOS 12以上5~10倍50操作以上

選択の推奨事項:NPU搭載Android(Snapdragon 8 Gen 2以上、Dimensity 9000以上) — NNAPI Delegate。NPUなしのAndroid — XNNPACK Delegate(デフォルト)。iOS — Core ML Delegate。クロスプラットフォームプロジェクトでは、AndroidでNNAPI、iOSでCore ML、フォールバックとしてXNNPACKという戦略を使用します。GPU Delegate — NNAPIが利用できず、XNNPACKが十分に高速でない場合。

レイテンシテスト は選択の必須ステップです。最低温度(冷えたデバイス)と5分間の連続動作後(サーマルスロットリング)の推論を測定します。GPUとNNAPIは加熱時にパフォーマンスが低下する可能性があります。XNNPACK(CPU)は影響を受けにくいです。TensorFlow Lite Benchmark Toolを使用して、デバイス上のすべてのデリゲートを自動テストします。

kotlin
// デリゲート選択戦略
fun selectDelegate(): TfLiteDelegate {
    return when {
        NnApiDelegate.getAvailableAccelerators()?.isNotEmpty == true ->
            NnApiDelegate()
        GpuDelegateFactory.isGpuDelegateAvailable() ->
            GpuDelegate()
        else -> XnnpackDelegate()
    }
}

フォールバック戦略 — 例外なしでモデルをロードします:デリゲートがサポートされていない場合はCPUで実行します。TensorFlow Liteはデリゲート作成エラー時にIllegalArgumentExceptionをスローします。デリゲート作成をtry-catchでラップし、エラー時にはデリゲートなしでモデルを実行します。遅くても動作するAIは、ユーザにとってエラーよりも優れています。

よくある質問

TF Lite Delegateを簡単に説明すると?

TF Lite Delegate はモバイルデバイス上のニューラルネットワーク用のアクセラレータです。モデルをCPUでゆっくり実行する代わりに、デリゲートは計算をGPUまたは専用のニューラルチップ(NPU)に送信します。CPUを汎用ツール、デリゲートを特定のタスク用の専用機械と考えてください:同じことを行いますが、何倍も高速です。

最速のTF Liteデリゲートは?

最速のデリゲートはデバイスによって異なります。Neural Engine(Apple A17 Pro、Snapdragon 8 Gen 3)搭載デバイスでは、NNAPI(Android)またはCore ML(iOS)が最大10~12倍の高速化を提供します。GPU Delegateが2番目に高速です。XNNPACK(CPU)はデリゲートの中で最も低速ですが、最も互換性があります。NPUのないデバイスでは、XNNPACKまたはGPUが最適な場合があります。

TF Lite Delegateはすべての操作をサポートしていますか?

いいえ、各デリゲートは限られた操作セットをサポートしています。GPU Delegate — 45操作、NNAPI — 60以上、XNNPACK — 90以上。サポートされていない操作はCPUで実行されます(部分デリゲーション)。カスタム操作の場合、デリゲートは適用されません。使用前にgetDelegateOpsCountで互換性を確認してください — 80%未満のノードしかデリゲートされていない場合は、別のデリゲートを選択してください。

AndroidでTF Lite Delegateを設定するには?

build.gradleに依存関係を追加します:implementation 'org.tensorflow:tensorflow-lite-gpu-delegate:+' または 'org.tensorflow:tensorflow-lite:x.x.x'(XNNPACKは組み込み)。デリゲートを作成し(GpuDelegate()、NnApiDelegate()、XnnpackDelegate())、Interpreter.Options.addDelegate()に渡します。インタプリタを実行するとデリゲートが自動的に適用されます。実行後はclose()でデリゲートを閉じます。

複数のデリゲートを同時に使用できますか?

はい、TF Liteは複数のデリゲートをサポートしています — 順次適用されます。インタプリタは最初のデリゲートに操作をデリゲートしようとし、次に2番目、というように進みます。どのデリゲートも操作をサポートしない場合、CPUで実行されます。これはフォールバックに便利です:最初にNNAPI、次にGPU、次にXNNPACK。追加順序が優先順位に影響します。

まとめ

  • TF Lite Delegate — モバイルデバイス上のTensorFlow Liteモデル用ハードウェアアクセラレータ
  • GPU Delegate — OpenGL ES(Android)またはMetal(iOS)による高速化、CPU比4~8倍
  • NNAPI Delegate — Android Neural Networks API経由、NPU/DSP/GPU使用、3~12倍
  • XNNPACK Delegate — SIMDによるCPU最適化、2~4倍、最大互換性(90操作以上)
  • Core ML Delegate — Neural EngineとMetalによるiOS高速化、5~10倍
  • デリゲート選択 — ターゲットデバイスでテスト、CPUフォールバックを使用
  • 部分デリゲーション — サポートされていない操作はCPUで自動実行

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください