Soul Player C64 – A real transformer running on a 1 MHz Commodore 64
개요
Soul Player C64는 ChatGPT, Claude, Gemini와 동일한 2-layer decoder-only transformer 아키텍처를 1MHz Commodore 64에서 실행하는 프로젝트로, 약 25,000개의 int8 파라미터를 사용하며 토큰당 약 60초가 소요된다.
주요 내용
* 아키텍처 및 파라미터: 2개의 레이어, 4개의 어텐션 헤드, 32차원 임베딩, 64개의 FFN 은닉 유닛으로 구성된 트랜스포머 모델이 약 25,000개의 int8 파라미터로 구현되었다.
* 핵심 기술: 소프트맥스 점수 정규화를 14비트로 조정하여 128개 항목의 exp 조회 테이블이 유의미한 어텐션 가중치를 생성할 수 있도록 개선했으며, 이는 6502/6510 어셈블리로 구현된 실제 멀티-헤드 인과적 셀프 어텐션, 소프트맥스, RMSNorm을 포함한다.
* 실행 환경: 수정되지 않은 Commodore 64에서 실행되며, 1MB 플로피 디스크에 전체 모델과 토크나이저가 저장된다.
* 사용 방법: VICE와 같은 C64 에뮬레이터에서 soulplayer.d64 디스크 이미지를 로드하여 실행하고, 소문자로 된 짧은 메시지를 입력하면 응답을 생성한다.
* 모델 학습: 제공된 train.py 스크립트를 사용하여 자체 말뭉지를 기반으로 BPE 토크나이저 및 QAT(Quantization-Aware Training) 트랜스포머 모델을 학습시키고, GPU를 사용하여 수 분 내에 완료할 수 있다.
* 빌드 및 테스트: build.py 스크립트를 통해 학습된 가중치를 포함한 Commodore 64 실행 파일을 생성하며, test.py 스크립트는 전체 파이프라인의 정확성을 검증한다.
* 메모리 사용: 코드 및 토크나이저 테이블에 약 6KB, 가중치에 25.3KB, 활성화 버퍼에 5.8KB, 토큰 버퍼 및 입력에 추가 공간이 할당된다.
* QAT 학습: 학습 중에는 FakeQuantI8을 사용하여 모델이 양자화 간격을 견딜 수 있는 가중치를 학습하도록 하며, 500 에포크마다 실제 정수 순방향 전달을 평가하여 int8 정확도에 따라 최적 체크포인트를 저장한다.
시사점
이 프로젝트는 제한된 컴퓨팅 자원에서도 복잡한 딥러닝 아키텍처의 작동 가능성을 보여주며, 고전 하드웨어에 최신 AI 기술을 이식하는 흥미로운 사례를 제공한다.
댓글
GitHub Discussions