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

Transcript

00:00:00이것은 2,890만 개의 파라미터를 가진 언어 모델이 한 번에 단어 하나씩 텍스트를 생성하는 모습입니다
00:00:08약 8달러짜리 칩 위에서 말이죠. 와이파이도 없고, 서버로 전송되는 데이터도 전혀 없습니다.
00:00:14모든 연산은 90년대 컴퓨터보다 RAM 용량이 적은 마이크로컨트롤러인
00:00:22ESP32S3 내부에서 일어나고 있습니다. 정말 말도 안 되죠. 이게 어떻게 가능한 걸까요? 그 비밀은 무엇이고
00:00:29우리는 어떻게 비슷하게 만들어볼 수 있을까요? 오늘 영상에서
00:00:34바로 이 흥미로운 질문들을 살펴보려고 합니다. 아주 재미있을 테니 바로 시작해 보시죠. ESP32S3는
00:00:46512키로바이트의 SRAM을 제공하는데, 이는 이 칩이 연산에 쓸 수 있는 고속 메모리의 양입니다. 보통
00:00:54이 안에서 LLM을 실행하려고 하면 모델 전체가 저 공간 안에 들어가야 합니다.
00:01:00이런 칩에서 구동된 이전 언어 모델은 최대 26만 개의 파라미터 수준이었습니다. 그러니까
00:01:08이 모델은 약 110배 더 큰 셈이고, 이걸 성공시킨 사람은 우크라이나의 개발자 Slava S입니다.
00:01:16그렇다면 마법 같은 비결이 뭘까요? 어떻게 8달러짜리 칩에 2,890만 개의 파라미터 모델을 넣었을까요?
00:01:24그 해결책은 구글이 Gemma에서 사용한 아이디어에서 나왔습니다. 바로 “레이어별 임베딩”입니다. 언어 모델
00:01:31파라미터의 대부분은 아무런 연산도 하지 않습니다. 그저 읽어오기만 하는 임베딩 테이블에 존재할 뿐이죠.
00:01:37파라미터 대부분이 조회용으로만 쓰인다면 빠른 메모리에 둘 필요가 없습니다. 따라서
00:01:44테이블은 느리고 저렴한 플래시 메모리에 두고, 현재 토큰에 필요한 행만 불러오는 방식으로 해결할 수 있죠.
00:01:52그리고 실제로 다음 토큰을 계산하고 고민하는 작은 부분인 어텐션 헤드와 피드포워드만 SRAM에 남겨둡니다.
00:01:59연산 부분은 그렇다 치고, 여전히 남는 질문이 있습니다. 이렇게 작은 칩에 어떻게 그 큰 모델을 넣었을까요?
00:02:052,500만 개 행의 테이블은 플래시 메모리에 저장됩니다. 이게 전체 2,890만 개의
00:02:12파라미터 중 가장 큰 비중을 차지하죠. 이 칩은 플래시 메모리가 저렴하고 16메가바이트나 될 정도로 넉넉합니다.
00:02:20그래서 그 테이블을 512키로바이트 SRAM에 억지로 구겨 넣는 대신,
00:02:26플래시에 그대로 둡니다. 그리고 모델의 6개 레이어 각각에 해당하는 행을 하나씩, 총 6개 행만 꺼냅니다.
00:02:33다 합쳐서 겨우 450바이트 정도죠. 너무 기뻐하기 전에 한 가지 짚고 넘어가야 할 점은,
00:02:40이 모델이 아주 단순하고 단순한 모델이라는 사실입니다. 일반적인 GPT 스타일의 LLM이 아닙니다. 코드를
00:02:47생성해 주거나 어려운 주제에 답해주지 않죠. 이 정도 크기의 일반 모델을 일반 데이터셋으로
00:02:53학습시키려 한다면, 2,800만 개 파라미터로는 엉터리 답변만 나올 겁니다. 하지만 이 모델은
00:03:01마이크로소프트 연구진이 구축한 Tiny Stories 데이터셋으로 학습되었습니다. 수백만 개의 파라미터를 가진
00:03:08아주 작은 모델도 일관성 있게 글을 쓸 수 있도록 의도적으로 쉽게 작성된 데이터셋이죠. 그리고 운영체제나
00:03:15파이썬 인터프리터도 없는 칩에서 순수 C언어로 실행한다는 아이디어는 유명한 안드레이
00:03:22카파시의 Llama2.c 프로젝트에서 나온 것입니다. 몇백 줄의 이식성 높은 C 코드만으로 소형 언어 모델을
00:03:28학습시키고 추론할 수 있음을 보여주었죠. 이것이 바로 이번 전체 프로젝트의
00:03:35청사진입니다. 카파시가 없었다면 이 프로젝트는 불가능했을지도 모릅니다. 작동 원리는
00:03:40간단히 말해 이렇습니다. 이제 직접 구축해서 칩에서 실행해 보며 성능이 어떤지 확인해 봅시다.
00:03:47직접 빌드하려면 우선 적절한 하드웨어가 필요합니다. 특히 16메가바이트의 플래시와
00:03:548메가바이트의 PS RAM을 갖춘 ESP32S3가 필요하죠. 바로 N16R8 버전입니다. 이 점이
00:04:03정말 중요한데, 아까 플래시에 들어가는 2,500만 개 행의 테이블에 대해 했던 이야기 기억하시죠?
00:04:10학습을 마치고 내보내면 그것만으로도 약 15메가바이트가 됩니다. 플래시가 4나 8메가바이트인
00:04:17보드에는 들어가지 않죠. 따라 해보기 위해 보드를 구매하신다면 가장 먼저 확인해야 할 사양입니다.
00:04:22프로젝트의 기존 설명서를 처음 읽었을 때는 설정 방법이 여러 파일에 흩어져 있었고
00:04:28제가 사전에 알지 못했던 여러 배경지식을 전제로 하고 있었습니다.
00:04:34그래서 쓰인 그대로 설명해 드리는 대신, 모든 과정을 한 번에 처리해 주는 원샷 스크립트를 작성했습니다.
00:04:40보드 확인, 툴체인 설치, 데이터 준비, 학습, 내보내기, 검증,
00:04:47빌드 및 플래싱까지 한 번에 진행됩니다. 그럼 스크립트를 실행해 보겠습니다. 참고로
00:04:55따라 하시는 경우 전체 스크립트가 완료되는 데 약 25분 정도 걸립니다. 단계별로
00:05:00직접 진행해도 비슷한 시간이 걸릴 겁니다. 신경 써야 할 개별 명령어들이
00:05:05워낙 많기 때문이죠. 대부분의 시간은 Tiny Stories 모델을 학습시키는 데 소요됩니다.
00:05:11제 맥북 기준으로 약 13분 정도 걸리네요. 학습이 끝나면 패널의 LED가
00:05:18깜빡이기 시작합니다. 모델을 로드할 준비가 되었다는 신호죠. 로드가 완료되면
00:05:24어린 소녀에 대한 첫 번째 기본 이야기 예시가 출력되는 것을 볼 수 있습니다. 정말로
00:05:29초당 9개의 토큰이 나오고 있네요. 하지만 어느 시점이 되면
00:05:33이야기를 다시 처음부터 시작한다는 점을 알 수 있습니다. 모델이 일종의 루프에 빠지는 것이죠. 직접
00:05:39커스텀 프롬프트를 입력하고 싶다면, 직접 만든 프롬프트를 실행할 수 있는 샘플 스크립트도
00:05:44포함해 두었습니다. 이번 예시에서는 로봇에 대한 이야기를 시작해 보겠습니다. 한 가지 주의할 점은
00:05:50프롬프트를 변경할 때마다 ESP32에 다시 플래싱을 해야 한다는 것입니다. 이 방식의 한계점이죠.
00:05:56미리 플래싱된 프롬프트 하나만 재생할 수 있습니다. 보시는 것처럼
00:06:02이야기 속에서 로봇이 언급되는 것을 볼 수 있습니다. 이번엔 이야기가 확실히 조금 달라졌네요.
00:06:08하지만 문단이 끝난 뒤에 어떤 일이 일어나는지 보세요. 다시 그 어린 소녀의
00:06:13이야기로 돌아갑니다. 왜 이런 현상이 발생하는지는 잘 모르겠습니다. 하지만 분명한 건 모델이 그
00:06:19어린 소녀 이야기로 다시 되돌아가는 경향이 있다는 것입니다. 예시를 하나 더 들어보죠. 이번에는
00:06:24모든 스타워즈 영화의 맨 처음에 나오는 유명한 문구를 사용해 보겠습니다. 결과가 어떻게 나올지
00:06:30지켜보시죠. 이 부분이 흥미로운데요. 모델이 즉시 다시 어린 소녀의
00:06:36이야기로 되돌아가는 것을 볼 수 있습니다. 제 생각에 이 정도 크기의 모델은 “은하계(galaxy)”가 뭔지도
00:06:42이해하지 못하는 것 같습니다. 그래서 이번에는 우리의 특정 프롬프트를 무시하는 것일 테죠. 그리고
00:06:47다시 한번 다음 문단이 같은 이야기로 시작하는 것을 볼 수 있습니다. 이 실험 자체가
00:06:53인상적이고, 아주 작은 마이크로칩에서 초당 9개 토큰을 생성하는 건 정말 경이롭지만,
00:06:59여전히 매우 제한적인 개념 증명(PoC) 단계일 뿐입니다. 보셨다시피 무엇을 물어보든 모델은
00:07:06그렇게 학습되었기 때문에 항상 원래 이야기로 돌아가게 됩니다. 이번 테스트가
00:07:11흥미로우셨다면, 비슷한 분야에서 1세대 라즈베리 파이가 실제로
00:07:18진짜 LLM을 로컬에서 구동할 수 있는지 테스트한 다른 영상도 있으니 확인해 보세요. 자,
00:07:24구독자 여러분. ESP32 칩에서 2,890만 개의 파라미터 언어 모델을 구동하는 방법이었습니다.
00:07:32테스트해 보았고, 잘 작동하네요. 이 프로젝트를 만든 Slava에게 찬사를 보냅니다. 여러분은 이 실험에 대해 어떻게 생각하시나요?
00:07:38이러한 구현이 유용하게 쓰일 만한 실생활 적용 사례가 떠오르시나요?
00:07:43아래 댓글창에 여러분의 의견을 남겨주세요. 그리고 여러분, 이런 기술 분석 영상이 마음에 드셨다면
00:07:48영상 아래 좋아요 버튼을 꾹 눌러서 알려주세요. 그리고 저희 채널
00:07:53구독도 잊지 마세요. 지금까지 Betterstack의 Andres였습니다. 다음 영상에서 뵙겠습니다.

Description

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

Community Posts

No posts yet. Be the first to write about this video!

Write about this video