3줄 요약
- 브라이언 로멜(Brian Roemmele)이 X에 올린 실험기와, 개발자 slvDev가 공개한 오픈 리포를 함께 정리했다. 8달러짜리 ESP32-S3 마이크로컨트롤러에 28.9M 파라미터 언어모델을 올려, 클라우드도 와이파이도 없이 칩 위에서 초당 약 9.5토큰으로 짧은 이야기를 써낸다.
- 비결은 파라미터의 대부분(25M)을 느린 플래시 메모리의 임베딩 조회표로 내보내고, 토큰마다 그중 여섯 줄(약 450바이트)만 읽어오는 것이다. 진짜 계산을 하는 작은 코어(약 559K)만 빠른 SRAM에 남긴다. 구글 젬마(Gemma)의 Per-Layer Embeddings 설계를 마이크로컨트롤러 메모리 구조에 옮겨 온 결과다.
- 다만 이 모델은 TinyStories 데이터로 학습한 이야기 전용이라 질문 답변도, 지시 수행도, 코딩도, 사실 지식도 못 한다. 저자는 “28.9M은 메모리 계층에 나눠 담은 저장 파라미터 수일 뿐 능력의 배수가 아니다"라고 분명히 밝힌다. 흥미로운 지점은 성능이 아니라 아키텍처다.

8달러 AI 기계라는 주장
로멜의 게시물은 흥분으로 시작한다. 그는 이 보드들을 차고 실험실 작업대에 올려놓고 직접 시험하는 중이라고 적었다. 개발자 slvDev가 2890만 파라미터 언어모델을 8달러짜리 ESP32-S3 마이크로컨트롤러에 밀어 넣었고, 그 모델이 완전히 오프라인으로 돌아가며 작은 유선 디스플레이에 짧은 이야기를 초당 약 9.5토큰으로 찍어낸다는 것이다. 라즈베리 파이도, 젯슨도 아닌 8달러 마이크로컨트롤러라는 점을 그는 거듭 강조했다.
로멜이 붙인 비교는 두 가지다. 하나는 같은 급 칩에서 세운 이전 기록(26만 파라미터의 TinyStories 실험)보다 100배 넘게 크다는 것. 다른 하나는 “원조 ChatGPT가 1억 1700만 파라미터였는데, 이제 그 4분의 1 크기 모델을 커피 두 잔 값 실리콘 위에서 돌린다"는 것이다. 뒤 비교는 파라미터 수를 능력의 크기처럼 읽게 만드는데, 뒤에서 보듯 리포 저자 본인은 이 독법을 명확히 경계한다.
정리해 둘 것은 역할 구분이다. 로멜은 이 장치를 시험하고 알리는 쪽이고, 실제 모델과 펌웨어를 만든 사람은 slvDev다. 코드와 측정 기록은 오픈 리포에 그대로 공개돼 있다.
숫자로 본 장치
| 항목 | 값 |
|---|---|
| 파라미터 | 28.9M 저장 (이 중 25M은 플래시 조회표) |
| 칩 | ESP32-S3, 약 8달러, SRAM 512KB / PSRAM 8MB / 플래시 16MB |
| 속도 | 종단 간 약 9.5 tok/s (순수 연산 기준 9.72 tok/s) |
| 연결성 | 없음. 전부 기기에서 실행 |
| 모델 크기 | 4비트 양자화 기준 14.9MB |
전력은 작은 LED 한 개 수준이라, 배터리 구동도 현실적인 선택지가 된다고 로멜은 덧붙였다.
어떻게 초소형 칩에 들어갔나
마이크로컨트롤러의 벽은 빠른 메모리가 극도로 적다는 점이다. ESP32-S3의 SRAM은 512KB뿐이다. 보통은 모델 전체가 이 빠른 메모리에서 닿을 수 있어야 하고, 그래서 지금껏 이 급 칩에서는 26만 파라미터짜리 작은 모델에 묶여 있었다.
우회로는 발상을 뒤집는 데 있다. 모델을 빠른 메모리에 통째로 올리려는 시도를 아예 접는다. 언어모델 파라미터의 대부분은 임베딩 조회표에 들어 있는데, 이 표는 계산 대상이 아니라 읽어오는 대상이다. 그러니 2500만 줄짜리 표를 느린 플래시에 그대로 두고, 토큰마다 필요한 몇 줄(약 450바이트)만 뽑아 쓴다. 실제 계산을 하는 작은 부분만 빠른 메모리에 남긴다. 그러면 큰 모델을 두고도 실행 비용이 거의 들지 않는다. 대부분을 절대 통째로 불러오지 않기 때문이다.
메모리는 세 층으로 나뉜다.
SRAM (빠르고 작다) 토큰마다 쓰는 '사고' 코어
PSRAM (중간) 출력 헤드와 작업 메모리
FLASH (크고 느리다) 2500만 파라미터 표, 토큰당 6줄(약 450B)만 읽음
숫자로 보면 이렇다. SRAM에 맞아야 하는 dense 코어는 약 559K 파라미터, 4비트로 273KB다. 이 크기가 512KB SRAM 제약이 결정한 설계 지점이다. 3.1M짜리 출력 헤드는 PSRAM에서 순차적으로 흘려보내고, 25M 조회표는 플래시에 memory-map으로 남긴다. 이 발상 자체는 구글이 젬마 3n과 젬마 4에서 공개한 Per-Layer Embeddings다. 저자는 이 기법을 휴대폰이나 GPU가 아니라 마이크로컨트롤러의 메모리 배치 위에서 돌린 건 자신이 아는 한 처음이라고 적었다.
측정으로 뒷받침한 것
저자는 주장을 실측으로 받쳐 놓았다. 리포의 RESULTS.md에 두 시드로 검증한 수치가 정리돼 있다.
- 품질: vocab 32768 설정에서 PLE는 같은 코어에 SRAM에 맞는 baseline보다 0.098 nats(perplexity 9.3%) 앞선다. ppl 12.58에서 11.41로 내려간다. 시드 잡음의 약 16배에 해당하는 차이다.
- 양자화 내성: 4비트로 눌러도 우위가 그대로 유지된다(124~128% 유지). 큰 중복 조회표는 모든 가중치가 결정적인 작은 dense 모델보다 오히려 양자화에 강하다. 그러니 플래시 예산을 건 바로 그 부분이 4비트에도 가장 튼튼하다.
- 대역폭: 실제 칩에서 잰 결과, 2500만 파라미터 플래시 표를 읽는 비용은 토큰당 메모리 시간의 약 0.7%에 그친다. 사실상 공짜다. 정작 비싼 쪽은 baseline도 함께 치르는 출력 헤드로, PSRAM 대역폭에 묶여 있다.
속도도 단번에 나온 게 아니다. 처음 이식본은 초당 0.57토큰이었고, 헤드를 PSRAM에 올리고 스칼라 정리를 거치며 4.6토큰, 듀얼코어로 5.67토큰, int8 헤드와 int8 활성화까지 붙여 약 9.5토큰에 이르렀다. 저자는 58 tok/s라는 숫자는 관측 처리량이 아니라 대역폭 상한일 뿐이라고 분명히 선을 그어 둔다.
이 모델이 못 하는 것
한계는 숨기지 않고 앞세운다. 이 모델은 TinyStories로 학습해 짧고 단순한 이야기를 대체로 앞뒤 맞게 써낸다. 그러나 질문에 답하지 못하고, 지시를 따르지 못하고, 코드를 쓰지 못하고, 사실을 알지 못한다. 이 천장은 추론을 맡는 작은 dense 코어가 정하는 것이라, 메모리 기법으로는 움직이지 않는다. 실제 기기에서 뽑힌 생성 예시는 이렇게 시작한다.
Once upon a time, there was a little girl named Lily. She loved to play outside in the sunshine. One day, she saw a big tree with a hole in it. She was curious and wanted to see what was inside.
저자가 힘주어 적은 한 문장을 옮기면, 여기서 흥미로운 것은 2890만 파라미터 모델이 무엇을 말할 수 있느냐가 아니라, 큰 모델을 초소형 칩에 앉히는 아키텍처 그 자체다.
가장 눈여겨본 것
내가 곱씹은 대목은 리포에 담긴 정직함이었다. 저자는 지저분한 개발 이력을 일부러 지우지 않고 남겨 두었다. 거기에는 초기 수치를 부풀렸던 자신의 파라미터 계산 버그와, 그걸 고친 뒤 나온 정정된 결과가 함께 들어 있다. 예전 방식으로 잰 옛 실행 기록은 아예 별도 폴더로 보관하며 “인용하지 말라"고 표시해 두었다.
능력을 두고도 마찬가지다. 그는 28.9M을 능력의 배수처럼 인용하지 말고 “메모리 계층 분할로 상주하는 파라미터 수"로만 부르라고 요청한다. 대역폭 0.7%도 총 추론 오버헤드가 아니라 표의 합성 대역폭 몫으로만 인용하라고 범위를 좁혀 둔다. ESP32-S3의 SIMD 명령을 아직 안 쓴다는 점, 앞선 20~40 tok/s 추정이 틀렸음이 드러났다는 점까지 남긴다.
이 태도가 로멜의 들뜬 프레이밍과 나란히 놓이니 대비가 선명했다. 한쪽에는 “8달러짜리 미니 ChatGPT"라는 흥분이 있고, 다른 쪽에는 한 줄 한 줄 과장을 거절하는 저자가 있다. 그리고 저자가 가리키는 진짜 방향은 위가 아니라 아래다. 우리는 모델 크기가 폭발적으로 커지는 걸 몇 년간 지켜봤지만, 더 흥미로운 국경은 반대쪽일지 모른다. 쓸모 있는 지능이 얼마나 작고, 얼마나 값싸고, 얼마나 로컬해질 수 있는가. 8달러짜리 칩이 앞뒤 맞는 이야기를 써낸다는 건 장난감이 아니라, 하한선이 계속 내려가고 있다는 증거다.
출처 관리도 눈에 띈다. 저자는 이 작업이 독립적으로 이뤄졌음을 밝히면서, 실제 의존한 것은 TinyStories 데이터셋과 구글이 공개한 젬마 Per-Layer Embeddings 설계 둘뿐이라고 정리한다. 카파시의 llama2.c나 DaveBben의 esp32-llm은 코드나 방법을 가져온 게 아니라 비교와 영감의 대상으로만 언급한다고 선을 그었다.
출처
브라이언 로멜(@BrianRoemmele), X 게시물, 2026-07-24. 원문: https://x.com/brianroemmele/status/2080501012935434357
slvDev, “Running a 28.9M parameter LLM on an $8 microcontroller”, 오픈 리포. 리포: https://github.com/slvDev/esp32-ai
학습 데이터셋: TinyStories (Ronen Eldan, Yuanzhi Li, Microsoft Research, arXiv:2305.07759). 핵심 기법: 구글 젬마의 Per-Layer Embeddings.
