1998년 iMac G3 32MB RAM에서 로컬 LLM을 돌린 LocalLLaMA 실험

이번 주 LocalLLaMA 글에서는 말 그대로 믿기 어려운 실험이 공유됐다. stock 1998 iMac G3 with 32 MB of RAM에서 local language model을 구동한 것이다. 프로젝트는 Karpathy의 llama2.c 계열 접근을 classic Mac OS로 옮기고, 하드웨어 업그레이드가 전혀 없는 Bondi Blue iMac을 목표로 한다.

이 실험이 가능한 이유는 모델 선택이 극단적으로 작기 때문이다. 최신 checkpoint를 억지로 밀어 넣는 대신, 작성자는 TinyStories 260K model과 약 1 MB 크기의 checkpoint를 사용한다. README에 따르면 앱은 iMac에서 prompt.txt를 읽고, 512-token BPE vocabulary로 tokenize한 뒤, transformer forward pass를 수행하고, 결과를 output.txt로 기록한다. 233 MHz PowerPC G3 기준으로 32 generated tokens가 1초 이내에 나온다고 한다.

진짜 흥미로운 부분은 신기한 헤드라인보다 구현 디테일이다. PowerPC 750은 big-endian이기 때문에 모델과 tokenizer 파일을 먼저 byte-swap해야 한다. Mac OS 8.5는 앱마다 기본 memory partition이 매우 작아서, 작성자는 MaxApplZone()으로 heap을 확장하고 NewPtr()로 메모리를 직접 할당하며, malloc 실패를 피하기 위해 static buffers를 사용했다. 여기에 KV cache를 줄이기 위해 max_seq_len을 512에서 32로 낮추고, grouped-query attention의 weight layout bug까지 수정해야 했다.

이 실험이 보여주는 것

이 프로젝트는 유용한 throughput이나 현대적 reasoning quality를 보여주려는 것이 아니다. 대신 tiny model이 얼마나 다양한 하드웨어로 이동할 수 있는지를 매우 선명하게 보여준다. 저장소는 Retro68 기반 cross-compilation, endian conversion, FTP 전송, 그리고 usable console이 없는 Mac OS 8.5에서 text file로만 debugging한 과정까지 문서화하고 있다.

하드웨어는 233 MHz PowerPC 750, 32 MB RAM, Mac OS 8.5다.

모델은 TinyStories 260K, Llama 2 architecture, 약 1 MB checkpoint다.

핵심 교훈은 tiny checkpoint와 신중한 systems work가 local inference의 한계를 예상보다 훨씬 멀리 밀어낸다는 점이다.

결국 이 글은 단순한 stunt보다 작은 역사 수업에 가깝다. 지금 제품 시장을 지배하는 모델과 별개로, minimum viable LLM 자체는 놀랄 만큼 작은 크기에서도 성립할 수 있다는 사실을 다시 보여준다.