「モデルの最適化は完璧なはずなのに、実機に乗せたら全然ダメだった…」そんな経験、ありませんか? 😅
開発用の高スペックマシンでは爆速だったのに、Androidデバイスに載せた途端に動作がカクカクして、端末がアッツアツになる。これ、Edge AI開発あるあるなんですよね。
今回は、そんな悩みをズバッと解決する「プロファイリング」というアプローチについて解説します。「勘に頼るのをやめて、データで最適化しよう」というのが今注目されているテーマです。
🤔 そもそも何が起きているのか?

問題の根本はシンプルです。開発環境と実機の差を無視したまま最適化しているから、です。
Androidデバイスには、CPUだけじゃなくGPU・NPU(ニューラルプロセッサ)・DSPなど複数の演算リソースがあります。どのリソースを使うかによって、速度も消費電力もまったく変わってくるんですよね。
しかもモバイル端末はサーマルスロットリング(熱くなったら自動的に処理速度を下げる仕組み)が働くので、3分後には別の端末みたいに遅くなることも。
🔍 プロファイリングで「見える化」しよう
「なんか遅い」を「どこが遅いのか」に変えるのがプロファイリングです。Android開発では主に以下のツールが使えます。
- ✅ Android Profiler(Android Studio内蔵):CPU・メモリ・バッテリーをリアルタイムで可視化
- ✅ Systrace / Perfetto:より細かいスレッド単位の分析が可能
- ✅ TensorFlow Lite Benchmark Tool:モデルの推論時間を各デバイスで計測
特にTFLite(TensorFlow Lite)を使っている場合、ベンチマークツールはかなり重宝しますよ。
💻 Pythonで簡易プロファイリングを試してみよう
手元のPython環境でも、モデルの推論速度を計測するサンプルを書いてみました。考え方は実機でも同じです。
import time
import numpy as np
# TFLiteインタープリタのセットアップ(簡略版)
try:
import tflite_runtime.interpreter as tflite
except ImportError:
import tensorflow as tf
tflite = tf.lite
# モデルの読み込み
interpreter = tflite.Interpreter(model_path="your_model.tflite")
interpreter.allocate_tensors()
# 入出力テンソルの取得
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# ダミー入力データを作成
input_shape = input_details[0]['shape']
dummy_input = np.random.rand(*input_shape).astype(np.float32)
# 推論時間を10回計測して平均を出す
times = []
for i in range(10):
interpreter.set_tensor(input_details[0]['index'], dummy_input)
start = time.perf_counter() # 高精度タイマーで開始
interpreter.invoke() # 推論実行
end = time.perf_counter() # 終了
times.append((end - start) * 1000) # ミリ秒に変換
# 結果の表示
print(f"平均推論時間: {np.mean(times):.2f} ms")
print(f"最小: {np.min(times):.2f} ms / 最大: {np.max(times):.2f} ms")
ポイントをまとめるとこんな感じです👇
- 1回だけ計測するのはNG。10回の平均を取ることでブレを減らす
- perf_counter()は time.time() より精度が高いのでおすすめ
- 最小値と最大値の差が大きい場合は、サーマルスロットリングが疑わしい
⚡ 消費電力まで意識しよう
速度だけ最適化してもバッテリーを爆食いしていたら意味がないですよね。NPUを活用するデリゲート設定を使うと、CPUだけで動かすより推論速度・消費電力の両方が改善することが多いです。
TFLite であれば NnApiDelegate や GpuDelegate を使うことで、端末のハードウェアアクセラレータに処理を任せられます。これが「プロファイリングで実態を把握してから設定を変える」という流れの核心部分です。
まとめ
今回のポイントを振り返ると、Edge AIをAndge上で本当に使えるものにするには「感覚ではなくデータで最適化する」こと、つまりプロファイリングが欠かせません。
まずは手元のモデルで推論時間を計測するところから始めてみてください 🚀 「むずかしそう」が「できそう」に変わってくるはずです!





