在 8 美元的 ESP32-S3 微控制器上运行 28.9M 参数大语言模型
TL;DR · AI 摘要
开发者成功在8美元的ESP32-S3微控制器上运行28.9M参数大语言模型,利用Flash查表技术实现高效内存管理。
核心要点
- 使用Flash存储2500万参数表,仅需450B/Token内存访问
- 模型参数量是同类芯片项目的100倍(28.9M vs 260K)
- 端到端生成速度达9.5 tok/s,完全本地运行无需联网
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- 微控制器运行大模型
- 硬件限制
- 512KB SRAM限制
- 关键技术
- Flash查表技术
- 逐层嵌入
- 性能表现
- 9.5 tok/s速度
- 28.9M参数规模
金句 / Highlights
值得收藏与分享的关键句。
通过将2500万参数存储在Flash中,每个Token仅需读取约450字节数据
Google Gemma模型的逐层嵌入技术首次应用于微控制器领域
模型基于TinyStories数据集训练,生成速度达9.5 tok/s
在 8 美元的 ESP32-S3 微控制器上运行 28.9M 参数大语言模型 · AI HOT
Hacker News 热门(buzzing.cc 中文翻译)
精选
76
导出 Markdown
在 8 美元的 ESP32-S3 微控制器上运行 28.9M 参数大语言模型
2026-07-26 11:54
·
14小时前
boveyking
阅读原文
github.com
精选理由
在8美元微控制器上跑28.9M参数LLM,之前同类只有260K参数,这套基于Flash查表的内存技巧首次搬到如此小的芯片上,工程细节和踩坑记录对嵌入式开发者参考价值很高。
AI 摘要
开发者成功在售价约 8 美元的 ESP32-S3 微控制器上运行了一个 28.9M 参数的大语言模型,完全在芯片本地运行,无需连接服务器,生成速度约 9.5 tok/s。
正文 · AI 翻译
中文
原文
在售价 8 美元的微控制器上运行一个 2890 万参数的大语言模型
开放求职 · 𝕏 slvDev · LinkedIn
这是一个拥有 2890 万个参数的语言模型,运行在 ESP32-S3 上——这是一块售价约 8 美元的微控制器。它在芯片本身上运行,无需向服务器发送任何数据,并以大约每秒 9 个 token 的速度将每个单词写入连接到芯片的小屏幕。此前人们在这类芯片上运行的语言模型只有 26 万个参数,因此这个模型的参数量大约是前者的 100 倍。它之所以能装得下,是因为模型的大部分数据存储在闪存而非 RAM 中,这利用了 Google Gemma 模型中的一项名为“逐层嵌入”的技术。
数据概览
参数量
存储 2890 万个参数(其中 2500 万个存储在闪存查找表中)
芯片
ESP32-S3,约 8 美元,配备 512KB SRAM、8MB PSRAM 和 16MB 闪存
速度
端到端约 9.5 tok/s(纯计算速度 9.7 tok/s)
连接性
无,一切均在设备上运行
模型大小
4 位量化下为 14.9MB
为什么这很难,以及它如何做到
微控制器的快速内存非常有限。ESP32-S3 只提供 512KB 的 SRAM。通常情况下,整个模型必须能够从该内存中访问,这导致你只能使用极小的模型,这也是为什么此前这类芯片上的模型只有 26 万个参数。
解决方法是根本不再将模型放入快速内存。语言模型的大部分参数位于嵌入表中,模型从该表中读取数据而非进行计算。因此,你可以将那个包含 2500 万行的表留在慢速闪存中,每个 token 只需从中提取所需的几行(约 450 字节),而执行实际计算的小部分则留在快速内存中。这样一来,运行这个大模型的成本几乎为零,因为你从未加载其大部分内容。它只是待在闪存里,每次被少量采样。
这个想法来自 Google 的逐层嵌入技术,源自 Gemma 3n 和 Gemma 4。在这里,它运行在微控制器的内存布局上,而非手机或 GPU。据我所知,此前还没有人尝试过在如此小的芯片上应用这项技术。
SRAM (fast, tiny) the "thinking" core, used on every token
PSRAM (medium) the output head and working memory
FLASH (huge, slow) the 25M-param table, about 6 rows read per token (~450 B)它能做什么,以及不能做什么
该模型基于 TinyStories 数据集训练,因此它能够撰写简短、简单的故事,并且大多能保持连贯性。它不会回答问题、遵循指令、编写代码或掌握事实知识。这一限制源于模型中负责推理的部分规模较小,而记忆技巧并不能改变这一点。这里真正有趣的是其架构——将一个大模型塞进一块微小的芯片,而非一个拥有 2890 万参数的模型能说出什么。
自行运行
固件、接线以及烧录步骤均位于 firmware/esp32_llm/README.md 文件中。训练、消融实验和量化代码在 src/ 和 experiments/ 目录下。完整方法、消融实验以及片上测量结果已写入 RESULTS.md 文件。
致谢
TinyStories 是该模型训练所用的数据集:它包含简短的合成故事,其内容足够简单,以至于小模型也能学会连贯地写作(Ronen Eldan 和 Yuanzhi Li,微软研究院,arXiv:2305.07759)。另一半功劳归于逐层嵌入(Per-Layer Embeddings),这是 Google 在 Gemma 模型中的设计,正是它让一个大模型得以适配到一块小芯片上。
Andrej Karpathy 的 llama2.c 项目让许多人——包括我在内——相信,你完全可以训练一个小型语言模型,并用纯 C 语言来运行它。本项目正是由此发展而来。
实际过程
我特意将这段混乱的历史留在了仓库中。其中包括我在自己参数统计中发现的一个错误,该错误曾导致早期数据被夸大,以及在我修正该错误后得出的更正结果。提交历史记录和 RESULTS.md 文件展示了数据的变化过程及其原因。