到2026年,在笔记本电脑甚至智能手机上运行小型本地语言模型轻而易举。但如果是更小巧、更低功耗的方案呢?比如说,像售价不到10美元的ESP32微控制器?
这听起来可能是不可能的——该设备主要设计用于远程传感器、物联网和其他嵌入式应用,而不是运行生成式人工智能模型——然而,一位网名为SlvDev 的开发者却做到了这一点。
在GitHub上详细记录的过程,以及最近在 Better Stack YouTube 频道上展示的过程,SlvDev 记录了他如何成功地在微控制器上以每秒近 10 个token的速度运行一个小型语言模型,而该微控制器的成本大约相当于一杯高档咖啡。
在微型控制器上讲述微型故事
将大型语言模型 (LLM) 集成到像 ESP32 微控制器这样小的设备上并非易事。
这些模型之所以要在GPU上训练和运行是有原因的。LLM模型非常消耗内存,通常每个参数仅权重就需要占用1到4个字节的内存空间。
ESP32-S3 只有 520 KB 的 SRAM 和 8 MB 的伪 SRAM (PSRAM),因此你不可能运行像DeepSeek V4 Flash这样的模型。
为了实现这一点,开发人员不得不从语言模型中去掉“大型”一词,转而采用小近 10,000 倍的模型:TinyStories,这是一个最初由微软研究院开发的 2890 万参数模型。
然而,即使是这样的模型对 ESP32-S3 模块的要求也很高。在 16 位精度下,该模型需要大约 60 MB 的内存,而 ESP32 的内存容量根本不够。因此,开发者采用了多种技术(其中一些我们之前已经探讨过)来缩小模型的占用空间。
第一种方法是量化,即通过将权重的精度从大约 16 位降低到 8 位甚至 4 位来压缩权重的过程。
这使得 SlvDev 能够以牺牲少量精度为代价,将内存需求减少 75%。以前需要大约 60 MB 的内存来存储权重,现在只需要 14.9 MB。
但这还不够。好在,除了8.5MB的工作内存外,ESP32-S3还可以选择配备高达16MB闪存的版本。
通过借鉴谷歌 Gemma 系列模型中的一种称为逐层嵌入 (PLE) 的技术,开发者能够将模型的大部分权重(约 2500 万个参数或约 12 MB)卸载到闪存中,而性能下降却微乎其微。
将模型权重卸载到 NVMe 存储是一种由来已久的技巧,可以让像 DeepSeek V3 这样的大型前沿模型在原本内存和 GPU 容量不足以运行的硬件上运行。但这种方法的缺点在于它会严重影响性能。原本每秒处理 Token 数的速度,通常会变成每 Token 数秒,甚至数分钟。虽然这种方法可行,但远非实用。
PLE 的管理要好得多,因为这些权重访问得相当少,这使得闪存相对于 DRAM 或 SRAM 而言速度极慢的带宽不会降低性能。
结果是,该模型不再需要将 14.9 MB 的数据塞进 ESP32 的内存中,现在只需要大约 2 MB。具体来说,输出头、嵌入数据和 KV 缓存都保存在芯片的 PSRAM 中,而激活操作则在芯片的 520 KB SRAM 中处理。
开发者表示,采用这种方法,他们能够从微控制器中每秒获取 9.88 个token,这比普通人阅读的速度还要快。
那么,我能用它做什么呢?
虽然你可能可以在像 ESP32 这样的微控制器上运行一个小型生成式 AI 模型,但除了简单的成就感之外,你不会从这种实践中获得太多东西。
Tiny Stories 是一个很好的概念验证,但除了按需生成简短且基本连贯的故事之外,它的功能非常有限。你不可能用它构建聊天机器人、生成代码或驱动智能代理。还有一个名为 Barista 的模型,它的回答速度大约是 Tiny Stories 的两倍,但仅限于与意式浓缩咖啡相关的话题。
TinyStories 和 Barista 体积实在太小,功能也仅限于此。然而,这些模型居然能用 ESP32 运行,这本身就令人印象深刻。
也就是说,如果你有一台内存和计算能力稍强一些的设备,比如树莓派或智能手机,那么市面上还有功能更强大的型号可供选择。
谷歌今年四月发布的Gemma 4-E2B-it采用了相同的量化和PLE卸载技术,在使用4位权重时,可以将一个51亿参数的视觉语言模型压缩到略高于1GB的内存中。更高程度的量化和卸载可以将内存占用降低到500MB左右。
虽然它的内存占用比运行前沿模型所需的内存小几个数量级,但它仍然足以驱动本地聊天机器人,协调本地代理来管理用户日历等任务,并且只要你能忍受偶尔出现的幻觉,就能让你摆脱对 OpenAI 或 Anthropic 的依赖


VIP复盘网