14P by GN⁺ 12시간전 | ★ favorite | 댓글 2개
  • 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 중 선택 가능
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비트 가중치로 간단한 대화를 처리함
      다만 큰 컨텍스트 윈도우를 잘 활용하긴 어려울 듯함
  • AI 기업들이 Z80 칩을 전부 사들여 가격을 올릴 것 같다는 농담임
    • 이미 늦었음. 작년에 재고가 다 떨어졌음
  • 만약 어떤 모델에 비밀(passphrase) 을 학습시켜서, 사용자가 질문을 통해 그걸 추측해야 한다면
    모델의 가중치에 접근하면 그 비밀을 역으로 추론할 수 있을까, 아니면 질문을 통해서만 접근 가능할까 궁금함
    • 그 질문을 보니 이 논문이 떠오름: Planting Undetectable Backdoors in Machine Learning Models
      표면적으로는 정상 작동하지만, 내부에 탐지 불가능한 백도어를 심는 방법을 다룸
    • 모델이 작을수록 그런 비밀은 가중치 분석으로 쉽게 추출될 수 있음
      일반적으로는 ‘해석 가능성(interpretability) ’ 문제에 속함
  • 적절한 코드와 훈련 인프라만 있었다면, ELIZA도 훨씬 강력했을 것 같음
    • 원래 ELIZA는 1960년대 IBM 7094 메인프레임에서 돌아갔음
      32K×36비트 워드 구조였고, 바이트 연산은 지원하지 않았음
      40KB짜리 Z80 실행 파일을 그대로 옮기면 꽤 빡빡했을 것임
      하지만 대부분이 2비트 가중치라면 가능했을 수도 있음
      이후 하드웨어, 특히 1976년의 Z80에서는 훨씬 여유로웠을 것임
  • 나도 직접 Z80 컴퓨터를 설계하고 제작했음. 현재는 32KB ROM과 32KB RAM을 탑재함
    다음 버전에서는 확장할 예정이라 꼭 시도해볼 생각임
    • 요즘 RAM 가격이 너무 비쌈
  • 입력 전체를 한 번에 임베딩으로 처리한다면, 이건 Transformer도 RNN도 아닌 MLP 구조인 것 같음
  • 예전 자유 입력 RPG에 이런 퍼지 매처가 있었으면 좋았을 것임
    당시엔 정확한 키워드 매칭만 돼서 어색했음
    아마 그런 방식의 마지막 게임은 2001년의 Wizardry 8이었을 것임
  • 멋진 작업임. 혹시 AGI까지의 예상 일정이 어떻게 됨?
    • 아마 4월 초쯤일 듯함
    • 멀지 않은 코너 바로 뒤에 있을 것 같음

최신 기술을 과거의 하드웨어에서 돌린다는 게 정말 너무 신기한 거 같습니다.

미래에 AGI가 나왔을 때 지금 지구에 있는 컴퓨팅 파워를 모두 모은다면 돌릴 수 있을까요?