Z80-μLM, 40KB 안에 담긴 ‘대화형 AI’
(github.com/HarryR)- 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”
-
일상적인 Q&A 데이터로 학습된 간단한 챗봇
-
guess
-
20 Questions 게임 형태의 모델
- 비밀 주제를 알고 있으며, YES/NO/MAYBE로 응답
- 사용자가 정답을 맞히면 “WIN” 출력
-
20 Questions 게임 형태의 모델
- 학습 데이터는 Ollama 또는 Claude API를 이용해 생성 가능하며, 클래스 분포 균형 도구 포함
주요 기능
- 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?: 반사적 질문
-
- 이러한 짧은 응답은 사용자가 맥락을 추론하도록 유도
- 1~2단어의 응답으로도 의외의 뉘앙스 표현 가능
강점과 한계
-
강점
- 짧은 입력에 대한 일관된 분류형 응답
- 오타·재구성·단어 순서 변화에 강함
- 어휘 선택을 통한 개성 표현
- 제한된 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만 회 연산 반복
- 추론의 핵심은 곱-누산 루프(MAC)
라이선스
- MIT 또는 Apache-2.0 중 선택 가능
Hacker News 의견들
- 완벽한 타이밍임. 나는 Unreal Engine 게임 안에 VT100 터미널(코딩 에이전트를 실행하기 위해)과 Z80 에뮬레이터, 그리고 CP/M 머신을 프로그래밍할 수 있는 시리얼 브리지를 넣었음
스크린샷
누군가가 이렇게 딱 맞는 걸 올려줄 줄은 몰랐음. 정말 기묘하지만 놀라운 우연의 일치임- 우리 둘이 텔레파시라도 통한 것 같음
나는 브라우저 기반 CP/M 에뮬레이터와 IDE를 만들었음: lockboot.github.io/desktop
원래 그걸 올리려 했는데, ‘멋진 데모’를 찾다가 토끼굴에 빠졌음 - James Burke의 Connections: Alternative History of Technology 책이 이런 우연한 연결들을 잘 다루고 있음
- 흥미롭지만, imgur를 볼 수 없어서 아쉬움
- 우리 둘이 텔레파시라도 통한 것 같음
- 정말 마음에 듦. 바로 GitHub 스타 눌렀음
나는 60년대 펀치 카드 머신용으로 Fortran IV로 MLP를 짰었음 (Xortran 프로젝트)
주의 메커니즘이 없고 문맥이 마지막 문장의 trigram으로 제한되어 있음에도 상호작용이 꽤 괜찮았음
이런 게 60년대 하드웨어에서도 가능했다면, 그 시절의 SF와 과학이 완전히 달라졌을 것임- 이런 프로젝트는 정말 흥미로움. 놓쳐버린 길을 보는 느낌임
음모론스럽게 말하자면, AI 기업들이 RAM을 대량 매입하는 이유 중 하나가 사람들이 지금이 홈컴퓨터 혁명기와 비슷하다는 걸 깨닫지 못하게 하려는 것 같음
나는 1TB RAM 머신을 쓰는데, 커스텀 에이전트로 상용 모델보다 성능이 좋음. 개인적이고 안전하며, 수익화되지 않음
- 이런 프로젝트는 정말 흥미로움. 놓쳐버린 길을 보는 느낌임
- 나도 자주 생각함. ‘최소 기능 LLM’ 이란 게 뭘까? 간단한 대화가 가능한 수준의 모델 말임
그리고 그다음 질문은, 외부 데이터를 조회하며 학습할 수 있는 작은 모델을 만들 수 있을까 하는 것임
만약 실시간으로 배우는 초소형 모델을 만들 수 있다면, 완전히 로컬화된 개인 비서를 갖게 되는 셈임- 이건 Karpathy가 말한 ‘cognitive core’ 개념과 거의 같음
백과사전식 지식은 거의 없지만, 기본적인 추론과 도구 사용 능력을 가진 아주 작은 모델임
참고 트윗 - 만약 90년대에 이런 기술이 있었다면, 기초적인 LLM은 이미 존재했을지도 모름
그랬다면 지금 세상은 완전히 달랐을 것 같음 - RWKV를 보면 흥미로움: rwkv.com
‘RNN이 LLM에 적합했다면 어땠을까’라는 실험적 케이스 스터디임
CPU에서 미친 듯이 빠름 - Minecraft 안에서 누군가 만든 LLM이 있는데, 500만 개의 8비트 가중치로 간단한 대화를 처리함
다만 큰 컨텍스트 윈도우를 잘 활용하긴 어려울 듯함
- 이건 Karpathy가 말한 ‘cognitive core’ 개념과 거의 같음
- AI 기업들이 Z80 칩을 전부 사들여 가격을 올릴 것 같다는 농담임
- 이미 늦었음. 작년에 재고가 다 떨어졌음
- 만약 어떤 모델에 비밀(passphrase) 을 학습시켜서, 사용자가 질문을 통해 그걸 추측해야 한다면
모델의 가중치에 접근하면 그 비밀을 역으로 추론할 수 있을까, 아니면 질문을 통해서만 접근 가능할까 궁금함- 그 질문을 보니 이 논문이 떠오름: Planting Undetectable Backdoors in Machine Learning Models
표면적으로는 정상 작동하지만, 내부에 탐지 불가능한 백도어를 심는 방법을 다룸 - 모델이 작을수록 그런 비밀은 가중치 분석으로 쉽게 추출될 수 있음
일반적으로는 ‘해석 가능성(interpretability) ’ 문제에 속함
- 그 질문을 보니 이 논문이 떠오름: Planting Undetectable Backdoors in Machine Learning Models
- 적절한 코드와 훈련 인프라만 있었다면, ELIZA도 훨씬 강력했을 것 같음
- 원래 ELIZA는 1960년대 IBM 7094 메인프레임에서 돌아갔음
32K×36비트 워드 구조였고, 바이트 연산은 지원하지 않았음
40KB짜리 Z80 실행 파일을 그대로 옮기면 꽤 빡빡했을 것임
하지만 대부분이 2비트 가중치라면 가능했을 수도 있음
이후 하드웨어, 특히 1976년의 Z80에서는 훨씬 여유로웠을 것임
- 원래 ELIZA는 1960년대 IBM 7094 메인프레임에서 돌아갔음
- 나도 직접 Z80 컴퓨터를 설계하고 제작했음. 현재는 32KB ROM과 32KB RAM을 탑재함
다음 버전에서는 확장할 예정이라 꼭 시도해볼 생각임- 요즘 RAM 가격이 너무 비쌈
- 입력 전체를 한 번에 임베딩으로 처리한다면, 이건 Transformer도 RNN도 아닌 MLP 구조인 것 같음
- 예전 자유 입력 RPG에 이런 퍼지 매처가 있었으면 좋았을 것임
당시엔 정확한 키워드 매칭만 돼서 어색했음
아마 그런 방식의 마지막 게임은 2001년의 Wizardry 8이었을 것임 - 멋진 작업임. 혹시 AGI까지의 예상 일정이 어떻게 됨?
- 아마 4월 초쯤일 듯함
- 멀지 않은 코너 바로 뒤에 있을 것 같음