跳到正文
原文
Hacker News· kerlenton·· 8 天前精选AI 评分80

MBR中运行的神经网络模型

Show HN: A language model that lives in a boot sector

正文 · AI 翻译

一个能启动你PC的神经网络。

MBR是512字节的汇编代码。它从接下来的23个扇区加载一个11.5 KB的int8模型,并在386上的16位实模式下运行它。没有操作系统,没有C运行时,什么都没有。机器醒来后,开始“梦”一个Linux启动日志:时间戳,PCI总线,硬件不存在 ACPI 事件。

demo

构建帖子:https://x.com/krlntn/status/2116514628457185757

用8个字符的上下文和一个隐藏层,你大致能得到这样的质量:

[  2.283888] pci 0000:01:01.4: [1b36:0a35] ryndrde c4128 6422 Vveine
[  1.953886] pci 0000:01:1f.2: reg 0x10: [mem 0x7e4515e5-0x2d766c27] usbbore: reg
[  0.206596] Command line: BOOT_IMAGE=/vmlinu -5.5.2-1-generic gcc version 13.3.0, GNU ld ...
[  1.815765] ACPI: PCI Interrupt Link [LNKA: v/s.xos212
[  1.883084] NET: Registered protocol family 16

运行它

brew install nasm qemu
python3 -m venv .venv && .venv/bin/pip install numpy
./build.sh
./run.sh

disk.img是一个普通的启动镜像。用dd命令把它拷贝到U盘,如果你有的话,可以启动任何BIOS主机。它只读取自己的扇区。

部件

corpus_gen.py生成3 MB的假dmesg。每次启动会生成一个内核版本和一个磁盘,因为真实的启动日志会重复它们,而这种重复让小模型看起来很合理。

train.py训练模型(字符嵌入,一个隐藏层,softmax),并将所有内容量化为int8,使用2的幂次方缩放,这样启动扇区可以用imul和单个idiv完成整个前向传递。脚本还模拟了汇编将运行的精确整数数学,包括LCG采样器,所以Python输出和启动扇区输出可以比较。它们逐字符匹配。

boot.asm是整个运行时:int 13h加载权重,int 10h打印,用cdq/idiv完成的软剪裁激活,用计时器种子噪声的argmax采样。任何按键都会重启机器。

record.py通过监控套接字从无头QEMU记录演示gif。没有窗口参与。

启动扇区只有代码。字符串、权重和词汇表都存在于数据扇区中,这是唯一能把推理和BIOS管道拟合到510字节的方法。

先例

启动扇区类型很古老也很辉煌。Oscar Toledo把chess,一个完整的OS,甚至一个BASIC解释器都放进去,其他人做了C编译器,所有这些都包含在512字节中。他的关于启动扇区游戏的书籍值得一读。

最接近的邻居是sectorllm,它从大约1.2 KB的实模式汇编启动一个真实的llama2转换器(5层,注意力机制,应有尽有),运行Karpathy的stories260K模型。 sectorlisp-nn 在Lisp解释器上在启动时运行TensorFlow训练的网络,还有UEFI应用程序可以直接在现代硬件上启动到llama级别的模型。

bootgpt采取了另一个极端:整个引擎都适合在510字节的MBR本身中,权重和字符串存在于接下来的扇区中,模型不是一个通用的故事讲述者,而是一个为了一件特定事情训练的小字符级网络,用来“想象”它醒来时机器的启动日志。

来源:Hacker News · github.com

00