AI HOT 精选

在 8 美元的 ESP32-S3 微控制器上运行 28.9M 参数大语言模型

8.5内容质量

TL;DR · AI 摘要

开发者成功在8美元的ESP32-S3微控制器上运行28.9M参数大语言模型,利用Flash查表技术实现高效内存管理。

核心要点

  • 使用Flash存储2500万参数表,仅需450B/Token内存访问
  • 模型参数量是同类芯片项目的100倍(28.9M vs 260K)
  • 端到端生成速度达9.5 tok/s,完全本地运行无需联网

结构提纲

按章节快速跳转。

  1. 在8美元芯片上实现28.9M参数LLM本地运行

  2. ESP32-S3配备512KB SRAM、8MB PSRAM和16MB闪存

  3. 采用Flash查表技术突破内存限制,参数存储量提升100倍

  4. SRAM存计算核心,PSRAM存输出,Flash存25M参数表

  5. 端到端生成速度9.5 tok/s,4位量化后模型体积14.9MB

  6. 仅能生成简单故事,无法执行指令或编写代码

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • 微控制器运行大模型
    • 硬件限制
      • 512KB SRAM限制
    • 关键技术
      • Flash查表技术
      • 逐层嵌入
    • 性能表现
      • 9.5 tok/s速度
      • 28.9M参数规模

金句 / Highlights

值得收藏与分享的关键句。

#ESP32-S3#微控制器#大语言模型#嵌入式系统
打开原文

在 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。据我所知,此前还没有人尝试过在如此小的芯片上应用这项技术。

code
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 文件展示了数据的变化过程及其原因。