TinyML
TinyML은 메모리가 킬로바이트 단위이고 전력이 밀리와트 수준인 마이크로컨트롤러에서 머신러닝을 실행합니다. 모델을 작게 만드는 방법, 활용 분야, 도구를 다룹니다.
TinyML(초소형 머신러닝)은 마이크로컨트롤러와 초저전력 칩에서 머신러닝 모델을 실행하는 방식으로, 일반적으로 메모리는 수백 킬로바이트이고 운영 체제가 없으며 전력 예산은 밀리와트 단위입니다. 센서 바로 옆의 칩에서 추론을 실행하면 배터리 구동 장치가 몇 달 또는 몇 년 동안 주변 소리를 듣고, 모습을 살피거나, 진동을 감지할 수 있습니다. 원시 데이터 대신 "키워드 감지됨"이나 "기계가 비정상적으로 진동함"과 같은 결과만 전송합니다. 이 방식은 지연 시간을 줄이고 데이터를 비공개로 유지하며, 데이터 스트리밍에 필요한 무선 통신 전력을 절약합니다. 이 분야의 커뮤니티 단체인 EDGE AI FOUNDATION은 이전에 tinyML Foundation이라는 이름을 사용했습니다.
마이크로컨트롤러에 모델을 탑재하는 방법#
마이크로컨트롤러는 모델 가중치를 프로그램과 함께 플래시 메모리에 저장하고, 계산 중인 활성화 값은 일반적으로 용량 제약이 더 큰 SRAM에 보관합니다. 모델 양자화를 통해 가중치를 8비트 정수로 바꾸면 FP32 크기의 4분의 1로 줄어들며, 부동소수점 연산을 소형 코어가 효율적으로 처리하는 정수 연산으로 대체합니다. 깊이별 분리 합성곱, 모델 가지치기, 더 낮은 입력 해상도로 구성된 소형 아키텍처는 나머지 크기도 줄입니다. 신경망 아키텍처 탐색을 사용하면 특정 칩의 메모리에 맞춰 네트워크를 설계할 수 있습니다. MCUNet은 이러한 탐색과 메모리 인식 런타임을 결합해 시판 마이크로컨트롤러에서 ImageNet 톱-1 정확도 70% 이상을 달성했습니다. 완성된 모델은 펌웨어로 컴파일되어 소형 인터프리터나 컴파일된 코드로 실행됩니다.
하드웨어를 사용하기 전에도 메모리 예산을 추정할 수 있습니다. 오디오 특징에서 음성 명령을 인식하는 데 쓰이는 종류의 깊이별 분리 CNN인 이 키워드 감지 네트워크는 플래시 메모리 용량 계산에 INT8 가중치당 1바이트를 사용하고, SRAM 용량 계산에는 입력 및 출력 활성화 값 중 크기가 가장 큰 쌍을 사용합니다.
import torch
from torch import nn
# A depthwise-separable CNN for keyword spotting on 49x10 MFCC audio features
model = nn.Sequential(
nn.Conv2d(1, 64, (10, 4), stride=2, padding=(5, 1)),
nn.ReLU(),
nn.Conv2d(64, 64, 3, padding=1, groups=64),
nn.Conv2d(64, 64, 1),
nn.ReLU(),
nn.Conv2d(64, 64, 3, padding=1, groups=64),
nn.Conv2d(64, 64, 1),
nn.ReLU(),
nn.AdaptiveAvgPool2d(1),
nn.Flatten(),
nn.Linear(64, 12),
)
# At INT8, flash stores one byte per weight and SRAM holds activations in flight
weights = sum(p.numel() for p in model.parameters())
x, peak = torch.randn(1, 1, 49, 10), 0
for layer in model:
y = layer(x)
peak = max(peak, x.numel() + y.numel()) # a layer's input and output coexist
x = y
print(f"Flash: {weights / 1024:.1f} KB, peak SRAM: {peak / 1024:.1f} KB")출력 결과는 플래시 메모리 12.7 KB와 최대 SRAM 15.6 KB입니다. 이는 Arduino Nano 33 BLE Sense의 nRF52840 마이크로컨트롤러가 제공하는 플래시 1 MB와 RAM 256 KB 중 일부에 불과하므로 오디오 파이프라인과 런타임을 위한 공간도 남습니다.
런타임 및 하드웨어#
- LiteRT for Microcontrollers: Google의 인터프리터는 이전에 TensorFlow Lite for Microcontrollers로 불렸으며, 운영 체제, 표준 라이브러리, 동적 메모리 할당이 필요하지 않습니다. 핵심 런타임은 Arm Cortex-M3에서 16 KB면 실행할 수 있습니다.
- ExecuTorch: PyTorch의 온디바이스 런타임입니다. Arm Ethos-U 백엔드는 저전력 칩 다수에서 Cortex-M 코어 옆에 배치되는 Arm의 Ethos-U NPU에서 양자화 모델을 실행합니다.
- Arm Cortex-M: TinyML을 실행하는 대부분의 마이크로컨트롤러에 탑재된 프로세서 제품군입니다. RAM이 몇 킬로바이트인 Cortex-M0+ 부품부터 머신러닝용 벡터 명령을 지원하는 Cortex-M55와 Cortex-M85까지 포함합니다.
- Coral NPU: Google이 2025년 10월 상시 작동 웨어러블용으로 발표한 오픈소스 RISC-V 가속기 설계로, 수 밀리와트의 전력으로 초당 약 5120억 회 연산을 목표로 합니다.
TinyML과 Edge AI 비교#
엣지 AI는 Raspberry Pi 같은 싱글 보드 컴퓨터와 NVIDIA Jetson 같은 임베디드 GPU 모듈을 포함해 데이터가 생성되는 장치에서 이루어지는 모든 추론을 의미합니다. 이러한 장치는 기가바이트 단위 메모리를 갖추고 수 와트의 전력을 소비합니다. TinyML은 그중 모델 크기가 킬로바이트 단위인 가장 작은 범주입니다. 마이크로컨트롤러에 가속기가 탑재되면서 경계는 계속 달라지고 있습니다. ST의 STM32N6은 Cortex-M55와 600 GOPS 신경망 처리 장치, RAM 4.2 MB를 결합합니다. 가장 작은 Ultralytics YOLO26 검출기는 매개변수가 240만 개이며 INT8에서는 약 2.4 MB이므로, INT8 LiteRT 내보내기(format="litert", quantize=8)는 기존 TinyML보다 한 단계 위인 스마트폰, 싱글 보드 컴퓨터, 가속기 탑재 보드를 대상으로 합니다.
TinyML의 활용 분야#
- 키워드 감지: 스마트폰, 이어버드, 스마트 스피커의 상시 작동 웨이크 워드 감지기는 저전력 코어에서 특정 문구를 감지하고, 해당 문구를 들었을 때만 메인 프로세서를 깨웁니다.
- 예지 정비: 모터와 펌프에 부착된 진동 및 오디오 센서는 정상 작동 상태를 학습하고 고장에 앞서 나타나는 이상 징후를 감지하며, 배터리로 수년간 작동합니다.
- 야생동물 및 환경 모니터링: 태양광 또는 배터리로 작동하는 음향 센서는 외딴 숲에서 동물 울음소리나 전기톱 소리를 인식하고 장거리 무선 통신으로 짧은 경보를 전송합니다.
- 시각적 웨이크 워드: 마이크로컨트롤러의 저해상도 카메라는 사람의 모습이 보이는지 판단하고, 사람이 있을 때만 더 큰 시스템을 깨웁니다.
MLPerf Tiny는 이 하드웨어 범주를 대상으로 하는 MLCommons의 벤치마크로, 키워드 감지, 시각적 웨이크 워드, CIFAR-10 이미지 분류, 기계 소리 이상 감지 등 이러한 활용 사례에서 정확도, 지연 시간, 에너지 소비를 측정합니다.










