-
Z80-μLM은 1976년산 Z80 프로세서(4MHz, 64KB RAM) 위에서 동작하는 초소형 대화형 인공지능 모델
-
양자화 인식 학습(QAT) 을 적용해 2비트 가중치와 16비트 정수 연산만으로 문자 단위 텍스트 생성 수행
- 약 40KB 크기의 .COM 실행 파일 안에 추론 엔진, 가중치, 채팅 UI가 모두 포함
-
trigram 해시 인코딩으로 입력을 128개의 버킷으로 변환해 오타나 단어 순서에 강인한 응답 생성
- 복잡한 문맥 이해는 불가능하지만, 제한된 8비트 환경에서도 작동하는 실험적 AI 모델로 주목받음
프로젝트 개요
- Z80-μLM은 레트로컴퓨팅 환경에서 구동 가능한 초소형 언어 모델
- 64KB RAM을 가진 Z80 CPU에서 작동하며, 문자 단위 대화형 응답을 생성
- 모델, 추론 코드, UI를 포함한 전체 크기가 약 40KB
- 프로젝트의 핵심 질문은 “얼마나 작게 만들어도 개성을 유지할 수 있는가”였으며, 자가 호스팅 배포도 가능
-
튜링 테스트 수준에는 미치지 않지만, 단순한 대화로 사용자에게 즐거움을 주는 형태
예제
tinychat
-
일상적인 Q&A 데이터로 학습된 간단한 챗봇
- 인사, 자기소개, 일반 대화에 짧고 개성 있는 답변 제공
- 예: “hello” → “HI”, “are you a robot” → “YES”, “do you dream” → “MAYBE”
guess
주요 기능
-
Trigram 해시 인코딩: 입력 텍스트를 128개의 버킷으로 해시, 오타 허용 및 단어 순서 무관
-
2비트 가중치 양자화: 각 가중치가 {-2, -1, 0, +1}, 1바이트당 4개 저장
-
16비트 정수 추론: Z80의 16비트 산술 연산 사용
-
~40KB .COM 파일: CP/M의 Transient Program Area(TPA)에 적합
-
자기회귀적 생성: 문자 단위로 출력 생성
-
부동소수점 연산 없음, 고정소수점 스케일링 사용
-
대화형 모드 지원: CHAT 명령으로 실행
상호작용 방식
- 모델은 입력을 ‘이해’하지 않지만, 입력의 형태(shape) 를 기반으로 반응
- 입력 문장은 128개의 trigram 버킷으로 변환되어 의미적 유사성을 유지
- 예: “hello there”와 “there hello”는 동일한 버킷 구조로 처리
- 긴 문장이나 순서 의존 문장은 구분이 어려움
짧은 응답의 의미
- 1~2단어의 응답으로도 의외의 뉘앙스 표현 가능
-
OK: 중립적 수락
-
WHY?: 질문 반박
-
R U?: 존재 의문
-
MAYBE: 불확실성
-
AM I?: 반사적 질문
- 이러한 짧은 응답은 사용자가 맥락을 추론하도록 유도
강점과 한계
-
강점
- 짧은 입력에 대한 일관된 분류형 응답
-
오타·재구성·단어 순서 변화에 강함
-
어휘 선택을 통한 개성 표현
-
제한된 8비트 하드웨어에서도 실행 가능
-
한계
- 새로운 문장 생성 불가
- 다중 턴 문맥 추적 불가
- 문법 이해 불가
- 일반 지능 수준에는 미치지 않음
아키텍처
-
입력층: 128개의 쿼리 버킷 + 128개의 컨텍스트 버킷
-
은닉층: 예시 구성 256 → 192 → 128
-
출력층: 문자셋의 각 문자당 1개 뉴런
-
활성화 함수: ReLU
양자화 제약
- Z80은 8비트 CPU지만, 16비트 레지스터 쌍(HL, DE, BC) 을 사용해 누산 및 활성화 수행
- 가중치는 4개씩 1바이트에 저장(2비트 단위)
- 16비트 누산기로 256개 입력 합산 시 오버플로 방지
- 2비트 가중치로 인해 표현력은 제한적이며, QAT 없이는 불안정한 학습 결과 발생 가능
Z80 내부 루프
- 추론의 핵심은 곱-누산 루프(MAC)
- 가중치를 언팩하고, -2~-1~0~+1 값에 따라 누산기(ACC)에 더하거나 빼는 방식
- 각 층 계산 후 오버플로 방지를 위해 2비트 오른쪽 시프트 수행
- 전체 추론 과정은 문자 하나당 약 10만 회 연산 반복
라이선스
-
MIT 또는 Apache-2.0 중 선택 가능