qwenGPU 把 45 层 GPU 编进 Qwen3.5-2B:49 kernel 全对

2026 年 11 月 1 日,开发者 Vixhal 在 GitHub 上放出 qwenGPU,一个把 GPU 直接编译进模型权重的实验项目,采用 MIT 许可。做法是把 Qwen3.5-2B 前面接上 45 个编译出来的 GPU 层,模型自身 24 层,总计 69 层,上下文长度沿用基座的 262,144 个词元。这 45 层全部未经训练,权重由编译器算出。

把 SIMT 机器塞进权重

被编译进去的是一台 4 通道 SIMT 机器,每个通道 15 个寄存器,4 级流水线,32 个块的 ROM,126 个内存字。实现只用 Qwen3.5 自带的两种层类型,Gated DeltaNet 线性注意力与 SwiGLU MLP。关键在 Gated DeltaNet 的循环状态,电路里把门保持打开、写入强度设为 1,每个键都是独热向量,每次更新恰好覆盖 1 行,独热查询再把它读回来,于是每一行就成了一格存储单元。状态里装的是程序 ROM、寄存器和全局内存。README 列的是每通道 16 行寄存器,其中 1 行恒读零,与作者所说的 15 个可用寄存器对得上。这台机器支持整数运算、谓词、分支跳转与循环,也支持共享内存、atomicAdd、__syncthreads 与 warp shuffle。

自己写出 CUDA 启动

运行时宿主扮演 NVRTC 与 CUDA 驱动的角色,用 clang 把 CUDA 编译成 PTX,再降到机器块,把程序和输入数组当作词元喂给模型,之后由模型自己写出每一次启动。每个 EXEC 块词元在一个前向过程里执行一个 warp,后续的 VAL 词元带回寄存器结果,内存写入以 MEM 记录返回,宿主只从循环状态里读结果,不做任何计算。演示视频里对 1、2、3 与 4、5、6 两个向量做点积,结果是 32,模型写出这次启动用了 47 个词元。

49 比 49 与每秒 10 到 15 词元

正确性方面,开发者自测称每一次启动在回放检查下都是精确的,参考解释器与真实的 NVIDIA Tesla T4 在 49 个测试 kernel 上全部匹配,合并后模型的下一词元分布与原模型的 KL 散度约 7e-4。普通模式下 24 道抽样问答题答对 20 道,高级模式下 5 道题里有 4 道一次写对 kernel。速度上,Apple MPS 环境下每秒 10 到 15 个词元,跑起来需要约 16 GB 空闲内存,作者也提醒 2B 模型写出的 CUDA 依然靠不住。把算力塞进权重的路线不止一家,Qwenputer 编译的是 32 位 RISC-V 处理器,同类的解码提速做法可以看 FlashMap 对 Qwen3-8B 的 6.14 倍加速。