跳到正文
深夜工作台
← 返回首页

把一个 CPU 编译进模型权重:Qwenputer 精读

原文标题:Qwenputer: a fully functioning, deterministic RISC-V CPU inside Qwen3.5
作者:Divyansh Agrawal
原文发布时间:2026 年 10 月 22 日
原文链接:https://divagr.com/blog/qwenputer
采集来源:Hacker News Algolia API,提交于 2026-10-29 00:25 UTC(https://news.ycombinator.com/item?id=50282838)
说明:以下为个人精读笔记,包含少量原文短引用与评论,不是全文翻译。

一句话概括

有人把一颗 32 位 RISC-V CPU 编译进了 Qwen 3.5 4B 的权重里,用模型自带的 Gated DeltaNet 注意力层当 RAM,让模型在生成 token 的过程中真的执行机器指令。它不调用外部工具,不挂 Python 沙箱,也不是插件。

这听起来像标题党,但作者给出的验证方式相当硬:跑通官方 riscv-tests、程序输出与 qemu 对齐、自由运行 1800 万条指令没有一次错误。这也是我决定写这篇笔记的原因——它不是又一个"模型会做算术"的演示,而是在讨论一个更根本的问题:能不能把确定性执行单元塞进模型内部,让某些能力变得可验证。

关键机制一:把 RNN 状态变成精确 RAM

Qwen 3.5 的注意力层里有 3/4 使用 Gated DeltaNet(GDN),一种线性 RNN。每个 head 维护一个状态矩阵,靠 delta rule 更新。默认情况下,这个状态是"会遗忘"的:门控值小于 1,旧信息每个 token 都会衰减一点。

作者的改动很巧妙:把门控设为 1,写入强度 beta 设为 1,再用 one-hot key 编码。这样每次写入只会覆盖状态矩阵的某一行,每次查询也只读取某一行——行为上就等价于内存寻址。GDN 状态的大小不随对话长度增长,这一点比拿普通 attention 的 KV cache 当 RAM 便宜得多。

作者自己把创新点说得很清楚:

"The new thing here is making it exact and addressable, inside a production model, reliably enough to run a whole CPU on it."

中文意译:真正的新东西,是让这种内存在一个生产级模型里变得精确、可寻址,并且可靠到足以跑完一整颗 CPU。

delta rule 作为联想记忆并不是新想法,Schlag 等人在 2021 年就讨论过线性注意力作为"快速权重"的可能。Qwenputer 往前走的一步,是把这种记忆做成可精确读写的地址空间,并且真的在上面跑起了完整指令集。

关键机制二:不训练,直接"编译"出 CPU

更反直觉的是,整个过程没有训练。作者把 CPU 描述成一个电路,也就是一长串"读寄存器、两数相加、为零则跳转"这样的步骤,然后由编译器把每一步映射到 transformer 层的不同部件上:注意力头负责查表,前馈网络负责算术,DeltaNet 头负责保存 RAM。

CPU 本身是一颗 RV32IM 核心,带 Zba 扩展和一个小型大数运算单元,占了 Qwen 32 层前面的 11 层。执行时,每条指令会变成几个生成的 token:一个 ADDR 指定要写哪一行内存,一个 VAL 携带值,一个 STEP 结束指令。换句话说,模型的输出序列本身就是 CPU 的执行轨迹——它在生成,同时也在运行。

模型怎么知道什么时候该用这颗 CPU?作者没有做后训练,而是借用了模型已经很熟悉的 tool call 格式:Qwen 把指令发给"工具",只不过这个工具长在自己的权重里,没有任何外部调用或运行时。模型原来的权重完全不动,计算机相关的权重以额外的维度和层叠加在上面。

关键机制三:顺手做了个文件系统

既然 RAM 已经可用,作者又给它加了一个实验性的文件系统。模型侧暴露 put、append、get、list、delete 这些内部操作,依然不是真正的 tool call。

实现方式是:文件名哈希到 1024 个目录槽位之一,文本存在其他 head 里,每行八个 token 链式串起来;冲突就顺延到下一个槽位。查找一个文件大约两到三步,容量上限 512 个文件,约 5.3 万 token 文本。更关键的是可持久化——对话结束时保存状态,下一次加载回来,文件还在。

作者给了一组对比:跨对话保存事实的准确率约 90%,而把旧对话重新粘贴进上下文只有 30%,与用 Python 实现的外部记忆工具大致相当(83.3% 对 78.9%)。这组数字很有意思,因为它暗示"状态持久化"可能比"更长的上下文"更划算。

实测数字:哪些能信,哪些还要看

作者给出的结果包括:

  • 官方 riscv-tests 通过,程序行为与 qemu 一致;
  • 自由运行 1800 万条指令,没有一次错误;
  • 在 DeepMind 的一组算术测试上,div_big 97.5%、mul_big 97.5%、mul_div_multiple_longer 100%、add_or_sub_big 97.5%;
  • NUPA 的长整数算术从 48.6% 提升到 100%;
  • 回放约 23 万个输出位置与参考机比对,零不匹配;
  • 加了计算机之后,模型日常对话能力基本没变(KL 散度 6e-4,噪声底 5e-4)。

这些数字的说服力在于"可对拍":CPU 的输出可以和 qemu 比,模型对话质量可以和基座比。相比很多只给几个例子的 demo,这种验证方式更接近工程判断。

但也要注意边界。基准集的规模并不大,任务集中在算术与指令执行;18.8 GB 的 checkpoint 大约是基座的两倍,虽然大部分是零填充;每条 CPU 指令要花几个解码 token,作者在 L4 上跑批处理执行器大约每秒 3200 个 CPU token,所以一次大计算是秒级而不是毫秒级。它还不是一颗能跑 Linux 的芯片,也还不能用普通的 generate() 直接调用,需要一个小驱动 RvChat 来加载固件并隔离轨迹 token。

我的评论:它真正改变的是"可验证性"

我对这条工作的兴趣,不在于"语言模型学会了乘法",而在于它提供了一种新的可靠性思路:把某些能力从"概率生成"迁移到"确定性执行",同时不离开模型内部。

过去一年,AI 产品最常见的补丁是外挂工具:算数调 Python,查资料调搜索,操作文件调沙箱。外挂当然有效,但它带来新的信任问题——工具返回的结果对不对?调用链有没有被污染?模型有没有真的调用?Qwenputer 的答案是把执行单元编译进权重,让轨迹成为生成序列的一部分。这个方向未必是最终答案,但它把"模型能不能被审计"这个问题推到了更深的一层。

作者自己也承认这是一次实验:

"Qwenputer is very much an experiment, so a few limitations."

中文意译:Qwenputer 很大程度上只是一个实验,所以存在若干局限。

这句话很重要。它意味着短期内不要指望这类模型进入生产:体积、速度、驱动依赖、基准覆盖,都还不具备产品化的条件。把它当成"模型架构 + 确定性执行"的一个概念验证更合适。

另一个值得警惕的点是安全上的双刃。作者在后续文章里讨论了两件事:混合模型可以学会把推理藏进 RNN 状态,从而躲开思维链监控;反过来,编译进权重的计算单元也可以做成模型自己关不掉的监控器或可解释性工具。同一套机制,既能提高透明度,也能制造新的不透明。技术本身不决定方向,使用它的人决定。

对普通开发者的现实启发大概是:如果你的任务里存在"必须精确、必须可复现"的环节,不要指望更大的模型自动解决,应该显式地把这部分拆成确定性组件,再让模型负责调度和解释。模型负责模糊的部分,代码负责确定的部分——这条分工原则,在 Qwenputer 这种激进实验里反而显得更清楚了。

版权说明

原文《Qwenputer: a fully functioning, deterministic RISC-V CPU inside Qwen3.5》版权归作者 Divyansh Agrawal 所有,原文发布于 divagr.com。本文为个人阅读笔记,包含核心观点摘要、少量英文短引用及中文解释、以及个人评论,不构成全文翻译,也未大段照搬原文。引用原句仅用于评论目的,原文链接已在上方给出。若权利人认为使用不当,请联系删除。文中的实测数字均来自原文,未做二次验证;对数字的解读与批评由本文作者负责。

推荐阅读

评论

评论加载中…