512바이트 부트 섹터에 신경망 얹어 가짜 리눅스 부팅 로그를 만들어내는 bootgpt

Hacker News12시간 전

bootgpt는 운영체제 없이 부팅 직후에 신경망을 돌리는 실험이다. 512바이트짜리 MBR을 손으로 작성한 어셈블리로 채우고, 그 뒤 23개 섹터에 걸쳐 11.5KB 크기의 int8 모델을 읽어 들인 뒤 16비트 리얼모드에서 386급 CPU를 가정하고 순전파를 수행한다. C 런타임도, 커널도, 파일 시스템도 개입하지 않는다. 전원이 들어온 기계가 곧바로 언어 모델이 되어 리눅스 부팅 로그를 흉내 낸다.

모델이 내놓는 것은 타임스탬프와 PCI BAR 주소, ACPI 인터럽트 링크, 커널 커맨드라인 같은 dmesg 형식의 텍스트다. 물론 실제 하드웨어와는 무관하다. 존재한 적 없는 장치의 메모리 맵이 찍히고, 커널 버전과 링커 버전이 그럴듯하게 섞여 나온다. 문맥은 문자 8개, 은닉층은 하나뿐이라 단어 중간이 깨지거나 의미 없는 토큰이 붙는 일이 잦다. 대신 로그 특유의 반복되는 리듬과 형식은 상당히 비슷하게 흉내 낸다.

학습 쪽은 파이썬과 numpy로 끝난다. 별도 스크립트가 3MB 분량의 가짜 dmesg 코퍼스를 만들고, 문자 임베딩과 은닉층 하나, softmax로 구성된 소형 네트워크를 학습시킨다. 이때 부팅 세션마다 커널 버전 하나와 디스크 하나를 고정하는데, 실제 부팅 로그는 같은 내용을 반복하기 때문에 그 반복이 작은 모델을 그럴듯하게 보이게 하는 핵심 재료가 된다는 판단이다.

흥미로운 부분은 양자화와 검증 절차다. 모든 가중치를 2의 거듭제곱 스케일을 쓰는 int8로 떨어뜨려, 부트 섹터가 imul과 단 한 번의 idiv만으로 순전파 전체를 처리하도록 만들었다. 학습 스크립트는 어셈블리가 실제로 실행할 정수 연산을 난수 샘플러까지 포함해 그대로 시뮬레이션하고, 파이썬 출력과 부팅 결과를 문자 단위로 비교한다. 두 결과가 완전히 일치한다는 것이 이 프로젝트의 자랑거리다.

런타임 전체는 boot.asm 한 파일이다. int 13h로 가중치를 적재하고, int 10h로 화면에 출력하며, cdq와 idiv를 조합한 softclip 활성화, 타이머로 시드를 준 노이즈를 섞은 argmax 샘플링을 쓴다. 아무 키나 누르면 기계가 재부팅된다. 부트 섹터에는 코드만 들어가고 문자열과 가중치, 어휘 테이블은 전부 뒤쪽 데이터 섹터로 밀어냈다. 510바이트 안에 추론 엔진과 BIOS 호출을 함께 넣으려면 그렇게 나눌 수밖에 없었다는 설명이다.

이 프로젝트는 부트 섹터 자체를 놀이터로 삼아온 오랜 계보 위에 있다. 512바이트 안에 게임을 넣는 작업과 C 컴파일러를 밀어 넣는 시도가 있었고, 근래에는 리얼모드 어셈블리 1.2KB 정도로 5개 층과 어텐션을 갖춘 llama2 계열 트랜스포머를 부팅시키는 sectorllm 같은 사례도 나왔다. Lisp 인터프리터 위에서 학습된 신경망을 돌리거나 UEFI 앱으로 llama급 모델을 띄우는 시도도 있다. bootgpt는 반대로 엔진 전체를 MBR 안에 밀어 넣고, 범용 이야기꾼 대신 부팅 로그 모사라는 단일 목적에 특화된 초소형 문자 단위 모델을 택했다.

실무적으로 볼거리는 정수만으로 추론을 끝내는 파이프라인이다. 부동소수점 없이 2의 거듭제곱 스케일 int8 곱셈과 나눗셈만으로 forward pass를 구성하고, 그 결과를 고수준 언어 시뮬레이션과 문자 단위로 대조해 검증하는 방식은 임베디드·엣지 추론을 다루는 사람에게 그대로 참고할 만한 패턴이다. 모델 크기와 코드 크기를 동시에 예산으로 잡고 설계하는 사이즈 코딩 관점도 얻을 수 있다.

직접 돌려보려면 disk.img를 USB에 dd로 구워 BIOS 기반 머신에서 부팅하면 된다. 이 이미지는 자기 섹터만 읽는다. 헤드리스 QEMU에서 모니터를 통해 화면을 녹화하는 스크립트도 함께 제공되므로, 구형 하드웨어가 없어도 결과를 확인할 수 있다.

한계는 분명하다. 문맥 8문자에 은닉층 하나라는 구조상 출력 품질은 낮고, 문장이 온전히 만들어진다고 기대하면 안 된다. BIOS와 16비트 리얼모드를 전제하므로 UEFI 환경에서는 그대로 동작하지 않는다. 생성하는 로그는 합성 코퍼스로 학습한 모사품이며, 특정 하드웨어를 진단하거나 실제 부팅 과정을 돕는 용도가 아니다.