Wink Pings

Qwen权重里塞进一台CPU,还跑起了另一个LLM

div (fp32) 把RISC-V CPU、向量单元和stories260K编译进Qwen3.5-4B。它能写故事、存文件、做数学题,但26.7GB的checkpoint提醒你:这还只是实验。

Qwen3.5-4B的权重里,现在有一台RISC-V CPU。div (fp32) 在X上放出了Qwenputer和QwenPU,前者把完整CPU编译进权重,后者更进一步,让另一个小LLM作为C程序在模型内部跑起来。

先看结果。QwenPU让Andrej Karpathy的stories260K在Qwen3.5-4B内部生成故事。stories260K是llama2.c里的260K参数Llama,本身只是一个C程序。div (fp32) 把NPU和向量单元编译进Qwen权重,做矩阵乘、softmax和attention,每一步都和参考实现逐位一致。没有外部工具,LLM权重就在Qwen自己的内存里。

Qwenputer是更早的那一层。它把完整RISC-V CPU塞进Qwen3.5-4B的权重,用模型自己的Gated DeltaNet层当RAM,在前向传播里跑C和MicroPython,不需要外部runtime。作者在推文里给了基准:DeepMind数学题上,base Qwen3.5-4B在55%到90%之间,base加Python工具在95%到100%,Qwenputer在97.5%到100%。在NUPA上,Qwenputer拿到100%,base是48.6%,基本追平Qwen加Python。

QwenPU banner

关键机制不复杂,但很硬。Qwen3.5每4层里有3层用Gated DeltaNet。作者用one-hot key选择内存地址,把gate和write strength设成1,于是可以覆写单个槽位,再精确读回来。聊天变长,这块内存保持固定大小。作者还在这份GDN state里做了文件系统,一次聊天结束保存状态,加载到下一次聊天,文件还在。对改变过的事实,回忆正确率约90%;把旧聊天记录重新贴回去,约30%。

QwenPU的向量单元把矩阵向量乘、elementwise运算和attention加进CPU,让整个神经网络作为程序在模型自己的前向传播里跑。新权重不是训练学出来的,是编译器算出来的。这句话值得停一下:这里不是微调出一个更会做题的模型,而是把计算结构编译进权重。

运行stories260K的成本对比如下:

stories260K构建方式每个story token消耗的trace token
Plain C,int8权重2,430,000
Qwenputer NPU,VDOT加SMAQA225,000
QwenPU,向量单元53,000

QwenPU benchmark

QwenPU writing a story

向量单元有16个64字寄存器,384条int8 lane,每次读64条。权重内存是4,152个row chunk,每个chunk有64个int4权重和一个row scale,一次读两行,保证字节读取精确。K/V cache有32个位置。指令包括VMAT、VQ、VEW、VMATR、VEXP、VRED、VGET、VPUT。每个op先用几个config token带操作数,再流式输出结果,每个token都是编译层的一次精确步骤。

速度方面,GPU executor在L4上大约每秒跑3,300个trace token,一个story token约16秒。Qwenputer NPU是41秒。这个数字不快,但方向很清楚:模型前向传播不再只是算下一token,它可以在内部执行一段程序。

限制也直接。QwenPU的checkpoint是26.7GB,bf16,大部分是零填充。完整加载需要40GB或更大的GPU。story demo和checks单独运行计算机层,24GB GPU能跑。作者说正在缩小hidden size,也还在优化。写这篇东西时作者生病,完整write-up还没写完。

社区反应里,有人叫它inceptionLLM,有人叫Qwewception,有人说像在Minecraft里用红石电脑跑Minecraft。也有人问这和MoE有什么区别。MoE按token路由到不同专家;QwenPU把CPU、向量单元和程序状态塞进权重与DeltaNet状态,执行的是指令流。两者不在一个层面。

代码和权重已经放出来:

把CPU塞进LLM权重,听起来像段子。div (fp32) 把它做成了可运行、可检查、还不太小的东西。

发布时间: 2026-11-01 18:53