ESP32‑S3クラスタが1.58ビットBitNet量子化で0.5BパラメータのLLMを実行

TL;DR

7ノードのESP32‑S3クラスタが、1.58ビット(BitNet)の三値量子化を用いた0.5 Bパラメータの言語モデルを実行しており、モデルをマイコンに分割し、高速SPIデイジーチェーンを介して通信しています。これにより、たとえ一般のIoTチップでも、非自明なLLMの分散推論に参加可能であることが示されています。


プロジェクトの概要

ESP32‑S3 LLMクラスタは、0.5 Bパラメータのモデルを7台のESP32‑S3ボードに分割して実行する分散推論パイプラインを実装しています。1台のボードがマスターとして機能し、トークン化、埋め込み検索、最終的なRMSノルム、言語モデルヘッド、グリーディサンプリングを担当します。残りの6台のボードは、それぞれ4つのトランスフォーマーブロック(アテンションとMLP)を順次実行する計算ノードとして機能します。マスターとノード間の通信は双方向SPIデイジーチェーンを介して行われ、隠れ状態ベクトル(FP32)がパイプラインを前向きに流れ、最終出力のためにマスターに戻ってきます。

アーキテクチャの特徴

  • マスターノード:BPEトークナイザー、INT4埋め込みテーブル(フラッシュ上約14 MB)、最終的なポストプロセッシングを実行。
  • 計算ノード:各々が4つのトランスフォーマーレイヤーを保持し、以下の機能を備える:
    • RMSNorm(FP16 → FP32スケーリング)
    • 1.58ビット三値アテンション(Q/K/V/Oプロジェクション)とRoPE
    • KVキャッシュは外部PSRAMに保存
    • 1.58ビット三値MLP(ゲート、アップ、ダウンプロジェクション)
  • SPIデイジーチェーン:各ボードに2つのSPIチャネル(CH A:前方送信、CH B:後方受信)を備え、低遅延・高スループットのデータ移動を実現。
  • 量子化:マイクロソフトのBitNet 1.58ビット三値方式を採用。重みのストレージを大幅に削減しつつ、推論品質を維持。

動作方法 – ステップバイステップの推論フロー

  1. プロンプト入力 → マスターがBPEでトークン化し、INT4埋め込みを検索。
  2. 隠れ状態(FP32) がSPI CH Aを介してCompute Node 1に送信。
  3. Node 1 がレイヤー0–3を処理し、隠れ状態を更新してNode 2に転送。
  4. Node 2–5 が同じパターンを繰り返し、それぞれ4つの連続するトランスフォーマーブロックを処理。
  5. Node 6 が最終レイヤー20–23を処理し、隠れ状態をSPI CH Bを介してマスターに返却。
  6. マスター が最終的なRMSノルム(FP16)、結合されたLMヘッド(INT4)、グリーディサンプリングを適用して次のトークンを出力。
  7. 以降の各トークンについて、このサイクルを繰り返す。

リポジトリ内の図はこのパイプラインを可視化しており、マスターからノードへのデータフローと、フラッシュおよびPSRAMに分散されたモデル重みの分割を示しています。

リポジトリ構造

  • master_board/: マスター用のESP‑IDFファームウェア。トークナイザー、埋め込み、LMヘッド、双方向SPIドライバーを含む。
  • node_firmware/: 計算ノード用のファームウェア。1.58ビット三値線形層(bitlinear.cpp)、アセンブリ最適化MACカーネル(bitlinear_forward.S)、Qwenアテンション実装、KVキャッシュ管理を含む。
  • python_tools/: ホスト側ユーティリティ。モデル準備用:
    • トークン語彙の削減(crop_token.py)
    • 埋め込みのスライス(crop_model_weight.py)
    • BitNet量子化対応訓練(qat_158.py)
    • フラッシュアラインメント用のバイナリパッキング(pack_model_bin.py)
  • workflow.md: ハードウェア配線、フラッシュ、モデル準備をカバーするエンドツーエンドガイド。

Hacker Newsでのコミュニティの反応

このプロジェクトは、熱意と懐疑の両方を引き起こすコメントを生み出しました。

ladyanita22: 「小さなマイコンで巨大な並列システムを構築する想像をすると、Rustなら並列化がより安全になるだろう。」(RISC‑Vクラスタへの拡張を予想。)

tdhz77: 「間もなく、Kubernetesを動かすAIがすべての電球に搭載されるだろう。」(AIの普及をユーモラスに表現。)

cameron_b: 「圧縮により、これは高機能なLLMノイズメーカーにすぎないが、それでも魅力的だ。」(実用的な品質に疑問を呈する。)

librasteve: 「https://bil-lang.orgのようなプロジェクトは並列パイプライン処理を目指しているが、まずはTinyGoバックエンドが必要だ。」(関連する言語レベルの取り組みを指摘。)

NDlurker: 「これは基本的なワードプロセッサでの文法チェックや、テキストベースのゲームの世界生成に使えるだろうか?」(現実的な用途を問う。)

matthewfcarlson: 「私は1.5億パラメータのモデルで同様のプロジェクトに取り組んでいる——これは素晴らしい。」(類似の開発を示す。)

sneak: 「どの低コストチップがLLMを実行できるだろうか?Mac Miniが最も安価なのか、それともPi HAT用の専用AIチップがあるのか?」(ハードウェアの代替案を求める。)

全体として、コミュニティは技術的な革新性を評価しつつ、スケーラビリティ、パフォーマンス、実世界での有用性に疑問を呈しています。

なぜ重要なのか

  • コスト効率:ESP32‑S3チップは1個数ドル。7ノードクラスタのコストは50ドル未満で、単一のGPUアクセラレーテッドボードよりもはるかに安価。
  • エッジAIの民主化:高度なLLM推論を、超低消費電力・バッテリー駆動デバイスにまで押し出す可能性を示す。
  • 量子化の革新:BitNetの1.58ビット三値フォーマットを実ハードウェアで検証。研究用量子化とエッジデプロイのギャップを埋める。
  • 分散マイコンAI:異種マイコン間でのパイプラインAIの新しい設計空間を開く。初期の並列計算に似ているが、現代の深層学習ワークロードを対象とする。

はじめ方

  1. リポジトリをクローン。
  2. workflow.mdに従い、マスターおよびノードのファームウェアをESP32‑S3ボードにフラッシュ。
  3. Pythonツールを使用して、互換性のある0.5 Bモデルを量子化・パッキング(リポジトリにはBitNet QATおよびINT4埋め込みパッキング用スクリプトを提供)。
  4. リポジトリのハードウェア写真に従い、SPIピンを使ってボードをデイジーチェーン接続。
  5. クラスタを電源投入し、マスターのシリアルコンソールからプロンプトを入力し、生成されたトークンを受信。

ライセンス

本プロジェクトはMITライセンスの下でリリースされています。


最後に

ESP32‑S3 LLMクラスタは、安価なマイコンの小さな集まりが、攻撃的な三値量子化を用いて5億パラメータの言語モデルを共同で実行できることを証明しています。出力品質は高精度モデルに匹敵しないかもしれませんが、超低コストで分散エッジAIを実現するための現実的な道筋を示しています。

Sources