ESC
AI 1 分钟阅读

Show HN:Needle 2——面向手机、可穿戴设备、智能家居和机器人的14MB智能体LLM

Needle 2是一个仅45M参数、14MB大小的端侧智能体模型,专为低成本设备设计,无需GPU/NPU,可运行于单片机、手机、可穿戴设备等。它通过函数调用和结构化输出实现设备控制,支持2bit无损量化,采用边缘-云协作,已在Pebble Index应用中本地运行。模型可在个人电脑上微调,开源发布。

来源:Hacker News

将端侧AI带到200美元以下的设备: 边缘AI近来往往指Mac和PC,但边缘设备大多数是廉价硬件:超过210亿台联网IoT设备,而PC约有15亿台;在新兴市场,大多数手机售价低于200美元。算上廉价手机、树莓派、微控制器、可穿戴设备、像Reachy Mini这样的小型机器人以及智能家居设备,大约五分之四的边缘设备价格低于200美元。这就是Needle所针对的硬件:没有GPU,没有NPU,只有几百MB内存。

函数调用与设备使用: 开灯并不需要前沿模型。手表、家居、机器人:每种设备都早已将其能力暴露为带类型参数的函数,因此唯一困难的部分是将一句含混的话映射到这些函数上:调用哪个函数,使用什么值。从这个角度看,问题不需要世界知识,也不需要开放式文本生成,这就是为什么45M参数就足够,而聊天需要数十亿参数。这个更小的规模设定是其他一切所依赖的核心赌注。

抽取与结构化输出: 模式即接口,同样的设定也适用于文档:一个模式加一段文本返回类型化字段,枚举字段就是分类器,数组字段在一次调用中收集列表。我们通过契约而非约定来强制实现:每一轮回复都带有调用封套,空调用就是拒绝,而从声明模式编译出的字节级语法约束每一个token。语法承担了句法,因此全部45M参数都用于选择函数和将参数与用户话语对齐。

边缘-云协作: 没有一个小模型能覆盖一切,所以Needle会明说而不是猜测:每个响应都带有学习到的置信度分数,偏离主题的请求返回空调用。高于你的阈值就执行;低于阈值就重新询问或升级到云端。大多数设备请求是常规控制,因此升级很少发生,默认路径保持隐私、即时和免费。

无损2bit量化: 小模型在事后量化下会损坏,因此我们从不事后量化:Needle 2从预训练到后训练都使用Cactus Quants进行训练,权重、激活和KV缓存皆如此。你部署的2bit模型就是被训练的那个模型。这就是让45M参数装入14MB且在电池上毫无损失的原因。

协同设计的模型与推理: 每个架构选择都在目标硬件上经过基准测试才获得其参数,交付物是成对的东西,而不是权重:一个无依赖的单C++二进制文件,启动时探测CPU并选择内核,模型、tokenizer和语法编译器封装在其中。一个工件可以运行在Cortex-M到x86再到WebAssembly。无需安装,无需下载。

在你的Mac/PC上微调: 每个产品都有自己的工具词汇表,而45M模型足够小,可以在运行它的地方重新训练:仓库和Python包让你在自己的电脑上数分钟到几小时内完成调参和测试。发布一个说你的设备工具的Needle,而不是通用助手。

Needle已可用于需要极小内存占用、低延迟、隐私和离线可靠性的产品。现代可穿戴行业先驱Pebble在Index 01应用中本地运行它,将语音请求转化为动作,而不依赖网络连接。

Pebble Index Ring没有屏幕。所以当你对它说话时,动作必须每次都发生,无论有没有互联网连接。我们在应用本地运行Cactus Needle,而不是依赖云端。模型占用极小,性能从未让我们失望。

Needle 2在专有的115B token语料上预训练,并在38B token上后训练,带有紧凑的推理轨迹和精心设计的数据集分布。作为规模参考:LFM2.5-230M在19万亿token上预训练,大约是Needle总训练量的120倍,而下面评估显示两者互有胜负。每个组件都是为了在不增加带宽的情况下购买能力。Hadamard MLP用固定的Walsh变换和学习到的对角矩阵取代了通常的稠密上下投影,因此主导小模型权重读取的通道混合几乎不消耗参数。engram将世界知识从堆栈中移入哈希n-gram表,每个token只读取几行:在解码时几乎免费的容量,这在闪存读取的每兆字节都意味着延迟和电池消耗的设备上很重要。多通道残差流让一个27层、512宽的网络拥有更宽网络的路由灵活性,而代价是每层几个点积,而不是更多的注意力或MLP容量。

内存系统是从固定RAM设备反向设计的。注意力使用256 token滑动窗口,因此无论会话运行多久,KV缓存都有界,系统提示和工具声明被固定为永久sink,因此工具调用模型绝不能忘记的东西——它的工具——在结构上无法被逐出。缓存本身使用QAT训练,权重以Cactus Quants存储,每权重混合位数平均为2bit。结果是质量决策和部署决策保持解耦:一个训练好的模型,可适配目标设备能负担的任何精度和窗口。

引擎的速度来自它拒绝计算的东西。权重从不解压到RAM:2bit代码在向量寄存器内展开,融合为整数点积,因此常驻内存保持blob大小,算术路径端到端为int8——激活、KV缓存和通道路由表都如此。语法是一种优化,而不仅是保证:因为匹配器在logits存在之前就知道哪些token合法,引擎只对候选行计算输出分数,在结构化token上跳过高达98%的词表投影,并在输出已被迫定的步骤上完全跳过。一个通用二进制在启动时探测CPU并自行选择内核层——SDOT、NEON、AVX2、RISC-V向量、wasm SIMD或标量——线程池在token的短串行区段上旋转而不是睡眠,这单独就使解码速度几乎翻倍。这些都不会改变任何输出:每个技巧要么精确,要么逐token对照参考路径验证。

所有这一切归根结底是能量论据。在设备芯片上,从闪存或DRAM移出一个字节的成本比乘累加运算高出几个数量级,因此关键预算是每token的FLOPs和每token的字节数。架构削减了前者:一个Needle宽度和深度的传统Transformer每token消耗164 MFLOPs,即使压缩到Needle参数量的也消耗87,因为它拥有的每个参数都必须通过matmul来使用。Needle消耗70,并将其五分之一的参数保留为不需要任何算术的收集内存。二进制削减了后者,如引擎部分所示:没有任何重新物化,算术端到端保持int8,语法直接剪除计算,因此解码一个token最多只读取一次14MB blob,在结构化token上则显著更少。这就是电池续航的来源。即使在高端手机上,常驻助手也生活在功率预算内;每个MFLOP都是毫瓦时,而Needle每token消耗的毫瓦时比对标模型少7倍到85倍。

有界会话内存使微控制器触手可及。由于滑动窗口限制了状态,Needle 2的RAM是确定的28MB上限,而不是随对话长度增长的曲线。这适合带外部RAM的MCU级部件,例如带32MB PSRAM的ESP32-P4,或带SDRAM的STM32H7和NXP i.MX RT板卡。引擎可为裸机单线程编译,并作为Cortex-M4、M7和M55的静态库发布。

我们在五个公开函数调用基准上评估:Google的Mobile Actions、DroidCall、Seal-Tools域内和域外测试,以及BFCL v4单轮。评分采用有序严格精确匹配:一行仅当函数名、调用顺序和每个参数值都匹配才通过。所有Needle 2数字都是通过发布的C++引擎在其生产配置下端到端测量的:CQ2bit权重、工具检索开启、256 token滑动KV窗口。基准测试没有做任何放松;数字反映的是设备实际运行的引擎,包括窗口逐出。基线在vLLM下以完整上下文运行发布的检查点,Apple FM在设备上运行。