impossible LLM v2 — 5,142,875 个 NAND 门的语言模型

它读最近 6 个 MiniCPM5 token 和 4 个随机位,一次求值输出下一个 token;这一页在你的浏览器里逐门计算,没有后端。 v2 相比 v1:不再掉进 “the 2008 , the 2008” 这类死循环(采样时 0%),在对话、网页、中文文本上的一致率分别是 v1 的 4.1、2.1、53 倍。 它仍然写不出连贯的句子,也没有上链。

续写

正在读取网表(压缩后 7.9 MB,解开 36 MB)和分词器(约 2 MB)…

每个 token:取文本最后 6 个 token(102 位)+ 4 个随机位 → 5,142,875 个门 → 13 位编码 → token。随机位来自浏览器的 crypto.getRandomValues;勾选「贪心」后恒为 0,输出只由文本决定。

模型

门数5,142,875 NAND · 0 LATCH · 记录 36,000,125 字节
接口106 位输入:6 × 17 位 token id(最老在低位)+ 4 个随机位 · 13 位输出(在 8,192 个 token 里的序号)
教师MiniCPM5-2B BF16 的 argmax,每段先喂 1,024 个 token 上下文
数据英文维基 1,000 万 · 网页 fineweb-edu 800 万 · 对话 smoltalk 800 万 · 中文维基 600 万 token;每个来源另留 20 万 token 做测试
结构6 层回退查表:看最近 1…6 个 token 的表项 52,751 / 140,400 / 79,659 / 14,780 / 5,078 / 1,049 个,长的优先;都查不到时按 16 格分布输出
采样每个表项存教师在该上下文下最常给出的 3 个答案及比例;随机位按比例选(量化到 1/16)。随机位全 0 就是贪心
选表项只收比退回下一层能多猜对的上下文,门数按「每门多猜对几次」分配到各层
浏览器耗时每个 token 约 10 ms(node 实测 9.6 ms)
上链没有流片。按容器成本模型,一步约 116 亿 gas ≈ 170 个区块,实际上不可能上链执行(模型只在 5,300 门以内实测过,这里外推了约 1,000 倍)

与 v1 对比(同一批测试文本)

和教师一致的比例v1v2 贪心v2 采样
英文维基0.2350.3090.233
对话0.0740.3030.226
网页0.1160.2410.177
中文维基0.0040.2190.174
MiniCPM5-2B 自身约 0.49(维基,v1 测得)
80 条提示各续写 48 个 tokenv1v2 贪心v2 采样
卡进短循环的比例100%3.7%0%
平均不同 token 数7.524.334.5

「采样」一致率更低是预期的:采样按比例选答案,不总选最常见的那个;换来的是不重复。

怎么验证的

  • 网表和查表语义逐位一致:全部 293,717 个表项 × 16 种随机位、20 万条随机输入、四个来源各约 20 万条测试窗口,0 处不一致(C 位并行求值器)。
  • 上面的一致率是用网表本身的输出算的,和建表程序的数字逐位相同。
  • 这一页用的 JavaScript 求值器在 4,000 条输入上与参考语义 0 处不一致;分词和打包与离线流程在 200 条参考提示上一致。

它做不到什么

相关页面:Pi 工作台(大脑换成本网表) · v1 存档(54,147 门) · 源码在 tapeout 仓库 circuits/_scratch/tapeout_asic/onestep_lm/v2/(建表 v2_build.py、分块综合 v2_chunk_synth.py、验证 v2_verify.py + nleval.c)。