8달러짜리 마이크로컨트롤러에서 로컬 언어 모델이 구동됩니다!

원제 · This $8 Microcontroller Is Running a Language Model Locally!

8:142분 읽기Better Stack2026. 07. 31.컴퓨터/소프트웨어 · 가전제품/카메라

핵심 요약

레이어별 임베딩 방식을 적용하면 8달러짜리 ESP32S3 마이크로컨트롤러에서도 2,890만 파라미터 규모의 언어 모델을 초당 9개 토큰 속도로 구동할 수 있다.

하이라이트

  • 약 8달러짜리 마이크로컨트롤러인 ESP32S3 위에서 2,890만 개의 파라미터를 가진 언어 모델이 구동된다.

  • 칩의 512키로바이트 SRAM에 전체 모델을 올리는 대신, 대규모 임베딩 테이블을 16메가바이트 플래시 메모리에 둔다.

  • 모델의 6개 레이어 각각에 필요한 6개 행만 SRAM으로 불러와 연산 효율을 높인다.

  • 마이크로소프트의 Tiny Stories 데이터셋으로 학습되었으며 초당 9개의 토큰을 생성한다.

  • 전체 빌드, 학습, 플래싱 과정은 맥북 기준 약 13분의 학습 시간을 포함해 약 25분이 소요된다.

타임라인

  1. 저사양 마이크로컨트롤러에서의 로컬 LLM 구동

    90년대 컴퓨터보다 적은 메모리를 가진 마이크로컨트롤러 환경에서 언어 모델이 작동한다. 전체 모델이 제한된 SRAM 용량을 초과하기 때문에 기존 방식으로는 실행이 불가능하다. 임베딩 테이블 크기와 메모리 제약을 우회하는 구조적 접근이 필요하다.

    • 와이파이와 외부 서버 연결 없이 2,890만 파라미터 모델이 텍스트를 생성한다.
    • 연산에 사용되는 ESP32S3의 고속 SRAM 용량은 512키로바이트에 불과하다.
    • 기존에는 최대 26만 파라미터 수준의 모델만 구동 가능했으나 우크라이나 개발자 Slava S가 한계를 극복했다.
  2. 레이어별 임베딩을 통한 메모리 한계 극복

    구글 Gemma의 레이어별 임베딩 아이디어를 차용하여 연산 부분과 조회용 테이블을 분리한다. 플래시 메모리의 넉넉한 용량을 활용해 대규모 테이블을 보관하고 필요한 최소한의 데이터만 SRAM에 올린다. 일반적인 복잡한 주제 대신 소형 데이터셋으로 학습된 모델을 순수 C언어로 실행한다.

    • 파라미터 대부분을 차지하는 조회용 임베딩 테이블을 16메가바이트 플래시 메모리에 저장한다.
    • 현재 토큰 연산에 필요한 6개 행만 450바이트 크기로 SRAM에 불러온다.
    • 마이크로소프트의 Tiny Stories 데이터셋과 안드레이 카파시의 순수 C언어 추론 방식을 활용한다.
  3. 하드웨어 요구사항과 원샷 스크립트 빌드

    학습된 모델과 테이블이 약 15메가바이트를 차지하므로 보드 구매 시 16메가바이트 플래시 사양을 반드시 확인해야 한다. 복잡한 수동 설정 과정을 줄이기 위해 툴체인 설치와 검증을 한 번에 처리하는 스크립트를 사용한다.

    • 16메가바이트 플래시와 8메가바이트 PS RAM을 갖춘 ESP32S3 N16R8 버전이 필요하다.
    • 모든 과정을 자동화한 원샷 스크립트를 통해 보드 확인부터 플래싱까지 진행한다.
    • 전체 프로세스 완료에는 약 25분이 소요되며 학습 과정에만 맥북 기준 약 13분이 걸린다.
  4. 실행 결과와 현재 구현의 한계점

    초당 9토큰이라는 빠른 속도를 보여주지만 프롬프트 수정 시 재플래싱이 필요하다. 은하계 같은 복잡한 개념을 이해하지 못하고 Tiny Stories 학습 데이터의 구조적 특성 때문에 항상 원래의 이야기 패턴으로 회귀하는 제한적인 개념 증명 단계에 머물러 있다.

    • 로딩 완료 후 초당 9개의 토큰 속도로 어린 소녀에 대한 이야기가 출력된다.
    • 프롬프트를 변경할 때마다 ESP32에 다시 플래싱을 해야 하는 제약이 존재한다.
    • 모델의 규모와 학습 데이터 특성으로 인해 특정 문단 이후에는 기본 이야기로 되돌아간다.

설명

A developer got a 28.9-million-parameter language model running entirely offline on an $8 ESP32-S3 microcontroller, a chip with just 512KB of RAM, using a memory trick borrowed from Google's Gemma architecture called Per-Layer Embeddings. In this video we break down how the trick actually works, reproduce the entire training and flashing process ourselves from a bare board, and put the model through some prompt tests of our own, including one it stubbornly refuses to follow. If you're curious how far you can push AI onto hardware that was never meant to run it, this one's for you. 🔗 Relevant Links Esp32-ai: https://github.com/slvDev/esp32-ai build_and_flash.sh: https://gist.github.com/andrisgauracs/ce459630660f82cf4ca7e43aa81604c7 run_prompt.sh: https://gist.github.com/andrisgauracs/e84b842d0f5e301485ecbf6654b0838e ❤️ More about us Radically better observability stack: https://betterstack.com/ Written tutorials: https://betterstack.com/community/ Example projects: https://github.com/BetterStackHQ 📱 Socials Twitter: https://twitter.com/betterstackhq Instagram: https://www.instagram.com/betterstackhq/ TikTok: https://www.tiktok.com/@betterstack LinkedIn: https://www.linkedin.com/company/betterstack 📌 Chapters: 00:00 Running an LLM on an $8 Chip 00:43 The ESP32’s Memory Problem 01:12 How Did They Make It Work? 01:30 The Per-Layer Embedding Trick 02:04 Fitting 28.9 Million Parameters 02:36 What This Tiny LLM Can Actually Do 02:58 TinyStories and Karpathy’s llama2.c 03:41 Building It Ourselves 03:47 Choosing the Right ESP32 04:23 The One-Shot Installation Script 04:52 Training and Flashing the Model 05:24 Testing the LLM at 9 Tokens per Second 05:38 Trying Custom Prompts 06:21 The Star Wars Prompt Test 06:51 Is an ESP32 LLM Actually Useful? 07:23 Final Thoughts

커뮤니티 글

모든 글 보기
이 영상에 대해 글쓰기