본문으로 건너뛰기

ESP32 LLM 내부 시각화

brainscope는 ESP32-S3용 경량 LLM을 소프트웨어로 재현해 레이어별 logit lens와 attention 맵을 대화형으로 탐색하게 한다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

ESP32-S3에서 동작하는 소형 LLM을 brainscope로 소프트웨어적으로 재현해 레이어별 로짓 흐름과 attention 지도를 단계적으로 확인할 수 있다. 프로젝트는 28.9M 파라미터 중 대다수를 플래시에 두어 메모리 제약을 해결하고 int4 가중치를 fp32로 디퀀타이즈해 C 런타임과 정합성을 검증했다. 세 가지 실험(토큰별 레이어 재생, steering 슬라이더, flash-unplugged)을 통해 플래시 기반 파라미터와 레이어별 편향이 출력에 어떤 영향을 미치는지 직접 확인할 수 있도록 설계되었다.

섹션별 상세

이 프로젝트는 ESP32-S3 마이크로컨트롤러에서 동작하도록 설계된 소형 LLM을 다룬다. 모델은 전체 28.9M 파라미터 중 약 25M을 플래시에 저장하고 토큰당 약 450바이트를 읽어 소형 장치의 메모리 제약을 우회한다. 결과적으로 기기 상에서 이야기를 생성하는 데 초점을 맞춘 TinyML 응용을 실험할 수 있다.
brainscope는 int4 아티팩트를 fp32로 디퀀타이즈하고 C 런타임과의 정합성을 검증한 가중치를 사용해 모델 내부를 재현하는 라이브러리다. pip 설치와 예제 스크립트로 하드웨어 없이 동일한 동작을 실행하며 레이어별 logit lens와 attention 맵을 단계적으로 확인할 수 있다. 이 도구는 가중치 변환과 검증 코드가 포함된 brainscope_adapter를 통해 소프트웨어적 재현을 보장한다.
문서에 제시된 세 가지 실험은 레이어별로 토큰이 형성되는 과정을 재생하는 관찰 실험, 대비 쌍을 이용한 steering 슬라이더로 분위기 편향을 적용하는 실험, 그리고 플래시 파라미터를 0으로 만들어 플래시 기반 기억 기여도를 확인하는 flash-unplugged 실험이다. 각 실험은 입력→중간표현→출력의 흐름을 단계적으로 드러내 내부 메커니즘을 직접 연결한다. 실험 결과는 메모리 배치와 임베딩 구조가 출력에 미치는 영향을 직관적으로 드러낸다.
출처와 라이선스, 학습 데이터가 명확하게 표시되어 있어 실무적 재현이 가능하다. 모델과 하드웨어 스토리는 slvDev/esp32-ai 저장소에서 유래하고 라이선스는 MIT로 표기되어 있다. Per-Layer Embeddings는 Gemma 3n 설계에 따른 방법이며 학습 데이터는 TinyStories가 사용되었다.

용어 해설

레이어별 임베딩(Per-Layer Embeddings)
Per-Layer Embeddings는 모델의 각 레이어에서 별도 임베딩을 유지해 파라미터를 플래시 같은 비휘발성 저장소에 배치하는 방식이다. 입력이 들어오면 각 토큰별로 해당 레이어 임베딩을 읽어오고 조합하여 출력 계산에 사용한다. 메모리가 제한된 장치에서 전체 가중치를 RAM에 올리지 않고도 모델 동작을 유지하는 핵심 설계다.
로짓 렌즈(Logit Lens)
Logit Lens는 각 중간 레이어의 토큰별 로짓을 역산해 그 레이어까지의 출력을 직접 점검하는 기법이다. 입력→중간 표현→소프트맥스 이전 로짓을 계산해 단어별 확률 형성이 레이어별로 어떻게 변하는지 추적한다. 내부 작동을 단계적으로 확인할 수 있어 모델 내부 추론 경로를 분해하는 데 유용하다.
스티어링(Steering)
Steering은 모델의 출력 성향을 바꾸기 위해 특정 방향성 벡터를 레이어 활성화나 로짓에 가하는 기법이다. 예제에서는 대비 쌍을 이용해 레이어 3에서 추출한 편향 벡터를 슬라이더로 조절해 분위기 변화(예: 어두운 톤)를 만들어낸다. 인터랙티브한 조작으로 스타일이나 정서적 뉘앙스를 시험할 수 있다는 점이 중요하다.
int4 가중치(int4 artifact)
int4 가중치는 모델 파라미터를 4비트 정밀도로 양자화해 저장 공간을 크게 줄인 형식이다. 이 프로젝트는 int4 아티팩트를 fp32로 디퀀타이즈해 C 런타임과 약 1e-5 수준의 오차로 검증하여 동일 동작을 확보했다. 제한된 플래시 용량에서 모델을 운용하면서 정확도를 유지하는 실무적 타협이다.
TinyStories
TinyStories는 단문형 아동 이야기 데이터셋으로 소형 언어모델 학습에 사용된 자료 세트다. 모델은 이 데이터로 학습되어 짧은 서사 중심의 텍스트를 생성하도록 최적화되어 있다. 경량 모델 실험에서 학습 분포와 출력 특성을 이해하는 데 직접적인 근거를 제공한다.

코드 예제

bash
pip install brainscope

브레인스코프는 로컬에서 모델 내부를 재현하는 Python 라이브러리로 첫 단계는 패키지 설치다. 설치 이후 첫 실행에서 허브로부터 약 120MB의 fp32 가중치를 내려받아 내부 데이터 구조를 구성한다. 개발 환경이 없는 사용자는 이 명령으로 하드웨어 없이도 같은 분석 워크플로를 시작할 수 있다.

bash
python examples/esp32/serve.py

예제 스크립트는 다운로드된 가중치를 로드해 로컬 서버를 띄우고 웹 인터페이스나 콘솔로 레이어별 출력 흐름을 실시간으로 재생한다. 사용자는 입력 프롬프트를 넣고 각 토큰이 6개 레이어에서 어떻게 누적되어 로짓으로 변하는지 단계적으로 확인할 수 있다. 이 실행 흐름은 하드웨어를 필요로 하지 않도록 설계되어 있어 교육용 관찰에 적합하다.

bash
python examples/esp32/serve.py --flash-unplugged

해당 플래그는 플래시에 있던 25M 파라미터를 0으로 초기화한 상태로 모델을 구동한다. 이 상태에서 생성되는 출력이 반복적 패턴으로 무너지는 모습을 통해 플래시 기반 기억이 추론에 어떤 기여를 하는지 직접 확인할 수 있다. 실험적 검증을 통해 플래시 저장 파라미터의 역할을 분리하는 용도로 쓰인다.

근거 모음

근거
  • 모델은 ESP32-S3에서 동작하며 25M의 파라미터가 플래시에 저장되어 토큰당 약 450바이트를 읽는다. 본문 첫 문단에 ESP32-S3, 플래시 25M 파라미터, 토큰당 ~450 bytes 언급.
  • 모델이 작은 보드에서 아동용 이야기를 초당 9.88 토큰 속도로 생성한다. 본문: 'writes children's stories at 9.88 tokens/s on a matchbox-sized board' 문장.
  • int4 아티팩트를 fp32로 디퀀타이즈해 C 런타임과 약 1e-5 수준으로 검증했다. 본문 중간의 'int4 artifact the chip runs, dequantized and verified against its C runtime to ~1e-5' 구절.
  • flash-unplugged 모드로 플래시 파라미터를 0으로 만들면 출력이 반복적 패턴으로 붕괴한다. 본문의 'python examples/esp32/serve.py --flash-unplugged' 설명과 그 결과 'time there time there time...' 예시.

기술

  • brainscope
  • Python
  • Per-Layer Embeddings
  • Gemma 3n
  • TinyStories
  • int4 양자화

활용 사례

  • 학습용·교육용으로 마이크로모델의 내부 동작을 시각적으로 학습하는 데 활용할 수 있다
  • 메모리 제한 환경에서 임베딩·가중치 배치가 추론 품질에 미치는 영향을 실험하는 용도로 적합하다
  • 스티어링 인터페이스를 이용해 텍스트 분위기·스타일 편향을 대화형으로 시험할 수 있다

언급된 리소스

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 08. 07.수집 2026. 08. 07.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.