1998년형 iMac G3(RAM 32MB)에서 LLM을 구동해 보았다
핵심 요약
1998년형 iMac G3의 제한된 하드웨어 환경에서 LLM 추론을 성공적으로 구현한 기술적 실험입니다.
- 하드웨어 사양 — 233MHz PowerPC 750 프로세서와 32MB RAM을 탑재한 1998년형 iMac G3 사용.
- 기술적 구현 — Retro68을 통해 크로스 컴파일하고 모델을 빅 엔디안으로 변환하여 구동함.
- 메모리 최적화 — Mac OS 8.5의 제한된 메모리 환경을 극복하기 위해 직접 힙 할당 및 정적 버퍼 사용.
- 실험적 성격 — 실용성보다는 기술적 한계를 시험하고 재미를 위한 데모 프로젝트임.
하드웨어:
• 순정 iMac G3 Rev B (1998년 10월). 233 MHz PowerPC 750, 32 MB RAM, Mac OS 8.5. 업그레이드 없음.
• 모델: Andrej Karpathy의 260K TinyStories (Llama 2 아키텍처). ~1 MB 체크포인트.
툴체인:
• Mac mini에서 Retro68 (Classic Mac OS용 GCC → PEF 바이너리)을 사용하여 크로스 컴파일
• PowerPC용으로 모델과 토크나이저를 리틀 엔디안에서 빅 엔디안으로 스왑
• 이더넷을 통해 iMac으로 FTP 전송
도전 과제:
• Mac OS 8.5는 기본적으로 앱에 매우 작은 메모리 파티션을 할당함. 충분한 힙을 확보하기 위해 Mac Memory Manager의 MaxApplZone() + NewPtr()을 사용해야 했음
• 이 하드웨어에서는 RetroConsole이 충돌하여, 모든 출력을 SimpleText에서 열 수 있는 텍스트 파일로 작성함
• 원본 llama2.c 가중치 레이아웃은 n_kv_heads == n_heads를 가정함. 260K 모델은 그룹화된 쿼리 어텐션(kv_heads=4, heads=8)을 사용하여 wk 이후의 모든 포인터를 이동시켜 NaN을 생성함. n_kv_heads * head_size를 wk/wv 크기 조정에 사용하여 해결함
• 32 MB에서 malloc 실패를 방지하기 위해 KV 캐시와 실행 상태에 대한 정적 버퍼 사용
prompt.txt에서 프롬프트를 읽고, BPE로 토큰화한 뒤, 추론을 실행하고, output.txt에 이어지는 내용을 작성함.
물론 출력은 매우 짧지만, 이건 확실히 재미있는 실험/데모를 위한 것입니다!
여기 저장소 링크입니다: https://github.com/maddiedreese/imac-llm


