跳到正文
Hacker News· kerlenton·· 15 小时前AI 评分28

Show HN:一个住在引导扇区里的大语言模型

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

AI 导读

有人用 512 字节手写汇编 MBR 加载 11.5 KB int8 模型,在 386 的 16 位实模式下运行,无需操作系统和 C 运行时。模型只有 8 字符上下文和单隐藏层,启动后生成带时间戳、PCI 地址和 ACPI 事件的虚构 Linux 启动日志。权重与词表存放在后续 23 个扇区,可用 nasm 与 QEMU 构建运行,也可 dd 到 U 盘在 BIOS 机器上启动。

正文 · 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),并用 2 的幂缩放将所有内容量化为 int8,这样启动扇区就能用 imul 和一次 idiv 完成整个前向传播。该脚本还模拟了汇编将要运行的精确整数运算,包括 LCG 采样器,因此可以对比 Python 输出和启动扇区输出。它们逐字符匹配。

boot.asm 是整个运行时:用 int 13h 加载权重,用 int 10h 打印,用 cdq/idiv 实现 softclip 激活,用定时器播种的噪声进行 argmax 采样。按任意键重启机器。

record.py 通过监视器套接字从无头 QEMU 录制演示 gif。不涉及窗口。

启动扇区只有代码。字符串、权重和词表都存放在数据扇区中,这是将推理和 BIOS 管道装入 510 字节的唯一方法。

先例

启动扇区这一类型古老而辉煌。Oscar Toledo 把国际象棋、一个完整的操作系统甚至一个BASIC 解释器放了进去,其他人做了一个C 编译器,全都在 512 字节以内。他那本关于启动扇区游戏的书值得一读。

最接近的是 sectorllm,它从大约 1.2 KB 的实模式汇编启动一个真正的 llama2 transformer(5 层、注意力机制,一应俱全),运行 Karpathy 的 stories260K 模型。sectorlisp-nn 在启动期间于 Lisp 解释器上运行一个 TensorFlow 训练的网络,还有一些 UEFI 应用在现代硬件上直接启动到 llama 级模型。

bootgpt 走另一个极端:整个引擎装在 510 字节的 MBR 本身中,权重和字符串存放在后续扇区,模型不是通用故事讲述者,而是一个微小的字符级网络,专门训练来做一件事:幻觉出它醒来所在机器的启动日志。

来源:Hacker News · github.com