はじめに
Big Techの巨大データセンターに対抗し、**「自分の部屋にあるスマホ群を繋いで分散知能を作る」**をテーマに、オープンソースのエッジ分散AI基盤 ArcAsha-os を開発しています。
今回、MacのMaster(Orchestrator)に対して、iPhone(15 Pro / 12 mini)をブラウザのWebGPU + WebSocket経由でエッジノードとして正常接続させる実験(EXP-0002)に成功しました。
本記事では、このプロトタイプのアーキテクチャと、異種ランタイム間(PyTorch vs ONNX/WebGPU)で遭遇した**「精度数値の僅かな乖離で出力テキストが分岐するメカニズム」**などの泥臭い実験検証データについて共有します。
🌌 ArcAsha-OS のコンセプト:モデル分割ではなく「専門家ファブリック」
よくある「1つの巨大モデル(例: 70B)を細切れにしてスマホに配る」手法は、端末間の通信レイテンシがボトルネックになりがちです。
ArcAshaではアプローチを変え、**「端末ごとに小規模モデル(~0.6B等)を丸ごと載せ、それらをオーケストレータが動的に連携させる分散知能ファブリック」**を目指しています。
- Master (Heart of Wisdom): ルーティング、スケジューリング、状態管理
- Edge Node (WebGPU/WebSocket): ブラウザ上で動作する推論エンジン(iPhone / PC等)
📱 実際の接続環境
キーボード脇の iPhone が Mac Master に正常認識され、ノードとして待機している状態(画像が不鮮明で見にくいですがきちんと機能しています。)
🧪 実験結果と泥臭いハマりポイント(EXP-0001 / EXP-0002)
開発中に最も面白かったのが、Python (PyTorch FP32 Golden) と JavaScript (ONNX / WebGPU FP16) の間での数値精度の比較実験(EXP-0001)です。
1. ゼロコピーバイナリプロトコル
ノード間の通信オーバーヘッドを極限まで削るため、48バイトのヘッダーを持つバイナリ・ゼロコピーテンソルプロトコルを実装しました。これにより、ブラウザ(WebWorker)からGPUへのテンソル転送速度をマイクロ秒単位に抑えています。
2. Logit Margin と出力の「分岐」現象
検証中、PyTorch (FP32) と ONNX Runtime (FP16) でトークン生成の出力が途中から食い違う現象が発生しました。
原因を解析したところ、Top-1トークンとTop-2トークンのLogit差分(Logit Margin)が 0.02 以下と極めて小さい局面において、FP16の丸め誤差によって1位と2位の順位が逆転し、それ以降の自己再帰生成のパスが完全に分岐してしまうことが判明しました。
このような「異種ランタイム間での数値的振る舞いの違い」をプロファイルし、ルーター側で吸収する仕組みを導入しています。
🛠️ 今後のロードマップと挑戦
現在は基礎的な接続・テンソルパイプラインが完成した段階(WIP)です。今後は以下の開発を進めていきます。
- Apple / Metal バックエンドの最適化: WebGPUだけでなく、Metal / CoreML などのネイティブアクセラレーション比較
- マルチノード・ルーティング (EXP-0002B): 複数端末間でのリアルタイムタスク分散と並列評価
- 耐障害性 (Shadow Node): モバイル端末の突然の切断・バッテリー低下に対するダイナミック・フェイルオーバー
🔗 Repository & Links
プロジェクトの設計思想(MASTER_SPEC.md)や、実験コード・生のログデータはすべてGitHubで公開しています!
🌟 GitHub Repository:
ArcAsha-os (GitHub)
※個人でコツコツ開発しているアーリーステージのプロジェクトです。ご意見、アドバイス、GitHub Star等いただけるとめちゃくちゃ励みになります!
