コンテンツにスキップ

EvoSpikeNet エッジ検証レポート

[!NOTE] 最新の実装状況は 機能実装ステータス (Remaining Functionality) を参照してください。

1. 概要

  • 目的: EvoSpikeNet SDK をエッジで稼働可能か検証し、低遅延・低消費電力の要件を満たす運用方針を決定する。
  • 実行環境: 開発PC上の仮想環境(Python3.12 .venv)、ローカルZenohバインディングをインストールして検証。

2. 実行した検証(要点)

  • 依存性チェック: scripts/validate_sdk_startup.py 実行 → torch, requests, numpy 確認。最初 zenoh 無し→後に GitHub ソースから導入成功。
  • コーディネータ起動: scripts/test_coordinator.py 実行 → init_coordinator / start_coordinator によりノードがリーダー化、Zenoh 接続確認。
  • 単ノードベンチ: scripts/benchmark_coordinator.py 実行(200 タスク)
  • レイテンシ: 平均 0.0000523 s (0.052 ms)、p95 ≈ 0.155 ms、max ≈ 0.479 ms
  • メモリ: 平均 ≈ 517 MB
  • CPU: 平均 7.2%(ピーク 59.5%)
  • 小データ学習/推論: scripts/mini_data_train_infer.py 実行(ダミーモデルで動作確認、簡易精度表示)
  • マルチノード短時間テスト: scripts/multi_node_sim.py --nodes 3 --tasks 60 実行
  • 結果: count=60, avg ≈ 0.0000268 s, p95 ≈ 0.000237 s

3. 短い解釈

  • ローカル(同一ホスト)環境ではコーディネータの応答はサブミリ秒で非常に高速。分散通信(Zenoh)を導入してもオーバーヘッドは小さい。
  • メモリが数百MB必要なため、メモリ制約のある端末では注意が必要。
  • 端末側での「SDKそのまま運用」は、端末が Python / torch を十分に動かせる場合は可能だが、モバイル端末(特に iPhone/一部 Android)ではネイティブ推論向けにモデル変換が望ましい。

4. 実機(対象)別の検証手順と推奨

A. Raspberry Pi(一般的な仕様例: RPi 4/8GB, 64-bit OS)

  • 判定ポイント: OS が 64-bit であるか、PyTorch ARM ビルドが利用可能か、RAM が十分か(4GB 以上推奨)。
  • ソフトウェア手順(例):
# 仮想環境作成
python3 -m venv .venv
. .venv/bin/activate
pip install -U pip
# PyTorch (ARM) と依存を入れる(公式手順参照)
pip install numpy requests
# EvoSpikeNet をインストール(またはソースを配置)
pip install -e /path/to/EvoSpikeNet-Core
# zenoh が必要ならソースからビルドインストール
pip install "git+https://github.com/eclipse-zenoh/zenoh-python.git"
  • 電力測定:
  • 精度のため外付けUSB電力計を推奨(給電ラインに挿入)。
  • 代替: vcgencmd measure_temp + top で負荷傾向を見るが、消費電力は外部測定が必要。

  • 推奨運用:

  • RPi で Python+torch が快適に動く場合は SDK 運用可。
  • RAM不足や電力厳しい場合はモデルを軽量化(量子化)または TorchScript/TFLite に変換してネイティブ推論へ移行。

B. iPhone 17(最新 iOS / Apple Silicon A-series 相当)

  • 判定ポイント: iOS では Python/tensor 実行は制約が多い(App Store ルールやランタイム制限)。モバイルネイティブ推論は Core ML を推奨。
  • 推奨手順:
  • モデル変換パス: PyTorch -> ONNX -> CoreML(onnx-coremlcoremltools を使用)
  • 評価: Xcode Instruments の Energy を使ってエネルギー測定。外部電力計での測定を合わせて実施。
  • 実行方針:
  • エッジサーバとして SDK を置き、iPhone は REST クライアントで利用(ネットワーク許容なら)。
  • ネイティブ単体動作が必要なら CoreML に変換してアプリに組み込む。

C. Android(一般的スペック: ARMv8, 4–12GB RAM)

  • 判定ポイント: 直接 Python + torch を動かすのは一般的でない(例外: Pytorch Android ランタイムや Chaquopy 等)。
  • 選択肢:
  • モバイル向けモデル(TFLite / NNAPI)に変換して端末で推論。
  • 端末は EvoSpikeNet エッジサーバに REST で接続(SDKはサーバ側で稼働)。
  • 測定手順(Android):
# 電力/バッテリ統計リセット
adb shell dumpsys batterystats --reset
# 実験を実行
# 結果取得
adb shell dumpsys batterystats > batterystats.txt
# CPU 使用等
adb shell top -n 1 | head -n 20
  • 推奨: 実機での低消費電力が重要なら TFLite + 量子化を優先。

5. モデル変換(簡易ガイド)

  • TorchScript(推奨: PyTorch モデルのシリアライズ)
import torch
model.eval()
example = torch.randn(1, *input_shape)
traced = torch.jit.trace(model, example)
traced.save('model.pt')
  • ONNX(互換性確認)
torch.onnx.export(model, example, 'model.onnx', opset_version=14)
  • TFLite(一般フロー: ONNX -> TF -> TFLite)
  • ONNX -> TensorFlow: onnx-tf を利用
  • TF -> TFLite: tflite_convert or tf.lite.TFLiteConverter
  • iOS(CoreML): onnx-coreml 或いは coremltools で変換。
  • 量子化: 可能なら Post-Training Quantization を適用して推論効率向上。

注意: SNN 固有の実装(スパイク処理)に依存する場合、単純なPyTorch→TFLite変換で同等動作を得られないことがある。SNN 特有のレイヤ/演算がある場合は、ネイティブ SDK をエッジで走らせるか、変換用の互換レイヤを実装する必要あり。

6. 今後の推奨作業(優先順)

  1. 実機でのベースライン測定(Raspberry Pi を先行) — 外付け電力計でアイドル/負荷測定。 (担当: 実機で実行)
  2. Android/iPhone 用に代表的モデルを変換して単体推論の精度・レイテンシ・電力を比較。 (私がスクリプトを用意可能)
  3. 運用方針決定: 端末が十分な条件なら SDK単体運用、そうでなければ ハイブリッド(エッジSDK + モバイルネイティブモデル) を採用。

7. 付録:主要コマンド

  • 仮想環境 & スクリプト実行
cd /home/maoki/Products/EvoSpikeNet-Core
. .venv/bin/activate
python3 scripts/validate_sdk_startup.py
python3 scripts/test_coordinator.py
python3 scripts/benchmark_coordinator.py
python3 scripts/multi_node_sim.py --nodes 3 --tasks 60
python3 scripts/mini_data_train_infer.py
  • Zenoh ソースインストール(参考)
. .venv/bin/activate
pip install "git+https://github.com/eclipse-zenoh/zenoh-python.git"

作業ログ・生成スクリプトは scripts/ に保存済みです。必要ならこの Markdown を PDF に変換して配布用レポートを生成します。どちらにしますか?