概要
- ESP32-S3 マイコン上で 28.9Mパラメータ のLLMを実行
- Google Gemma のPer-Layer Embeddings技術を応用
- フラッシュメモリ 主体のモデル格納で大容量化を実現
- TinyStories データセットで訓練、短い物語生成に特化
- オープンソース で回路・ファームウェア・学習方法を公開
8ドルマイコンで動く28.9MパラメータLLMの概要
- ESP32-S3 マイコン(約8ドル)上で 28.9Mパラメータ の言語モデルを動作
- 512KB SRAM、8MB PSRAM、16MB フラッシュを搭載
- フラッシュメモリ にモデルの大部分(25Mパラメータ)を格納
- RAMには小規模な推論部分のみ配置
- 約9トークン/秒 の速度で小型ディスプレイにテキストを生成・表示
- 通信機能なし、すべてオンデバイス処理
- モデルサイズは 4ビット量子化で14.9MB
技術的工夫と困難の克服
- 従来 のマイコン向けLLMは 26万パラメータ 規模に制限
- SRAM(高速だが容量が極小)に全モデルを載せる必要があったため
- Per-Layer Embeddings (Google Gemma発案)を応用
- 埋め込みテーブル(25M行)をフラッシュに置き、必要な行のみ都度読込
- 1トークンあたり約450バイトをフラッシュから取得
- 推論の「思考」部分のみSRAMに展開
- 埋め込みテーブル(25M行)をフラッシュに置き、必要な行のみ都度読込
- SRAM :推論コア
- PSRAM :出力ヘッドと作業用メモリ
- フラッシュ :大規模埋め込みテーブル
モデルの特性と限界
- TinyStories データセットで訓練
- 短く単純な物語生成に特化、内容の一貫性を維持
- QA・命令応答・コード生成・知識問答 は不可
- 理由:推論部分が小規模で、メモリ配置の工夫だけでは能力向上しないため
- 主な意義 :小型チップに大規模モデルを載せるアーキテクチャの実証
実行とソースコード
- ファームウェア・配線・書き込み手順 :firmware/esp32_llm/README.mdに記載
- 学習・アブレーション・量子化コード :src/ および experiments/ ディレクトリ
- 手法・検証結果 :RESULTS.mdに詳細記載
クレジットと参考情報
- TinyStories :Microsoft ResearchのRonen EldanとYuanzhi Liによる合成短編物語データセット(arXiv:2305.07759)
- Per-Layer Embeddings :Google Gemmaモデルの設計思想
- llama2.c (Andrej Karpathy):C言語で小型LLMを動かす発想の源泉
開発経緯と履歴
- 開発過程 の履歴・バグ修正・パラメータ数の変遷をリポジトリにそのまま残存
- commit履歴およびRESULTS.mdで数値変動と理由を追跡可能