开发者 Vyacheslav Serbov,化名 slvDev, 证明的 在 ESP32-S3 微控制器上实现完全本地文本生成。生成的语言模型包含 28,9 万个参数,无需访问服务器或其他外部计算资源,即可每秒生成约 9,9 个词元。生成的短篇故事显示在连接的 OLED 显示屏上。
项目 esp32-ai 该模型已在配备 512 KB 板载 SRAM、8 MB PSRAM 和 16 MB 闪存的 ESP32-S3 N16R8 模块上进行测试。4 位量化模型占用 14,9 MB 空间。代码库包含 C 运行时源代码、训练和量化工具、固件、测试用例以及用于将其上传到开发板的脚本。
所声称的28,9万个参数不应与传统桌面LLM的参数数量直接比较。根据 详细开发商报告该模型由一个包含约 559 个参数的密集计算内核、一个包含 3,1 万个参数的输出层以及一个包含约 25 万个参数的分层向量表示表组成。后者构成了模型形式规模的大部分,但在生成每个词元时并非全部都会被处理。
该模型使用三级内存进行存储。最常访问的数据位于内部 SRAM 中,输出层、键值缓存和临时缓冲区位于 PSRAM 中,而包含 25 万条记录的表则位于闪存中,可通过地址空间映射进行访问。对于每个标记,仅从中读取大约六行数据,总计约 450 字节。
该设备基于谷歌在Gemma 3n中使用的逐层嵌入技术。 Google 文档PLE参数可以存储在模型工作内存之外,并在处理各个层时添加到推理过程中。在esp32-ai中,这种方法扩展到了微控制器的内存层次结构,而微控制器的高速SRAM资源尤其有限。
第一个正确的基于 C 语言的运行时版本每秒只能生成 0,57 个令牌。将输出层置于 PSRAM 中,切换到 8 位激活,将计算任务分配到两个 Xtensa LX7 内核上,并进行其他优化后,延迟降低至每个模型步骤 94,9 毫秒。考虑到完整的生成过程,最终测得的吞吐量达到了每秒 9,88 个令牌。此时,读取输出层时的主要限制因素变成了 PSRAM 的带宽。
该模型使用合成数据集进行训练。 小故事它由词汇量有限的简单英语故事组成。因此,它可以接续句子并创作简短连贯的故事,但它并非设计用于回答问题、执行指令、编程或复述事实性知识。开发者主要将这项工作视为展示如何高效地将模型存储在微控制器内存中,而不是将其视为一个现成的、自主的聊天机器人。
在现有文档中,作者特别强调 esp32-ai 是一个独立开发的项目。 llama2.c Andrej Karpathy 的工作以及之前在 ESP32-S3 上发布的第 260 万个模型仅作为参考和前期工作的指导原则:代码、检查点和方法论并非直接借鉴自他们。esp32-ai 源代码 本作品采用 MIT 许可证发布。.
来源: linux.org.ru
