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-coremlやcoremltoolsを使用) - 評価: 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_convertortf.lite.TFLiteConverter - iOS(CoreML):
onnx-coreml或いはcoremltoolsで変換。 - 量子化: 可能なら Post-Training Quantization を適用して推論効率向上。
注意: SNN 固有の実装(スパイク処理)に依存する場合、単純なPyTorch→TFLite変換で同等動作を得られないことがある。SNN 特有のレイヤ/演算がある場合は、ネイティブ SDK をエッジで走らせるか、変換用の互換レイヤを実装する必要あり。
6. 今後の推奨作業(優先順)
- 実機でのベースライン測定(Raspberry Pi を先行) — 外付け電力計でアイドル/負荷測定。 (担当: 実機で実行)
- Android/iPhone 用に代表的モデルを変換して単体推論の精度・レイテンシ・電力を比較。 (私がスクリプトを用意可能)
- 運用方針決定: 端末が十分な条件なら
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 に変換して配布用レポートを生成します。どちらにしますか?