8MB に収める:ESP32-S3 で音声 AI を全部動かす話
ASR・小型 LLM・TTS を 8MB PSRAM に詰め込む Ivy AI の設計を見ると、制約が設計を決める典型的な例がある。
マイコンで LLM を動かすという話は最近よく聞く。でもこれは少し違う。音声認識・言語モデル・音声合成を、WiFi も API も使わず、ESP32-S3 一台で完結させるプロジェクトだ。
Anankush Pandit が GPL-3.0 で公開している Ivy AI がそれだ。ターゲットは 20 ドルの Freenove ESP32-S3 開発ボード。PSRAM は 8MB しかない。
問題:モデルが入らない
音声認識(STT)モデルは約 5.4MB。言語モデル(LLM)は 4-bit 量子化でも約 6.5MB。合計すると 11.9MB になる。これは 8MB を超える。
素直に考えれば収まらない。でも Ivy AI は実際に動く。
解法:時間で分割する
答えはシンプルだ。STT と LLM を同時に動かさない。
起動時に PSRAM の 7MB をひとつのアリーナとして確保する。まず STT がそこに展開されてマイクの音を受け取り、テキストに変換する。処理が終わったら同じ領域を解放し、今度は LLM が展開される。LLM が返答を生成したら、SVOX Pico がテキストを音声に変換して出力する。
「同時には使わない」という観察で、空間不足の問題を時間分割で解いている。マルチタスクに慣れた頭だと見落としがちだが、組み込みではオーソドックスな発想だ。
STT に Conformer を使っている
音声認識には Conformer ベースのモデルが採用されている。Conformer は Transformer の Self-Attention と CNN の局所特徴抽出を組み合わせたアーキテクチャで、小さいモデルでも精度が出やすい。MCU 上での音声認識には合理的な選択だと思う。
5.4MB というサイズは、サーバーで動くモデルと比べれば超軽量だが、ESP32-S3 にとっては決して小さくない。SRAM(約 300KB)ではなく PSRAM に置くことでなんとか成立している。
4-bit 量子化の LLM
LLM 側は 1,970 万パラメータ、4-bit 量子化で約 6.5MB。GGUF 形式のモデルも microSD から読み込める。
1,970 万パラメータというのは現代の LLM と比べれば極めて小さい。GPT-2(1.17 億パラメータ)の約 1/6 だ。できることは限られるが、「クラウドに依存しない」という性質には別の価値があると思う。ネットワークが切れていても、電力さえあれば動く。
気になるところ
この設計の代償は、STT と LLM の切り替えごとにロード時間が生じることだ。しゃべってから返答が来るまでのレイテンシがどれくらいか、公開情報では確認できていない。
Conformer の推論が ESP32-S3 の Xtensa LX7 コアでどれくらいかかるのかも気になる。音声のリアルタイム処理をソフトウェアで回す以上、チューニングは相当要るはずだ。
「8MB に全部収めた」という事実は率直に面白い。制約が設計の骨格を決めるという話は、RF 回路でも信号処理でも繰り返し出てくる。マイコンの上でもそれは変わらないな、と思う。
— ランキン
出典
- Open Source For You, “Ivy AI: A Fully Offline, Open-Source Voice Assistant That Runs Entirely on an ESP32-S3”
https://www.opensourceforu.com/?p=103951 - voiceaispace.com, Ivy AI project listing
https://www.voiceaispace.com/knowledge/repo/91e983ba-dbef-407e-a615-8fd97a935531
コメント
まだコメントはないよ。最初のひとことをどうぞ。