フィジカルAI・IoTツール
エッジAI開発

AIモデルをエッジデバイスにデプロイする方法|TensorFlow Lite vs ONNX Runtime

クラウドで学習したAIモデルをエッジデバイスで動かすには、モデルの変換・最適化が必要です。本記事では、代表的なエッジ推論フレームワーク「TensorFlow Lite」と「ONNX Runtime」の特徴を比較し、Raspberry PiやJetsonへのデプロイ手順を解説します。

※本記事の手順は参考情報です。各フレームワークの公式ドキュメントも必ずご確認ください。

エッジデプロイの基本概念

クラウドで学習したモデル(PyTorch, TensorFlowなど)をそのままエッジデバイスで動かすのは困難です。理由は以下の2点です。

  • 1. **メモリ制約**: エッジデバイスのRAMは数GB〜数十MBと限られている
  • 2. **演算性能**: GPU非搭載のデバイスでは浮動小数点演算が遅い
  • そのためエッジデプロイでは「モデル変換」と「量子化」が鍵になります。

    TensorFlow Lite(TFLite)

    ### 概要

    Googleが開発したモバイル・エッジ向け推論フレームワーク。AndroidやRaspberry Piでの利用実績が豊富。

    ### 対応ハードウェア

  • Raspberry Pi(ARM CPU)
  • Android / iOS
  • Google Coral Edge TPU(EdgeTPUデリゲート使用時)
  • マイクロコントローラー(TFLite Micro)
  • ### 変換手順

    ```python

    import tensorflow as tf

    # TFLite変換

    converter = tf.lite.TFLiteConverter.from_saved_model('model_dir')

    # INT8量子化の有効化

    converter.optimizations = [tf.lite.Optimize.DEFAULT]

    # 代表データセットで量子化

    converter.representative_dataset = representative_data_gen

    converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]

    tflite_model = converter.convert()

    with open('model_quant.tflite', 'wb') as f:

    f.write(tflite_model)

    ```

    ### パフォーマンス目安(Raspberry Pi 4での画像分類)

  • Float32モデル: 約500〜800ms/推論
  • INT8量子化モデル: 約150〜300ms/推論(約2〜3倍高速化)
  • Edge TPU(Coral USB)使用時: 約5〜20ms/推論
  • ONNX Runtime

    ### 概要

    Microsoftが主導するオープン標準フレームワーク。PyTorchモデルのエッジデプロイに最適。様々なバックエンドに対応。

    ### 対応ハードウェア

  • x86 / ARM CPU(Raspberry Pi含む)
  • CUDA GPU(NVIDIA Jetson)
  • TensorRT(JetsonでのGPU高速化)
  • DirectML(Windows環境のGPU)
  • ### 変換手順(PyTorchから)

    ```python

    import torch

    import torch.onnx

    # PyTorchモデルをONNXに変換

    model = MyModel()

    dummy_input = torch.randn(1, 3, 224, 224)

    torch.onnx.export(

    model,

    dummy_input,

    'model.onnx',

    opset_version=17,

    input_names=['input'],

    output_names=['output']

    )

    ```

    ```python

    # ONNX Runtimeでの推論

    import onnxruntime as ort

    import numpy as np

    session = ort.InferenceSession('model.onnx')

    result = session.run(None, {'input': input_array})

    ```

    ### JetsonでのTensorRT高速化

    NVIDIA Jetsonでは、TensorRTプロバイダーを使ってGPU推論を大幅に高速化できます。

    ```python

    session = ort.InferenceSession(

    'model.onnx',

    providers=['TensorrtExecutionProvider', 'CUDAExecutionProvider']

    )

    ```

    TFLite vs ONNX Runtime 比較表

    | 比較項目 | TFLite | ONNX Runtime |

    |---------|--------|-------------|

    | 元のフレームワーク | TensorFlow | PyTorch・多数 |

    | Raspberry Pi対応 | ◎ | ◎ |

    | Jetson(GPU)対応 | △ | ◎(TensorRT) |

    | マイクロコントローラー | ◎(TFLite Micro) | △ |

    | 量子化サポート | ◎ | ○ |

    | モデルの互換性 | TFモデルのみ | 多フレームワーク |

    量子化の効果と注意点

    ### INT8量子化のメリット

  • モデルサイズが約1/4に圧縮される(100MB → 25MB)
  • 推論速度が2〜4倍向上
  • メモリ使用量が削減
  • ### 精度低下のリスク

    量子化により精度(Accuracy)が0.5〜2%程度低下することがあります。精度が重要な用途(医療、品質検査など)では、十分な検証データでの評価が必須です。

    ### 量子化の推奨手順

  • 1. FP32モデルでのベースライン精度を記録
  • 2. 代表データセット(1,000〜2,000サンプル)でキャリブレーション
  • 3. INT8量子化を適用
  • 4. 精度差が許容範囲内(1%以内など)か確認
  • 5. エッジデバイスで推論速度を実測
  • デバイス別推奨フレームワーク

    **Raspberry Pi(ARM CPU)**

    → TFLite(INT8量子化)またはONNX Runtime(CPU provider)

    **NVIDIA Jetson(GPU搭載)**

    → ONNX Runtime + TensorRTプロバイダー、またはTensorRT直接利用

    **Google Coral(Edge TPU)**

    → TFLite(EdgeTPUコンパイル必須)

    **マイクロコントローラー(ESP32等)**

    → TFLite Micro、またはEloquent ML

    コスト比較ツールの活用

    エッジデプロイによってどの程度コストを削減できるか、AI推論コスト計算機で試算できます。クラウドAPIを使い続ける場合との費用比較を行い、エッジ化の費用対効果を事前に把握してから移行を進めることをお勧めします。

    まとめ

    AIモデルのエッジデプロイには、フレームワーク選定・量子化・ハードウェア対応の3つを組み合わせた最適化が必要です。TFLiteはRaspberry Piやマイコン向けに充実しており、ONNX RuntimeはNVIDIA Jetsonでの本格GPU推論に強みがあります。まずAI推論コスト計算機でコスト見通しを確認し、ビジネスケースを固めてから実装に進みましょう。

    関連ツール