世界を動かす技術を、日本語で。

28.9MパラメータのLLMを$8のマイクロコントローラーで動作させる

2026年7月26日原文(github.com)

概要

  • 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に展開
  • 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で数値変動と理由を追跡可能

Hackerたちの意見

これ、めっちゃクールなプロジェクトだね!シェアしてくれてありがとう!

レイヤーごとの埋め込みトリックの使い方がすごくいいね。あと、約20〜30MパラメータのTTSモデルもあるから、ネットワークなしでESP32がリアルタイムで読み上げてくれるかもしれないってことも注目すべきだね!

ずっとやってみたかったのは、MCUごとにレイヤーを持つようなことなんだ。RP2350同士が専用ラインで通信して、PIOを通じて補間器やデュアル乗算命令を組み合わせるアイデアがあるんだ。PSRAMやフラッシュ、SDカードは個別では最高の帯域幅じゃないけど、同時にたくさん動かすとかなりすごい速度に達することができるんだよね。大規模な専用ハードウェアシステムはパフォーマンスあたりの消費電力でまだ優位性があるけど、参入障壁が低くて徐々に成長できるのは魅力的だよね。

なんでこれがCPUとフラッシュを使って、もっと大きなモデルを動かすスケールにできないのかな?アクセスパターンが良ければできそうなのに。

最近、誰かがこれと全く同じことをやってたけど、GLM-5.2を16GBのDRAM、標準デスクトップCPU、nVME SSDで動かしてたんだ。トークンあたり約10秒かかったみたい(トークン毎秒じゃなくて)。追記:25GBのRAMで、トークンあたり最大20秒だった! https://github.com/JustVugg/colibri

俺の予想では、ESP32のフラッシュは内部SRAMの帯域幅の約1/4しかないからだと思う。もっとパワフルなシステムでやると、そのギャップはかなり広がるし、効率的に動かすために必要な計算量も増えるからね。

esp32-s3 このマイコンはすごいよ、今はpi4で開発作業に使ってる。USBポートが2つあって、1つはOTGだから、他では100ドル以上かかるような面白いことができるよ。

もし1ドルの価格帯でこれをやりたいなら、RP2350でできるけど、いくつか制限があるよ。特に、最大速度(12Mbps)で動かすのが限界なんだ。コツは、オンチップのUSB周辺機器を使って、もう一つをPIOでバックアップされたGPIOピンに接続すること。これ、今はtinyusbとpico-pio-usbで動くけど、もっと高性能なRustポートにも挑戦してるところなんだ。

最近のマイコンって5ドルで何が買えるかがすごいよね。これらのMilk-Vボードを見てみて:https://milkv.io デュオは最大256MBのメモリと1TOPS@INT8のTPUを搭載してる。Linuxも動くし、5ドルだよ。5枚買った!

50セント以下のマイクロコントローラーも買えるけど、5ドルでも、なんでそれでモデルを動かそうと思うのか分からない。そんな環境じゃ、このタスクには役に立たないと思うし、これからもそうであってほしい。MCUの不足は勘弁だよ…

128ビットのベクターISAに32個のレジスタがあって、最大64ビットの整数と浮動小数点をサポートしてるのを忘れないで。LMUL=8にすれば、1つの命令で1024ビットを処理できるよ(ほとんどの操作で128ビットあたり3サイクル)。GCCとCLANG(xTHeadVector)で完全サポートされてるし、Cの内蔵関数を使えばRVV 1.0とも互換性がある。8ビット要素で動くコードの多くはRVV 1.0とバイナリ互換だし、例えばmemcpy()、memset()、memcmp()、strlen()、strcpy()、strcmp()なんかもね。俺が64MBのDuoを買ったときは3ドルだった!その後、しばらくは64MBが5ドル、256MBが7ドル、512MBが10ドルだったけど、残念ながら今年はどれもかなり値上がりしちゃった。 https://arace.tech/products/milk-v-duo https://arace.tech/products/milkv-duo-s

5個買ったよ!120個もどうするつもりなの?

Hacker Newsで議論の続きを見る