8달러 마이크로컨트롤러(ESP32-S3)에서 구동하는 SLM
고가의 GPU나 데이터센터 없이도, 단 8달러하는 마이크로컨트롤러(ESP32-S3) 자체에서 트랜스포머 모델을 처음부터 끝까지 직접 학습(Training)할 수 있음을 증명한 실험입니다. 사전 학습된 모델을 단순히 실행(추론)하는 것을 넘어, 현장에 설치된 기기가 주변 환경 데이터를 실시간으로 학습해야 하는 '온디바이스(On-device) 학습'의 가능성을 여는 중요한 사례입니다.
이 글은 AI의 도움을 받아 작성되었습니다. 주의할 점: AI의 도움을 받았다는 것은 AI가 글을 썼다는 뜻이 아닙니다. 이는 AI가 교정하고, 검토하고, 일부 내용을 채워 넣었을 뿐 작성자는 인간(이라고 나는 믿습니다)이라는 뜻입니다.
Qapla' (클링온어) 프로젝트 이것은 8달러짜리 ESP32-S3에서 트랜스포머(Transformer)를 처음부터 학습시키는 방법에 대한 이야기입니다. 아무도 원하지 않았지만 모두에게 필요했던 (클링온어) GPT입니다. 그렇다면 왜 우리에게 그것이 필요했을까요? 모델 학습에는 GPU나 데이터센터가 필요하다고 우리는 당연하게 생각하기 때문입니다. 하지만 항상 그런 것은 아닙니다. 때로는 8달러짜리 소형 마이크로컨트롤러만으로도 모델을 처음부터 학습시키기에 충분합니다.
다시 한번 읽어보세요. '학습'입니다. 처음부터(training from scratch)입니다. 미리 만들어진(pre-cooked) 모델을 실행하는 것이 아니라 '학습'입니다. 순전파(forward pass), 역전파(backprop), 가중치 업데이트(weight updates)가 칩 내부에서 일어납니다.
Qapla' 프로젝트란 무엇인가? 엣지 AI(Edge AI)는 새로운 것이 아닙니다. TinyML은 수년 동안 마이크로컨트롤러에서 추론을 수행해 왔으며, 안드레이 카르파시(Andrej Karpathy)의 미니멀리즘 프로젝트인 llama2.c의 커뮤니티 포팅판은 약 26만 개의 매개변수(parameters)를 가진 트랜스포머를 ESP32에 탑재했습니다. 그리고 최근에는 훌륭한 프로젝트를 통해 약 2,900만 개의 매개변수를 가진 모델을 8달러짜리 ESP32-S3에서 구동시키는 데 성공했습니다. 이들은 훌륭한 작업 성과이며, 비록 시기상으로 이번 실험과 겹치긴 했지만 우리가 추구하던 모델은 아니었습니다.
Slava S.(slvDev)의 esp32-ai 프로젝트 및 다른 유사한 프로젝트들은 모두 한 가지 공통점이 있습니다. 바로 '추론(inference)'이라는 것입니다. 모델은 GPU나 데이터센터와 같은 다른 곳에서 탄생하여 데이터로 학습된 후, 양자화(quantization)되고 나서야 비로소 칩에 로드되어 구동됩니다. 즉, '두뇌'는 외부에서 조리된 후 칩 위에 올려지는 것입니다.
우리는 다른 질문을 던졌습니다. 만약 모델이 외부에서 탄생할 수 없다면 어떻게 될까요? 만약 기기가 설치될 장소에 가서야 비로소 학습에 필요한 데이터가 생성되기 때문에, 모델이 사전 학습(pre-trained)될 수 없다면 어떻게 될까요? 또한 그 데이터를 미리 가지고 올 수도 없고, 다운로드할 인터넷 환경도 갖추지 못했다면 어떻게 될까요?
여러분이 무슨 생각을 하는지 압니다. "알겠는데... 도대체 왜 누군가 ESP32에서 트랜스포머를 학습시켜야 하죠?" 이는 타당한 질문입니다. 어쩌면 대답은 "아무 이유도 없다"일 수 있습니다. 하지만... 한번 상상의 나래를 펴본다면 이런 상황을 떠올려 보십시오. 한가운데 있는 농기계 부품에 볼트로 고정된 센서가 특정 기계만의 정상적인 진동(세상의 다른 어떤 기계와도 다른)을 학습하여, 고장 나기 전에 문제를 감지하고 유지보수 일정을 잡아야 하는 상황입니다 (아니요, 저를 낚으려 하지 마세요. 인터넷이 없다고 말했지만... LoRa 통신이 있다면? 😉). 또는 특정 토양이 어떻게 마르는지(그 땅의 흙, 햇빛, 배수 상태)를 학습하여 식물이 스트레스를 받기 전에 언제 물을 줘야 할지 예측하는 밭의 센서를 상상해 보십시오.
이러한 경우(우리가 생각할 수 있는 다른 경우들도 마찬가지로)에는 기기가 설치되기 전까지는 데이터가 존재하지 않습니다. 즉, 누구도 미리 모델을 학습시킬 수 없었습니다. 칩은 스스로, 그것도 제자리에서 즉각적으로 학습해야만 합니다.
안타깝게도 우리 주변에는 실험해 볼 농기계가 없었습니다. 그래서 ESP32의 실제 학습 능력을 테스트하기 위해, 우리가 가지고 있는 유일한 데이터인 '언어'를 중심으로 실험을 설계했습니다. 아무의 도움도 없이 8달러짜리 칩이 처음부터 언어를 학습하는 데 어디까지 갈 수 있을까요?
마이크로컨트롤러에서의 학습이 실제로 의미하는 바는 무엇일까요? 8달러짜리 마이크로컨트롤러 내부에서의 학습은 데이터센터에는 없는 게임의 규칙을 부과합니다. 그리고 이러한 규칙들이 다른 모든 것을 결정짓습니다:
첫째, 다시 한번 강조하지만 메모리가 핵심입니다. ESP32-S3은 기가바이트(GB)가 아닌 몇 메가바이트(MB)의 RAM/PSRAM만을 가지고 있습니다. 이는 모델의 크기를 제한합니다. 우리는 수백만 개가 아닌 수십만 개 수준의 매개변수를 이야기하고 있는 것입니다. 칩에 맞아들어가고(fit) 학습될 수 있는 모델은 필연적으로 작을 수밖에 없습니다.
둘째, 작은 모델이 수행할 작업을 지배합니다. 이 정도 크기의 모델은 언어의 구조(단어가 만들어지는 방식, 음운론, 일부 문법)는 학습할 수 있지만, 전체 언어의 심층적인 의미(semantics)까지는 학습할 수 없습니다. 그러므로 수행해야 할 작업(task) 역시 모델의 크기에 맞게 축소되어야 합니다.
셋째, 말뭉치(corpus)가 결과를 지배합니다. 작은 모델에는 기가바이트 단위의 텍스트가 필요하지 않습니다. 콤팩트하고, 정제되며, 구조화된 말뭉치가 필요합니다. 또한, 이를 퍼블릭하게 공개하려면 저작권 골칫거리가 없어야 합니다.
이 세 가지 제약 조건, 즉 '작은 모델, 제한적인 작업, 정제되고 콤팩트한 말뭉치'를 합치면, 우리가 던졌던 질문... (중략)