
운영체제도 없이, 전원 켜자마자 돌아가는 언어 모델
컴퓨터 전원을 켜면 운영체제가 뜨기도 전에 가장 먼저 실행되는 코드가 있어요. 바로 부트 섹터(boot sector)예요. 디스크 맨 앞 512바이트 영역인데, 전통적인 BIOS 방식 부팅에서는 여기 담긴 코드가 “이제 운영체제를 불러와”라고 지시하는 역할을 하거든요. 그런데 이 512바이트 안에 ‘언어 모델’을 통째로 집어넣은 BootGPT라는 프로젝트가 공개됐어요.
512바이트가 얼마나 작은지 감이 잘 안 오실 텐데요. 한글은 UTF-8로 저장하면 글자당 3바이트라서 170자 남짓이면 꽉 차요. 이 글의 첫 문단도 다 안 들어가는 크기죠. 게다가 마지막 2바이트는 “여기 부팅 가능한 코드 있어요”라는 서명(0x55, 0xAA) 자리로 정해져 있어서, 실제로 쓸 수 있는 건 510바이트뿐이에요. 요즘 LLM 가중치 파일이 수 GB에서 수백 GB까지 가는 걸 생각하면 거의 농담 같은 크기예요.
510바이트 안의 세계
먼저 환경부터 볼게요. 부트 섹터 코드는 x86 CPU가 막 켜졌을 때의 리얼 모드(real mode)에서 돌아가요. 1978년에 나온 인텔 8086 시절과 거의 같은 16비트 환경이라고 보시면 돼요. 운영체제가 없으니 printf도, malloc도, 파일 시스템도 없어요. 화면에 글자 하나 찍으려 해도 BIOS 인터럽트(int 0x10)를 직접 불러야 하고, 키보드 입력도 int 0x16으로 직접 받아야 해요. 부동소수점 명령을 아예 못 쓰는 건 아니지만, 바이트를 아끼려고 정수나 고정소수점 연산으로 버티는 경우가 많아요.
그럼 이런 곳에서 말하는 ‘언어 모델’은 뭘까요? 여기서 언어 모델의 본질을 짚고 가면 좋아요. 언어 모델이 하는 일은 생각보다 단순해요. 지금까지 나온 글자(토큰)를 보고 다음에 올 글자의 확률을 계산한 뒤, 하나를 골라 이어 붙이는 것을 반복할 뿐이거든요. 수천억 파라미터짜리 최신 모델이든 휴대폰 자동완성이든 이 루프는 똑같아요. 차이는 확률을 계산하는 함수가 얼마나 크고 정교하냐에 있죠.
510바이트 안에서는 이 함수를 극단적으로 줄여야 해요. 이런 제약에서 흔히 쓰는 기법은 이런 것들이에요.
- 문자 단위(character-level) 처리: 수만 개짜리 단어 사전 대신 글자 하나하나를 토큰으로 써서 어휘 크기를 수십 개로 줄여요.
- 초저비트 양자화: 가중치(모델이 학습한 숫자들)를 32비트 실수 대신 몇 비트짜리 정수로 저장해요. 1~2비트까지 내리면 같은 공간에 16~32배 많은 파라미터를 넣을 수 있죠.
- 코드 다이어트: 추론 루프, 샘플링, 출력 코드를 극한까지 짧게 짜서 남는 바이트를 전부 가중치에 몰아줘요.
- LLM을 블랙박스가 아닌 루프로 이해하기: 토큰화, 확률 계산, 샘플링, 반복이라는 구조가 몇백 바이트 안에 다 드러나 있어요. API를 쓸 때 만지는 temperature나 top-k가 결국 샘플링 단계를 조절하는 손잡이라는 것도 체감할 수 있고요.
- 경량화 감각: 온디바이스 AI가 늘면서 모델을 얼마나 작게 만들 수 있느냐는 이제 실무 질문이 됐어요. 양자화가 품질을 얼마나 깎아먹는지 극단적인 사례로 확인해볼 수 있죠.
- 로우레벨 기초 체력: 이런 부트 섹터 프로젝트는 보통 QEMU로 바로 띄워볼 수 있어요.
qemu-system-i386 -drive format=raw,file=boot.bin같은 명령 한 줄이면 되니까, 주말에 x86 부팅 과정과 BIOS 인터럽트를 익히는 교재로 딱이에요.
BootGPT가 정확히 어떤 구조와 학습 방식을 썼는지는 저장소 코드를 직접 열어보시길 추천해요. 몇백 바이트짜리 어셈블리라 생각보다 금방 읽히거든요. 다만 기대치는 미리 맞춰두는 게 좋아요. 이 크기에서 나오는 결과물은 대화형 챗봇이 아니라, 학습한 텍스트의 ‘느낌’을 흉내 낸 글자 나열에 가까워요. 그래도 학습된 숫자로 다음 글자를 예측해서 텍스트를 만든다는 원리만큼은 진짜 LLM과 똑같다는 게 포인트예요.
업계 맥락: 극한 미니멀리즘의 계보
부트 섹터에 뭔가를 우겨넣는 건 해커 문화의 오랜 놀이예요. 512바이트에 리스프 인터프리터를 넣은 SectorLISP, Forth 언어를 넣은 sectorforth, 체스 엔진을 넣은 BootChess가 대표적이죠. 데모신(demoscene)에서는 256바이트로 화려한 그래픽을 뽑아내는 경쟁이 지금도 이어지고 있고요.
AI 쪽에도 비슷한 흐름이 있어요. 안드레이 카파시의 llama2.c는 C 파일 하나로 Llama 2 구조의 모델을 돌려서, LLM 추론 코드가 생각보다 짧다는 걸 보여줬어요. 그 뒤로 윈도우 98이 깔린 펜티엄 II 같은 옛날 기계에서 작은 언어 모델을 돌리는 실험도 이어졌고요. BootGPT는 극한의 코드 골프와 LLM 뜯어보기, 이 두 흐름이 만나는 자리에 있는 프로젝트예요.
한국 개발자에게 주는 시사점
실무에서 BootGPT를 쓸 일은 없겠지만 배울 거리는 확실해요.
마무리
한 줄 정리: BootGPT는 쓸모보다 이해를 위한 프로젝트로, LLM의 본질이 다음 토큰 예측 루프라는 걸 510바이트로 보여줘요.
여러분이라면 512바이트가 주어졌을 때 뭘 넣어보고 싶으세요? 그리고 LLM을 처음 공부하는 사람에게는 거대 모델 API보다 이런 초소형 구현부터 뜯어보는 게 더 도움이 된다고 생각하시나요?
🔗 출처: Hacker News