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였습니다. 다음 영상에서 뵙겠습니다.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video