MBR中运行的神经网络模型
Show HN: A language model that lives in a boot sector
一个能启动你PC的神经网络。
MBR是512字节的汇编代码。它从接下来的23个扇区加载一个11.5 KB的int8模型,并在386上的16位实模式下运行它。没有操作系统,没有C运行时,什么都没有。机器醒来后,开始“梦”一个Linux启动日志:时间戳,PCI总线,硬件不存在 ACPI 事件。
构建帖子: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
