14MB 容纳 4500 万参数:ESP32 可运行智能体大模型

一个14MB的模型,4500万参数,没有GPU,没有NPU,能跑在Cortex-M微控制器上。它的目标不是聊天,而是在手机、手表、机器人、智能家居上完成工具调用与结构化抽取。这个名字叫 Needle,是Cactus公司发布并已通过Apache 2.0协议开源的端侧智能体语言模型。

为什么把模型做到14MB

Edge AI长期被理解为Mac、PC这类带独显或NPU的设备,但真正的边缘并不在这里。全球有超过210亿台IoT设备,而PC只有约15亿台。绝大多数边缘硬件价格低于200美元,没有GPU、没有NPU,只有几十MB的RAM。Pebble Index智能戒指这类产品更是连屏幕都没有,语音指令必须百分百本地执行,不能依赖网络。这就是Needle瞄准的场景。

把工具调用当成核心任务之后,问题空间被大幅压缩:智能手表、家庭助手、机器人把能力抽象成带类型的函数,需要的是一个能够把自然语言映射到对应函数和参数的系统。这不需要世界知识,也不需要开放式文本生成。4500万参数因此足够完成这件事,而聊天仍然需要数十亿参数。Needle把这一更小的问题形式化作为一切设计的起点。

从训练开始的2bit量化

小模型对后训练量化极为敏感,常规做法一旦压到2bit往往直接崩溃。Needle 2从预训练到后训练全程对抗Cactus Quants压缩,权重、激活、KV cache一律参与。这意味着部署的2bit模型与训练目标完全一致,4500万参数才能无损地压缩进14MB,同时保持基准成绩不下降。

与之配套的推理引擎是一个零依赖C++二进制文件,启动时探测CPU并自动选择内核,支持SDOT、NEON、AVX2、RISC-V向量、wasm SIMD与标量回退。模型、分词器、语法编译器全部打包进同一个产物,从Cortex-M到x86再到WebAssembly均可运行。权重不展开到RAM,2bit码直接在向量寄存器内展开并融合进整型点积,激活、KV cache、lane routing全程int8。

架构如何用45M参数做到这些

Needle没有沿用通用Transformer的标准组件,三个核心机制直接决定了模型形态:

Hadamard MLP替代传统的dense up-proj与down-proj,混合通道的任务交给固定的Walsh-Hadamard变换和可学习对角矩阵完成。这部分原本是小模型权重读取的主要开销,替换后几乎不再消耗参数。

Engram把世界知识移出主网络,每token通过哈希n-gram表查找若干行,知识容量几乎不占用解码时的算力。在闪存读取比乘法更耗能的设备上,这一选择直接影响延迟与电池。

多lane残差流让27层、512宽的网络具备接近更宽模型的路由能力,代价仅是每层若干dot product。

内存系统为定长RAM设备反向设计:注意力使用256 token的滑动窗口,KV cache上限恒定;系统提示与工具声明被固定为永久sink,从结构上无法被淘汰。KV cache本身使用QAT训练,权重以Cactus Quants存储,平均bits per weight为2bit。

最终的单次会话RAM占用被锁死在28MB上限,可以放进ESP32-P4这类带32MB PSRAM的MCU,也能跑在STM32H7、NXP i.MX RT等带SDRAM的开发板上。引擎为bare metal单线程编译,同时提供面向Cortex-M4、M7、M55的静态库。

关于能效的真实账本

端侧AI的第一约束不是FLOPS,而是FLOPS与字节读取的乘积。从flash或DRAM搬一个字节的代价远高于一次乘累加。Needle的架构把前者压到与同宽度Transformer的87 MFLOPs对比下的70 MFLOPs,其中约800万参数以gather方式读取、不占用算力。引擎则把后者的字节读取控制在14MB blob一次性读取,结构性token的vocabulary projection可跳过最高98%。

综合下来,在高端手机这一参考硬件上,Needle每次推理token消耗的能量比同类基准模型少7到85倍。这正是常驻语音助手能够塞进可穿戴设备功耗预算的根本原因。

函数调用与结构化抽取的真实成绩

Needle 2在五个公开函数调用基准上完成评测,覆盖Google Mobile Actions、DroidCall、Seal-Tools in-domain、Seal-Tools out-of-domain和BFCL v4单轮。评分采用ordered strict exact match,要求函数名、调用顺序、所有参数值完全一致。所有Needle 2数字均通过C++引擎端到端测量,配置为CQ2-bit权重、工具检索开启、256 token滑动KV窗口,窗口淘汰策略与生产环境完全一致。基线模型在vLLM下以全上下文运行,Apple FM在设备上运行。

需要说明的是两组系统性偏差:基线模型以f16运行,因为常规后训练量化到2bit会让从未针对激进压缩训练的模型崩塌,这种处理对基线有利;Needle仅针对智能体工具调用训练,基线是通用语言模型,这种处理对Needle有利。两种偏差同时存在,且无法在不破坏评测有效性的前提下消除,因此团队选择如实呈现结果,回答一个更窄的问题:在端侧预算下,哪个模型能正确执行工具调用。

结果上,在Google Mobile Actions评估集(961行)上,Needle在所有面向智能手机、智能设备及以下的最小模型中,ordered strict exact match表现领先。DroidCall的1-call行(n=154)和2-call行(n=24)同样覆盖Android intent式调用。Seal-Tools在domain(700行)和out-of-domain(654行)测试包含大量候选项与多调用行,out-of-domain测试中整类工具域在训练中完全未见,测试schema generalization能力。

BFCL v4单轮评测中,Needle未针对通用函数调用训练,其语料集中于消费设备动作(智能家居、移动设备、可穿戴、电视、汽车)与结构化抽取,BFCL的通用与企业API表面(包括Java、JavaScript SDK类别)完全处于训练分布之外。尽管如此,在Python简单调用类别中得分与体积六倍于它的FunctionGemma相差不到一个百分点,所有3641行的well-formed rate达到93.4。差距集中在训练数据未覆盖的Java、JavaScript及并行多调用类别。

如何开始使用

Needle的获取、安装、微调均可在本地完成。仓库与Python包自带训练与测试脚本,45M模型规模允许在普通Mac/PC上完成微调,耗时从几分钟到数小时不等,因此可以针对自有设备工具表训练专属版本,而不是套用通用助手。

获取代码:

git clone https://github.com/cactus-compute/needle.gitcd needle

安装Python依赖并构建推理引擎:

pip install -e .cmake -B build && cmake --build build --config Release

运行Mobile-Actions基准验证部署(端到端测量CQ2-bit精度下的成绩):

./build/needle eval --benchmark mobile_actions --split eval

针对自有工具schema进行微调(数据格式参考仓库内examples/目录):

python -m needle.tune --config configs/tune_device.yaml --data my_tools.jsonl

基于schema启动本地推理服务(语法编译器由JSON Schema自动生成,输出token在合法集内):

./build/needle serve --schema schemas/smart_home.json --port 8080

调用示例(curl提交自然语言指令,返回结构化工具调用):

curl -X POST http://localhost:8080/v1/call \  -H "Content-Type: application/json" \  -d '{"input":"把客厅灯调暗到30%"}'

在MCU上交叉编译(针对ESP32-P4、STM32H7等带外置RAM的开发板):

cmake -B build_mcu -DTOOLCHAIN=arm-none-eabi \  -DCMAKE_BUILD_TYPE=MinSizeRelcmake --build build_mcu

边云协作的安全网

小模型不可能覆盖所有输入,Needle选择的是诚实回答而不是猜测。主题无关的请求返回空调用,每个响应附带学习得到的置信度分数。开发者可以设置阈值:超过阈值本地执行,介于阈值之间再次确认,低于阈值则升级到云端。由于大多数设备使用请求可以在本地处理,升级并不频繁,默认路径保持私有、快速与免费。

这套设计直接对应到Pebble Index Ring的实际部署:戒指没有屏幕,语音指令必须百分百可靠,本地推理是唯一可接受方案。Cactus公布的信息显示,Index 01应用内嵌Needle后,每次语音请求都在本地完成工具调用,不再依赖云端。

适用与不适用

Needle适合对最小RAM占用、低延迟、隐私与离线可靠性有要求的产品场景:智能家居控制器、可穿戴设备、机器人、工业HMI、消费电子中的常驻助手。不适合的场景同样明确:需要开放式聊天、世界知识、复杂推理或长上下文RAG的任务,仍然需要更大模型或云端API。

当前限制在于:训练数据集中在消费设备动作与结构化抽取,对企业级通用函数调用、Java与JavaScript SDK类别支持有限;BFCL v4单轮整体得分虽然在所有13个原始类别的未加权均值上仍具竞争力,但距离针对通用调用训练的模型仍有差距;置信度阈值需要在具体产品上自行标定,官方未提供通用推荐值。

开源与定制

Needle采用Apache 2.0协议开源,可以自由用于商业产品。每个产品都有自身的工具表,45M的规模允许在本地Mac/PC上用分钟到小时级时间完成重训,得到一个真正理解自家设备工具的模型。

对于需要自定义工具schema、硬件调优或后训练支持的团队,官方提供商业合作渠道。技术合作可在邮件中附上具体硬件平台、目标工具集与精度需求。

GitHub 项目地址

https://github.com/cactus-compute/needle

14MB的意义不在于参数数字本身,而在于它把智能体能力塞进了此前只能跑固定逻辑的硬件层。对于做智能硬件的团队来说,这意味着语音助手、控制逻辑与结构化输入处理可以在不上云的前提下进入更广的产品形态。真正值得观察的是后续生态:当更多工具schema、更多微调数据集进入仓库,这种端侧优先的设计能否扩展到通用函数调用场景。

发表评论