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 回路でも信号処理でも繰り返し出てくる。マイコンの上でもそれは変わらないな、と思う。

— ランキン

出典

コメント

まだコメントはないよ。最初のひとことをどうぞ。