메인 콘텐츠로 건너뛰기

40KB에 들어간 대화형 AI, Z80-μLM이 말해주는 것들

1976년에 나온 4MHz짜리 8비트 CPU 위에서 ‘대화형 AI’가 돌아간다면 믿을 수 있을까요? 그것도 전체 프로그램이 40KB짜리 .COM 파일 하나라면요.

Z80-μLM은 바로 그런 물건입니다. 최신 GPU와 수십 기가 메모리를 먹는 거대 LLM과는 정반대 방향으로 끝까지 밀어붙인 실험이죠. 이 글에서는 Z80-μLM이 어떤 방식으로 대화형 AI를 구현했는지, 왜 40KB 안에 들어갈 수 있었는지, 그리고 이 프로젝트가 오늘날 AI와 개발자에게 주는 시사점을 정리해보겠습니다.

고전 CPU 위에 올라간 초미니 대화형 AI

Z80-μLM의 무대는 지극히 소박합니다. 1976년에 발표된 8비트 마이크로프로세서 Zilog Z80, 그리고 64KB RAM뿐인 CP/M 환경입니다1. 여기서 개발자는 “언어 모델을 얼마나 작게 만들 수 있을까?”라는 질문을 붙잡고 실험을 시작했습니다2.

Z80-μLM은 문자 단위(character-level) 언어 모델입니다. 우리가 흔히 사용하는 토큰 단위 LLM이 아니라, 한 글자씩 다음 글자를 예측해 문장을 만들어가는 방식입니다. 구조는 단순하지만, 그만큼 연산량과 메모리를 최대한 줄일 수 있습니다.

전체 바이너리 크기는 약 40KB입니다2. 이 안에 모델 가중치, 추론(inference) 코드, 간단한 채팅 UI가 모두 들어 있습니다. 별도의 라이브러리도 없고, 부동소수점 연산도 전혀 사용하지 않습니다. 그냥 “옛날 컴퓨터에서 돌아가는 .COM 파일 하나”인 셈이죠.

물론 이 모델이 투표권을 얻을 만큼 똑똑한 건 아닙니다. 이메일을 써주지도 않고, 복잡한 코드를 짜지도 못합니다. 대신 짧은 문장으로 툭툭 대답하며, 가끔 의외의 한마디로 사람을 웃게 만드는, 그런 “작은 인격체”에 가깝습니다.

어떻게 40KB에 넣었나: 2비트 양자화와 정수 연산

Z80-μLM의 핵심은 “양자화 인식 훈련(QAT, Quantization-Aware Training)”과 극단적인 저비트 양자화입니다2.

모든 가중치는 2비트로 표현됩니다. 가능한 값은 네 개뿐입니다.

-2, -1, 0, +1

이게 끝입니다. 보통 LLM에서 사용하는 16비트, 8비트와 비교하면 거의 “픽셀 아트 수준”의 해상도죠. 이런 저해상도 가중치를 그대로 쓰려면, 처음부터 “2비트로밖에 표현할 수 없다”는 사실을 알고 훈련을 해야 합니다.

그래서 훈련 루프에서 부동소수점 버전과 “Z80에서 실제로 돌릴 정수 버전”을 동시에 돌려보며, 양자화된 버전도 최대한 잘 작동하도록 가중치를 계속 밀어줍니다2. 이게 양자화 인식 훈련의 핵심입니다.

트릭은 여기서 끝나지 않습니다. Z80은 8비트 CPU지만 16비트 정수 연산을 지원합니다. Z80-μLM은 이 16비트 누산기를 최대한 활용해, 2비트 가중치를 쪼개서 계산한 후 누적하는 방식으로 안정적인 수치 계산을 구현했습니다. 덕분에 부동소수점 같은 사치를 부리지 않고도, 작은 정수들의 곱셈·덧셈만으로 네트워크 추론을 수행합니다.

정리하면, 이 모델이 40KB에 들어갈 수 있었던 이유는 대략 이렇게 요약할 수 있습니다.

  • 문자 단위 모델로 구조를 단순화

  • 모든 가중치를 2비트로 양자화

  • 16비트 정수만 활용하는 계산 경로 설계

  • 훈련 단계에서부터 양자화 손실을 고려해 QAT 적용

즉, “최소한의 정보로 최대한 버티는” 쪽으로 모든 설계를 몰아준 결과입니다.

입력을 128 버킷으로 해시하는, 독특한 언어 처리 방식

Z80-μLM이 흥미로운 지점은, 텍스트를 처리하는 방식에도 있습니다. 일반적인 LLM은 토큰화를 이용해 단어 또는 서브워드 단위로 입력을 처리하지만, 이 모델은 훨씬 과감한 선택을 합니다.

사용자 입력은 간단한 해시 함수를 통해 128개의 버킷으로 떨어집니다2. 좀 더 구체적으로는, 문자 조합(트라이그램)을 해시해서 128개짜리 공간에 흩뿌리고, 그 결과를 입력 벡터로 쓰는 방식입니다.

이 방식에는 장점과 한계가 동시에 존재합니다.

먼저 장점부터 보면:

  • 철자에 조금 틀려도 비슷한 버킷으로 들어갈 확률이 높아, 오타에 비교적 강합니다.

  • 단어 순서를 크게 신경 쓰지 않고, “어떤 단어들이 나왔는지”에 초점을 맞춥니다.

  • 복잡한 토크나이저 없이도 구현이 가능하니 코드와 메모리가 절약됩니다.

하지만 당연히 대가도 있습니다.

  • 문장 구조나 어순에 민감한 의미를 잘 구분하지 못합니다.

  • 긴 문장, 복잡한 문법 구조는 사실상 “단어 자루(bag of words)” 수준으로만 인식합니다.

  • 세밀한 뉘앙스보다는, 자주 같이 등장하는 단어 패턴을 보고 “분위기” 정도만 파악합니다.

그래서 Z80-μLM은 문법적으로 정교한 문장을 만들어내기보다는, 특정 단어와 어구를 적당히 섞어 짧고 개성 있는 반응을 돌려주는 쪽에 더 잘 맞습니다. “성격 있는 챗봇”이라고 부를 수 있는 이유가 바로 이 부분입니다.

두 가지 데모: tinychat과 guess 게임

40KB 안에 들어간다고 해서 “Hello, world!”만 찍고 끝나는 건 아닙니다. Z80-μLM은 두 가지 재미있는 예제로 공개되어 있습니다2.

첫 번째는 tinychat입니다.

tinychat은 단순한 Q&A 쌍으로 훈련된 대화형 챗봇입니다.

“안녕?”, “너 누구야?”, “어디서 왔어?” 같은 질문을 던지면, 길지는 않지만 나름 개성이 느껴지는 답변을 돌려줍니다. 문법적으로 완벽하진 않아도, 말을 주고받는 느낌이 드는 것만으로도 꽤 인상적입니다. 제한된 하드웨어 위에 올라간 작은 인공지능이 “자기소개”를 하는 셈이니까요.

두 번째 예제는 guess라는 20질문 게임입니다.

이 모드에서는 모델이 비밀 단어를 하나 정해놓고, 사용자의 질문에 YES / NO / MAYBE로만 답합니다. 사용자는 질문을 통해 조금씩 후보를 줄여가며 정답을 맞혀야 합니다.

모델 입장에서는 반대로, “어떤 질문이 들어오면 YES라고 대답하는 패턴이 많은지”를 학습한 결과를 이용하는 셈입니다. 이는 완전한 자연어 이해라기보다, 제한된 패턴 매칭에 가깝지만, 실제로 플레이해보면 꽤 사람 같은 느낌을 받는 순간이 있습니다.

이 모든 것이 4MHz짜리 Z80에서 돌아간다는 사실이, 이 프로젝트를 단순한 장난이 아니라 “AI 축소판 아트”에 가깝게 느끼게 해줍니다.

왜 이런 실험이 의미 있을까? 현대 AI와의 연결 고리

“그냥 레트로 취미 아니야?”라고 생각할 수도 있습니다. 하지만 Z80-μLM이 보여주는 것은 꽤 현대적인 주제와도 맞닿아 있습니다.

첫 번째는 저비트 양자화에 대한 실전 사례입니다.

오늘날 LLM 분야에서도 8비트, 4비트, 심지어 2비트 양자화까지 적극적으로 연구되고 있습니다3. AutoRound나 SASQ 같은 최신 연구는, 정교한 양자화 알고리즘과 QAT를 통해 “성능을 최대한 유지하면서 비트를 줄이는” 방법을 찾고 있습니다45.

Z80-μLM은 규모는 극도로 작지만, 같은 문제를 정면에서 다룹니다.
“얼마나 비트를 줄여도 아직 쓸모 있는 결과가 나올까?”
이 질문에 대한 극단적인 예시가 바로 2비트 가중치와 정수-only 추론입니다.

두 번째는 “제한된 환경에서의 AI”라는 주제입니다.

Z80은 말 그대로 고전 CPU지만, 관점만 바꾸면 “역대급 제약을 가진 엣지 디바이스”라고 볼 수도 있습니다. 메모리는 64KB, 부동소수점은 없음, 연산 속도는 오늘날 기준으로는 거의 멈춰 있는 수준입니다1.

이런 환경에서 동작하는 AI를 설계하는 과정은, 사실 IoT 디바이스, 센서, 마이크로컨트롤러 같은 초저전력 환경에서의 AI 설계와 아이디어를 공유합니다. Tiny BASIC이 4KB 안에 들어가는 무료 BASIC을 만들며 마이크로컴퓨터 보급에 기여했던 것처럼6, Z80-μLM도 “작은 환경에서도 돌아가는 AI”의 한 가능성을 보여줍니다.

세 번째는 개발자 감각에 대한 리마인더입니다.

하드웨어가 넘쳐나는 시대에는, 조금 느리면 GPU를 더 붙이고, 메모리가 부족하면 인스턴스 크기를 키우면 됩니다. 하지만 Z80-μLM 같은 프로젝트는 “진짜로 아껴 쓰는 코드”가 어떤 모습인지 다시 생각하게 만듭니다.

  • 정수 하나, 비트 두 개까지 신경 쓰는 메모리 감각

  • 도메인에 꼭 필요한 기능만 남기고 모두 덜어내는 모델 구조

  • 하드웨어 특성을 고려해 루프, 누산기, 데이터 형식을 설계하는 태도

이런 감각은 현대 시스템에서도, 특히 고성능·저비용을 둘 다 잡고 싶은 팀이라면 여전히 강력한 경쟁력이 됩니다.

정리하며: “거대한 AI” 말고 “작은 AI”도 생각해보자

Z80-μLM은 숫자만 보면 아주 소규모 프로젝트입니다.

  • 4MHz Z80, 64KB RAM, 40KB .COM

  • 2비트 가중치, 16비트 정수 연산

  • 128개 해시 버킷으로 처리하는 입력

  • 간단한 챗봇과 20질문 게임 두 가지 예제

하지만 이 작은 실험이 던지는 질문은 꽤 큽니다.

  • 꼭 수십억 파라미터가 있어야 “대화형 AI”라고 부를 수 있을까?

  • 우리가 지금 쓰고 있는 하드웨어보다 훨씬 약한 환경에서, 어떤 AI 경험을 줄 수 있을까?

  • 양자화와 압축을 끝까지 밀어붙이면, 어디까지 버틸 수 있을까?

개발자 입장에서 이 프로젝트를 바라본다면, 이런 식으로 활용해볼 수 있습니다.

  • 개인 사이드 프로젝트로 “내가 가진 가장 약한 하드웨어에서 도는 AI”를 직접 만들어 보기

  • 양자화·QAT·정수 연산에 관심 있다면, Z80-μLM을 출발점으로 작은 실험을 쌓아보기

  • 레트로 컴퓨팅을 좋아한다면, CP/M 에뮬레이터 위에서 직접 tinychat이나 guess를 돌려보며 감각을 익혀보기

거대한 모델을 다루는 것도 물론 중요합니다. 하지만 가끔은 이렇게 “40KB짜리 AI”를 들여다보면서, 알고리즘과 하드웨어, 그리고 제약 속에서 빛나는 아이디어 자체에 집중해 보는 것도 꽤 값진 경험이 될 수 있습니다.

참고

1Zilog Z80 - Wikipedia](https://en.wikipedia.org/wiki/Zilog_Z80)

2Show HN: Z80-μLM, a 'Conversational AI' That Fits in 40KB | Hacker News](https://news.ycombinator.com/item?id=46417815)

3How to Quantize LLMs to 8-bit, 4-bit, 2-bit - ML Journey](https://mljourney.com/how-to-quantize-llms-to-8-bit-4-bit-2-bit/)

4Advancing low‑bit quantization for LLMs: AutoRound x LLM Compressor | Red Hat Developer](https://developers.redhat.com/articles/2025/12/09/advancing-low-bit-quantization-llms-autoround-x-llm-compressor)

5SASQ: Static Activation Scaling for Quantization-Aware Training in Large Language Models](https://arxiv.org/html/2512.14481v1)

6Tiny BASIC - Wikipedia](https://en.wikipedia.org/wiki/Tiny_BASIC)

이 노트는 요약·비평·학습 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.