[ 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
[ 1.815765] ACPI: PCI Interrupt Link [LNKA: v/s.xos212
컴퓨터의 전원 버튼을 누르자마자 화면 위로 쏟아지는 커널 로그입니다. 첫 줄에는 PCI 버스 주소가 출력되고, 둘째 줄에는 메모리 레지스터 범위가 할당되며, 셋째 줄에서는 시스템의 인터럽트 처리가 초기화됩니다. 시스템 엔지니어라면 누구나 평범한 서버가 하드웨어를 깨우는 과정이라고 여길 것입니다.
하지만 화면에 표시되는 하드웨어는 현실에 존재하지 않습니다. 장치명에 등장하는 ryndrde나 usbbore는 모델이 만들어낸 철자 오류 단어이며, 시스템에는 운영체제조차 로드되지 않았습니다. 이 텍스트 출력을 만들어내는 주체는 512바이트의 수기 어셈블리 코드와 단 11.5KB 크기의 인공신경망뿐입니다.
개발자 kerlenton은 이 프로젝트에 bootgpt라는 이름을 붙였습니다. 수백억 개의 매개변수와 엄청난 양의 전력을 소비하는 주류 인공지능 경쟁과는 반대로, 이 프로젝트는 1985년의 칩 환경으로 되돌아가 연산 자원의 규모가 지능을 구현하는 절대적인 전제 조건이 아님을 증명합니다.
부팅 직후 쏟아지는 로그, 화면을 채우는 가상 하드웨어
빌드된 disk.img 이미지를 USB 드라이브에 굽고 레거시 BIOS를 지원하는 컴퓨터에 연결해 부팅하면 화면이 즉시 켜집니다. 리눅스 커널 부팅도, GRUB 메뉴도 없이 깜빡이는 커서가 흰색 텍스트를 빠르게 뿜어냅니다. 타임스탬프가 움직이고 주변장치 주소가 흐르는 모습은 오래된 실리콘이 꿈을 꾸는 것처럼 보입니다.
이 꿈은 컨텍스트 길이가 단 8글자에 불과한 초소형 모델에 의해 실시간으로 생성됩니다. 8글자는 영단어 하나도 온전히 담기 어려운 짧은 길이지만, 모델은 콜론, 공백, 16진수 주소를 정확하게 이어 나갑니다. 실제 하드웨어 드라이버는 없지만, 모델은 부팅 로그의 구조적 리듬을 그대로 학습했습니다.
그림: QEMU에서 실행되어 리눅스 부팅 로그를 한 줄씩 출력하는 bootgpt. 출처: kerlenton/bootgpt 저장소
움직이는 이미지는 QEMU 에뮬레이터에서 실행 중인 실제 동작 모습을 담고 있습니다. 텍스트가 끝없이 이어지는 것처럼 보이지만, 그 바탕은 문자 단위의 통계적 확률에 따른 추론입니다. 처음 몇 글자가 부팅 로그의 패턴과 일치하기만 하면, 뒤따르는 출력은 엔지니어들에게 친숙한 시스템 로그의 형태를 자연스럽게 유지합니다.
운영체제 배제: 512바이트 어셈블리가 칩 전체를 제어하다
현대 인공지능 아키텍처는 복잡한 소프트웨어 계층에 의존합니다. 단 한 번의 추론을 실행하기 위해서도 파이썬 인터프리터, 운영체제 커널, 그래픽 드라이버가 필요하며, 수 기가바이트의 VRAM이 소모됩니다. 현대 개발 생태계는 이러한 거대함을 당연하게 여기며, 신경망이 동작하려면 완전한 운영체제가 반드시 뒷받침되어야 한다고 생각합니다.
bootgpt는 이러한 부가 계층을 남김없이 걷어냈습니다. 마스터 부트 레코드(MBR) 디스크 규격에서 부팅 코드는 엄격하게 512바이트로 제한되며, 마지막 2바이트는 부팅 식별자 0xAA55로 고정되어 있습니다. 개발자는 직접 작성한 16비트 x86 어셈블리로 남은 510바이트를 채워 완전한 추론 런타임을 구현했습니다.
CPU는 16비트 리얼 모드에서 동작하며, 메모리 주소 공간은 1MB 이내로 제한됩니다. 어셈블리 코드는 BIOS의 디스크 인터럽트 INT 13h를 호출하여 디스크에 연속된 23개 섹터를 한 번에 읽어 들입니다. 그 23개 섹터에 담긴 11.5KB 크기의 모델 가중치는 파일시스템의 간섭 없이 물리 메모리로 바로 로드됩니다.
512바이트의 어셈블리 코드는 모델 로드, 키보드 입력 루프, 텍스트 화면 출력을 모두 처리합니다. 드라이버 충돌도, 프로세스 스케줄링도 없습니다. 전원이 켜진 칩은 전기 신호를 추론 루프로 바로 흘려보냅니다. 여러 소프트웨어 추상화 계층으로 쌓아 올린 범용성을 수기 어셈블리가 완전히 대체한 셈입니다.
부동소수점 제거: 덧셈과 비트 시프트로 대체된 행렬 곱셈
딥러닝의 핵심 연산은 대부분 부동소수점에 의존합니다. 그러나 초기 인텔 80386 프로세서에는 수치 보조 프로세서가 내장되어 있지 않아 부동소수점 명령어를 실행하려면 값비싼 하드웨어를 추가해야 했습니다. 40년 전 아키텍처에서 신경망을 구동하려면 부동소수점 연산 자체를 제거해야 했습니다.
개발자는 모델의 모든 가중치와 활성화 값을 int8 정수 범위로 양자화했습니다. 스케일링 팩터는 2의 거듭제곱으로 설계되어 부동소수점의 곱셈과 나눗셈이 저수준의 이진 비트 시프트로 단순화되었습니다. 복잡했던 행렬 곱셈은 원초적인 imul 정수 곱셈과 시프트 명령어로 치환되었습니다.
순전파 과정 전체에서 나눗셈이 일어나는 곳은 소프트맥스(Softmax) 확률 정규화 단계뿐입니다. 어셈블리 코드는 단 한 번의 idiv 명령어를 실행하여 문자 확률 분포를 계산합니다. 샘플링 단계에서는 직접 구현한 선형 합동 생성기(LCG)를 활용해 단순한 곱셈과 덧셈 반복만으로 의사 난수를 생성합니다.
복잡한 트랜스포머 레이어 대신 문자 임베딩 하나와 단일 은닉층만을 갖추었습니다. 연산량을 수백 클록 사이클 수준으로 압축하여 지난 세기의 느린 클록 주파수로도 매끄러운 텍스트 출력을 이끌어냈습니다. 지능을 표현하는 수학이 가장 단순한 산술 조합으로 돌아간 것입니다.
합성 말뭉치로 훈련: 부팅 로그의 형태를 학습한 초소형 모델
가벼운 아키텍처만으로는 그럴듯한 텍스트를 만들어낼 수 없습니다. 기억 용량이 8글자에 불과한 모델은 장기적인 논리를 기억할 수 없어 무의미한 문자가 반복되는 루프에 빠지기 쉽습니다. 이를 해결하기 위해 개발자는 전용 스크립트인 corpus_gen.py를 작성하여 3MB 크기의 합성 부팅 로그를 생성했습니다.
실제 시스템의 부팅 로그는 상당한 패턴 반복을 보입니다. 한 번의 부팅 세션 동안 커널 버전은 일정하게 유지되고, 마운트되는 디스크 시리얼 번호도 동일합니다. 말뭉치 생성기는 특정 세션의 상수를 고정함으로써 문자 간 전이 확률에 뚜렷한 주기성을 부여했습니다.
초소형 모델은 학습 과정에서 이러한 반복 구문을 빠르게 파악했습니다. PCI 버스의 하드웨어 규격을 이해할 필요 없이, 콜론 뒤에는 높은 확률로 공백이 오고 줄바꿈 앞에는 괄호가 붙는다는 통계적 직관만 학습한 것입니다. 특정 작업에 철저히 맞춘 정보 축약을 통해 매개변수 규모를 뛰어넘는 시각적 현실감을 얻어냈습니다.
그림: bootgpt 프로젝트 코드 저장소. 출처: GitHub
프로젝트의 학습 스크립트인 train.py에는 정밀한 정수 시뮬레이터가 내장되어 있습니다. 파이썬 학습 환경은 어셈블리 코드의 비트 시프트 오차와 LCG 샘플링 방식을 바이트 단위까지 똑같이 재현합니다. 이를 통해 소스코드 수준에서 실제 기기 구동 결과의 일관성을 완벽히 보장했습니다.
연산 능력 확장이 유일한 답은 아니다: 386으로 돌아간 인공지능
512바이트의 부트 섹터 안에 극한의 프로그램을 구현하는 것은 오랜 해커 문화의 전통입니다. 수십 년 전에도 부트 섹터에 체스 엔진을 넣거나 초소형 운영체제와 마이크로 컴파일러를 구현하려는 시도가 이어졌습니다. 최근 등장한 sectorllm 프로젝트의 경우 1.2KB 크기의 어셈블리에 셀프 어텐션 메커니즘을 담아내기도 했습니다.
bootgpt는 컴퓨팅의 물리적 경계를 탐구해 온 이러한 기술적 계보를 잇고 있습니다. 범용적인 추론 능력을 쫓는 대신 특화된 작업을 물리적 한계까지 압축한 것입니다. 연산 능력이 40년 전의 싱글 코어 마이크로프로세서 수준으로 낮아졌음에도, 모델은 모니터 위에서 기대했던 동작을 훌륭하게 수행합니다.
오늘날의 기술 산업은 막대한 자본과 전력으로 모든 기술적 한계를 돌파하는 데 익숙해져 있습니다. 대규모 연산 자원이 기술의 상한선을 끌어올린 것은 분명하지만, 자원이 제한되었을 때 발휘되던 우아한 공학적 해결책을 잊게 만들기도 했습니다. 문제를 명확하게 정의하고 엄격한 제약 속에서 알고리즘을 깎아낸다면, 단 512바이트만으로도 지능의 환영을 구축하기에 충분합니다.
참고 링크:
- kerlenton/bootgpt 저장소 코드
- Hacker News 토론