8달러짜리 마이크로컨트롤러에서 28.9M 파라미터 LLM을 실행합니다.
이것은 약 8달러짜리 마이크로컨트롤러인 ESP32-S3에서 텍스트를 생성하는 2,890만 개의 매개변수를 가진 언어 모델입니다. 서버를 거치지 않고 칩 자체에서 실행되며, 초당 약 9개의 토큰 속도로 칩에 연결된 작은 화면에 각 단어를 출력합니다. 이전에 이와 유사한 칩에서 실행된 언어 모델은 26만 개의 매개변수를 가지고 있었는데, 이 모델은 그보다 약 100배 더 많은 매개변수를 가지고 있습니다. 이는 구글의 Gemma 모델에서 사용된 '레이어별 임베딩'이라는 아이디어를 활용하여 모델의 대부분이 RAM 대신 플래시 메모리에 저장되기 때문에 가능한 것입니다.
| 매개변수 | 2890만 개의 데이터가 저장됨 (그 중 2500만 개는 플래시 조회 테이블에 저장됨) |
| 칩 | ESP32-S3는 약 8달러이며, 512KB SRAM, 8MB PSRAM 및 16MB 플래시 메모리를 갖추고 있습니다. |
| 속도 | 전체 처리 속도는 약 9.5 tok/s (순수 연산 속도는 9.7 tok/s)입니다. |
| 연결성 | 없음, 모든 것은 기기에서 실행됩니다. |
| 모델 크기 | 4비트에서 14.9MB |
출처: 깃허브 링크
마이크로컨트롤러는 고속 메모리 용량이 매우 작습니다. ESP32-S3는 512KB의 SRAM을 제공합니다. 일반적으로 전체 모델에 이 메모리에서 접근할 수 있어야 하므로 소형 모델만 구현할 수밖에 없으며, 이것이 바로 이와 유사한 칩을 사용한 이전 모델이 26만 개의 파라미터만 지원했던 이유입니다.
이 문제를 해결하는 방법은 모델을 고속 메모리에 아예 저장하지 않는 것입니다. 언어 모델의 대부분의 매개변수는 임베딩 테이블에 저장되며, 모델은 이 테이블에서 직접 계산하는 것이 아니라 읽어옵니다. 따라서 2,500만 행으로 이루어진 테이블을 저속 플래시 메모리에 두고, 각 토큰에 필요한 몇 개의 행(약 450바이트)만 읽어들이고, 실제 작업을 수행하는 작은 부분은 고속 메모리에 유지할 수 있습니다. 이렇게 하면 대부분의 데이터를 로드하지 않고 플래시 메모리에 저장해 두었다가 조금씩 샘플링하여 사용하기 때문에 대규모 모델을 실행하는 데 거의 비용이 들지 않습니다.
그 아이디어는 Gemma 3n과 Gemma 4에 탑재된 Google의 레이어별 임베딩(Per-Layer Embeddings)입니다. 이 기술은 스마트폰이나 GPU가 아닌 마이크로컨트롤러의 메모리 레이아웃에서 실행됩니다. 제가 알기로는 이렇게 작은 칩에서 이 기술을 시도한 사람은 아무도 없었습니다.
이 제품이 하는 일과 하지 않는 일은 무엇인가
이 모델은 TinyStories 데이터셋으로 학습되었기 때문에 짧고 간단한 이야기를 작성하며, 대부분의 경우 내용의 일관성을 유지합니다. 하지만 질문에 답하거나, 지시를 따르거나, 코드를 작성하거나, 사실을 알 수는 없습니다. 이러한 한계는 모델에서 추론을 담당하는 부분이 매우 작기 때문이며, 메모리 최적화 기법을 사용해도 이 부분은 변하지 않습니다. 여기서 흥미로운 점은 2,890만 개의 파라미터를 가진 모델이 무엇을 말할 수 있는지보다, 거대한 모델을 작은 칩에 담아낸 아키텍처 자체입니다.
직접 실행해 보세요
펌웨어, 배선 및 플래싱 단계는 에 있습니다 firmware/esp32_llm/README.md. 학습, 제거 및 양자화 코드는 src/및 에 있습니다 experiments/. 전체 방법, 제거 및 온칩 측정은 에 작성되어 있습니다 RESULTS.md.
신용 거래
TinyStories는 이 모델이 학습하는 데 사용하는 데이터셋입니다. TinyStories는 작은 모델도 일관성 있게 글을 쓸 수 있을 만큼 충분히 간단한 짧은 합성 스토리로 구성되어 있습니다(Ronen Eldan 및 Yuanzhi Li, Microsoft Research, arXiv:2305.07759 ). 나머지 절반은 Google이 Gemma 모델에서 개발한 Per-Layer Embeddings로, 이를 통해 큰 모델이 작은 칩에 탑재될 수 있습니다.
안드레이 카르파티의 llama2.c 덕분에 저를 포함한 많은 사람들이 아주 작은 언어 모델을 학습시키고 순수 C 언어로 실행할 수 있다고 믿게 되었습니다. 이 프로젝트는 거기에서 시작되었습니다.
실제 진행 과정은 다음과 같습니다.
일부러 지저분한 커밋 내역을 저장소에 남겨뒀습니다. 여기에는 제가 매개변수 계산에서 발견한 버그가 포함되어 있는데, 이 버그 때문에 초기 수치가 부풀려졌고, 수정 후 결과도 그대로 남아 있습니다. 커밋 내역을 보면 RESULTS.md수치가 어떻게 변했는지, 왜 변했는지 알 수 있습니다.


'ESP32 Project' 카테고리의 다른 글
| GPS와 지오펜싱을 이용한 IoT 반려동물 추적 시스템 만드는 방법 (0) | 2026.07.24 |
|---|---|
| ESP32 Matter 프로젝트를 진행 (0) | 2026.07.21 |
| Wi-Fi와 블루투스 동시 사용 + 4개 가상 인터페이스 (0) | 2026.07.20 |
| 교통 경고 구역 IoT 스마트 경고등 (0) | 2026.07.17 |
| 다중 센서 대기질 모니터링 시스템 (0) | 2026.07.17 |
| ESP32 마이크로컨트롤러를 기반으로 한 Wi-Fi 제어 신호 발생기 (0) | 2026.07.14 |
| 스마트 출석 기록기 프로젝트 (0) | 2026.07.11 |
| ESP32 블루투스 이어폰 연결 (0) | 2026.07.09 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
캐어랩