Z80-μLM, 40KB 안에 담긴 ‘대화형 AI’

1 month ago 10

  • 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

  • 20 Questions 게임 형태의 모델

    • 비밀 주제를 알고 있으며, YES/NO/MAYBE로 응답
    • 사용자가 정답을 맞히면 “WIN” 출력
  • 학습 데이터는 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?: 반사적 질문
  • 이러한 짧은 응답은 사용자가 맥락을 추론하도록 유도

강점과 한계

  • 강점
    • 짧은 입력에 대한 일관된 분류형 응답
    • 오타·재구성·단어 순서 변화에 강함
    • 어휘 선택을 통한 개성 표현
    • 제한된 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 중 선택 가능

Read Entire Article