https://sites.google.com/g.harvard.edu/cs249-tinyml-2023
본 글은 edX의 TinyML 강의(HarvardX TinyML 2 - Applications of TinyML)를 수강하면서 배운 점을 정리한 것이다.
edX 강의에서는 keyword spotting (AI 스피커에 '헤이 구글', '시리야'라고 말하면 인식하는 기능) 태스크를 Arduino Nano 33 BLESense 보드에 구현하는 프로젝트를 중심으로 설명하고 있다. 나도 주말 전까지는 직접 구현해서 코드 분석 + 구현 과정을 리뷰하는 게 원대한 목표였으나... 생각보다 삽질을 많이 해서 이건 다음 회차 때 준비해야 할 것 같다.
오늘은 간단하게 TinyML이란 무엇인지, 일반 AI나 ML 패러다임과는 어떻게 다르며 이게 왜 중요한 주제인지 설명하겠다.
왜 TinyML인가
우리에게 친숙한 코끼리가 사실은 멸종 위기에 처해있다는 사실은 다소 충격적이다. 첫째는 밀렵이고, 둘째는 서식지 감소 때문이다. 이 문제를 기술로 해결하고자 하는 사람들이 있었는데 여기서 TinyML이 빛을 발하게 된다.
코끼리가 특정 영역에 접근했을 때, 개체 위에 부착된 칩이 해당 마이크로컨트롤러에 카메라 스위치를 켜는 신호를 보내고, 마이크로컨트롤러에 탑재된 AI가 코끼리 개체를 탐지해서 사진을 찍을 수 있다면, 적절한 때에 코끼리의 위치를 파악하고 사람들간의 충돌도 방지할 수 있지 않을까? 라는 아이디어에서 출발한 프로젝트가 <ElephantEdge (2020)>이었다.
바야흐로 AI의 시대에서 무궁무진하게 활용 가능한 게 AI이지만, GPU 리소스를 항상 넉넉하게 갖출 수 있는 환경만 있는 건 아니다. 특히 IoT에 AI를 결합('AIoT')하고자 하면 말이다.
따라서 작은 디바이스에도 작동할 수 있는 AI 모델이 필요하게 되었다. 일반 AI보다 훨씬 작고 가벼워서 '코인 배터리'로도 한달 쯤은 넉넉하게 돌아가는 그런 모델 말이다. TinyML이라는 분야는 그렇게 필요에 의해 등장했고 기존의 AI 패러다임과는 사뭇 다른 문제에 직면하게 된다.
TinyML의 특징 3L: Low Size, Low Power, Low Latency
이름값('Tiny'ML)에 걸맞게 일반 AI 모델과는 비교할 수 없을 정도로 작다. 이 프로젝트에서 실제로 쓰인 tiny Conv NN 모델의 크기를 살펴보자.
Quantization까지 거친 후 모델의 크기가 대략 20KB이다. 요즘 스마트폰으로 찍은 사진 한 장이 2MB 쯤 되니 얼마나 작은지 체감할 수 있다.
참고로 일반적인 AI를 예로 들자면, CNN에서 크기와 연산 비용을 극적으로 줄이면서 동시에 높은 성능도 보장해 대중적인 사랑(저번달 다운로드 수가 60만건이다!)을 받은 EfficientNet이라는 모델이 있다. 이 모델도 크기가 약 21.4MB (5.33M params) 정도 된다.
이렇게 크기를 극단적으로 줄인 이유가 뭘까? 다시 말하지만 컴퓨팅 연산 리소스가 충분한 데스크탑이나 클라우드가 아니라 아주 제한된 마이크로컨트롤러 환경에서 작동해야 하기 때문이다. TinyML의 특징은 따라서 세 가지로 정리할 수 있다.
- Low (Small) size: 모델 용량이 적게는 10KB, 많아도 200~300KB까지를 초과해서는 안된다.
- Low power: 1mW 이하의 전력을 사용한다. 참고로 NVIDIA의 V100 GPU 전력 소비량은 300W이다
- Low latency: 실시간으로 동작하는 embedded system 환경이기 때문에 ms 단위의 latency를 보장해야 한다.
TinyML의 한계
모든 엔지니어링에는 trade-off가 있듯이 TinyML 모델 또한 한계도 뚜렷하다. 아주 제한된 가짓수의 task만 수행할 수 있다는 점이다.
예를 들어 keyword spotting을 수행하는 Tiny ConvNet 모델은 일반 영어 단어(=NLP)가 아니라 단 한 가지 단어만을 인식하는 것을 목표로 한다. 목표 task가 단순하기 때문에, 훈련 데이터셋도 해당 단어를 중심으로 간소하게 꾸리면 되고 모델의 성능도 과감하게 포기할 여지가 있다.
그 외에도 TinyML 분야의 현황을 폭넓게 리뷰한 논문(<A review on TinyML: State-of-the-art and prospects>)에서 설명하고 있는 TinyML의 한계는 다음과 같다: (4)
- Low Power
- Limited Memory
- Hardware and Software Heterogeneity
- Lack of Benchmarking Tools
- Lack of Datesets
- Lack of Popularly Accepted Models
- Edge Computing Infrastructure
- Edge Platform Orchestration
- Data and Network Management
- Reliability
- Software Development for Edge
- Need of New Machine Learning Models
위에서 특히 공감되는 부분은 'Lack of Benchmarking Tools', 'Lack of Datesets', 그리고 'Software Development for Edge'이었다. 이 부분은 다음 글에서 프로젝트를 수행하면서 좀 더 본격적으로 다루겠다.
반면에 저전력과 메모리 부족을 한계라고 단정지을 수 있는지는 좀 의문이 든다. 때와 상황에 따라서는 거대힌 AI 모델이 아니라 사진 한 장보다 가벼운 ML이 더 요긴하게 쓰일 수 있기 때문이다. 엔지니어링의 기본 원칙은 무조건 더 좋고 더 빠른 것을 개발하는 게 아닌, 필요에 가장 적합한 제품을 개발하는 것이고 생각한다.
TinyML 분야의 미래?
작년 이후로 생성 AI가 급격하게 붐을 타면서 이제는 AI가 기본 수억 개의 파라미터와 엄청난 컴퓨팅 리소스를 차지하는 걸 당연시하는 시대다. 하지만 그럴수록 더 값싸고 저렴한 AI를 원하는 사람들의 수요도 증가할 거라고 본다.
TinyML 분야의 연구는 단지 임베디드에만 제한되지 않을 것이다. TinyML 분야가 발전할수록 AI 경량화 연구가 활발하게 이루어질 것이고, 이 파급 효과가 일반 AI 시장에도 미쳐 더 가볍고 효율적인 AI를 구축하는 핵심 생태계가 될 거라 기대한다. 그리고 TinyML이 비교적 새로운 분야이기 때문에, AI 오픈소스에 기여하기 열망하는 수많은 개발자 커뮤니티 + AI라는 거대한 트렌트에 탄력을 받아 곧 커뮤니티가 빠르게 성장하지 않을까 내심 희망을 품고 있다.
출처
- keyword spotting 개요: https://arxiv.org/pdf/2002.10851v1
- ElephantEdge: https://www.hackster.io/saraolsson4s/tinyml-and-iot-for-conservation-efforts-dd34db
- 골프공과 Kinetsis KL03 microcontroller 비교 사진: https://www.sciencedirect.com/science/article/pii/S1319157821003335
- Ray, P. P. (2022). A review on TinyML: State-of-the-art and prospects. Journal of King Saud University-Computer and Information Sciences, 34(4), 1595-1623.
도움 자료
- 카네기 멜론 대학의 <Embedded Deep Learning> 강좌 페이지. 학생들이 TinyML을 주제로 수행한 프로젝트 목록을 확인할 수 있다.
- 글 첫머리에서 언급한 edX 강의의 Vijay Janapa Reddi 교수님의 강의 <CS249r: Tiny Machine Learning)> 웹사이트. 여기에도 연도별 프로젝트 목록이 소개되어 있다.
- MIT의 Song Han 교수님의 <TinyML and Efficient Deep Learning Computing> 강의 웹사이트. 일반적인 AI 개념(Transformer, Knowledge Distillation, LLM 등)에 대해 다룬다는 점이 앞 두 강의와 차이점이다. 유튜브에도 강의 녹화 영상을 공개하고 있다.
- Hugging Face에는 파라미터 수 300K~500K 밖에 되지 않는 이미지 모델도 공개하고 있다. ImageNet-1K 데이터셋을 바탕으로 훈련해서 TinyML 프로젝트의 베이스 모델로 충분히 활용해볼 만하다.