Opt.Gear-1M: MCU에서 실행되는 생성 언어 모델
약 1M 파라미터의 언어 모델을 STM32 Cortex-M7에 직접 배포해 20 tokens/s의 자기회귀 생성을 달성한 Opt.Gear-1M을 소개합니다.
🤗 HUGGING FACE 🏠 OptAI ✉️ CONTACT
이 글은 Opt.Gear 시리즈의 세 번째 글입니다. 모델 아키텍처와 학습 레시피를 다룬 1편: Opt.Gear 소개, 양자화 인지 학습을 다룬 2편: Opt.Gear-QAT에 이어, 이번 글에서는 마이크로컨트롤러용 초소형 모델 Opt.Gear-1M을 소개합니다.
Opt.Gear-1M의 목표는 Opt.Gear-270M, 1B 모델을 단순히 축소하는 것이 아닙니다. 모바일 NPU나 서버 GPU보다 훨씬 제한적인 마이크로컨트롤러에서 auto-regressive language model을 실제로 실행하는 것이 목표입니다.
이를 위해 Opt.Gear-1M을 STM32H747I-DISCO의 ARM Cortex-M7 코어에 직접 배포했습니다. 4-bit weight와 FP32 activation을 사용하는 W4A32 구성에서 측정한 생성 속도는 다음과 같습니다.
W4A32 양자화 기준, ARM Cortex-M7에서 20 tokens/s를 달성한 최초의 생성 언어 모델입니다.
이 결과는 host simulator가 아니라 실제 MCU에서 동작하는 embedded C runtime을 통해 측정했습니다.
MCU에서는 최적화 문제 자체가 달라진다
서버 GPU에서는 모델의 연산량과 GPU utilization이 주요 최적화 대상입니다. 모바일 NPU에서는 연산자 지원 여부, tensor layout, quantization 형식과 accelerator memory가 중요합니다.
마이크로컨트롤러에서는 제약이 한층 더 강해집니다:
- Flash는 저장할 수 있는 weight와 tokenizer 크기를 제한합니다.
- SRAM은 activation, KV cache와 intermediate buffer의 크기를 제한합니다.
- 대형 matrix accelerator가 없어 CPU에서 단순하게 실행할 수 있는 연산이 중요합니다.
- Dynamic allocation과 복잡한 runtime dependency를 최소화해야 합니다.
- 긴 context보다 예측 가능한 memory footprint와 안정적인 latency가 중요합니다.
따라서 MCU용 언어 모델은 단순히 파라미터 수만 작아서는 충분하지 않습니다. 작은 vocabulary, 제한된 context, 작은 KV cache, 고정 크기 state, 단순한 activation과 정적 memory allocation까지 함께 설계해야 합니다. Opt.Gear-1M은 이러한 MCU 제약에서 출발했습니다.
Configuration of Opt.Gear-1M
Opt.Gear는 1B, 270M, 1M의 세 가지 크기로 구성됩니다. Opt.Gear-1M은 MCU에서의 실행을 위해 거의 모든 구성을 다시 축소했습니다.
| Configuration | Opt.Gear-1M |
|---|---|
| Hidden dimension | 128 |
| Decoder layers | 5 |
| Normalization | QK-LN |
| FFN activation | ReLU6GLU |
| FFN dimension | 272 |
| Attention type | Hybrid |
| Attention heads | 2 |
| KV heads | 1 |
| Head dimension | 64 |
| Sliding-window size | – |
| Conv kernel size | 4 |
| Maximum context | 512 |
| Global RoPE theta | 1,000,000 |
| Local RoPE theta | – |
| Tokenizer | Custom BPE |
| Vocabulary size | 2,048 |
| Tied embedding | No |
Opt.Gear-1M의 목표는 광범위한 지식 benchmark를 포괄하는 것이 아닙니다. 짧은 command, 제한된 도메인의 local generation, embedded-control prompt와 offline human-machine interface를 작은 메모리 안에서 안정적으로 처리하는 것이 우선입니다.
아키텍처: 고정 크기 state의 힘
모든 Opt.Gear 제품군은 attention과 ConvKV-Gated Mixer를 함께 사용하는 hybrid sequence mixing architecture를 채택합니다.
Attention은 멀리 떨어진 token 사이의 관계를 직접 모델링할 수 있지만, decoding 과정에서 이전 token의 key와 value를 KV cache에 저장해야 합니다. Cache 크기는 sequence length와 함께 증가합니다. 반면 ConvKV-Gated Mixer는 key와 value에 causal depthwise convolution을 적용하고, 전체 context 대신 convolution kernel에 의해 결정되는 고정 크기 state를 유지합니다.
| Sequence mixer | 처리 범위 | Decoding state |
|---|---|---|
| GQA attention | Context 내 token 관계 | Sequence length에 따라 증가하는 KV cache |
| ConvKV-Gated Mixer | 짧은 local pattern | Conv kernel에 의해 결정되는 고정 크기 state |
Opt.Gear-1B와 270M은 kernel size 3을 사용하지만, Opt.Gear-1M은 kernel size 4를 사용합니다. Hidden dimension이 매우 작은 환경에서 local receptive field를 조금 더 넓히기 위한 구성입니다. Conv layer는 causal하게 동작하므로 현재 token을 처리할 때 미래 token을 참조하지 않으며, auto-regressive decoding에서는 직전의 작은 convolution state만 유지하면 됩니다.
이 구조의 목적은 attention을 완전히 제거하는 것이 아닙니다:
- GQA attention은 token 사이의 선택적인 상호작용을 담당합니다.
- ConvKV-Gated Mixer는 짧은 범위의 반복적인 local pattern을 작은 고정 state로 처리합니다.
이를 통해 모델의 표현력과 MCU memory footprint 사이의 균형을 맞춥니다.
단순한 연산이 곧 성능이다: ReLU6GLU
Opt.Gear-1B와 270M의 FFN은 GeGLU 기반의 gated dense MLP를 사용합니다. Opt.Gear-1M은 hidden dimension 128, intermediate dimension 272의 더 작은 FFN에 ReLU6 기반의 gated 구성(ReLU6GLU)을 사용합니다:
출력이 0에서 6 사이로 제한되기 때문에 activation range가 예측 가능하고, sigmoid나 GELU와 같은 복잡한 비선형 함수 없이 비교적 단순한 연산으로 구현할 수 있습니다.
대형 accelerator가 없는 Cortex-M7에서는 이론적인 연산량뿐 아니라 함수 구현의 복잡성, temporary buffer와 memory access도 중요합니다. Opt.Gear-1M은 이러한 조건에 맞춰 큰 gated FFN보다 작고 단순한 FFN 구성을 사용합니다.
Opt.Gear-1M은 270M/1B와 다른 post-training 경로를 따릅니다. STM32 보드 제어에 특화된 5만 쌍의 합성 명령 데이터셋(
stm32_cmd_synth)으로 학습되어, 짧은 자연어 명령을 LCD·LED·카메라 제어를 위한 구조화된 JSON 스타일 인텐트로 변환합니다. 자유 형식 텍스트보다 예측 가능한 명령 생성을 의도적으로 우선하는 설계입니다.
Results of STM32H747I-DISCO
| Item | Measured or configured value |
|---|---|
| Board | STM32H747I-DISCO |
| MCU / core | STM32H747XIH6 / ARM Cortex-M7 |
| CPU clock | 400MHz |
| Runtime | Embedded C |
| Quantized format | W4A32 |
| Embedding / LM head | 16-bit |
| Deployment sequence length | 160 tokens |
| Maximum new tokens | 40 tokens |
| Measured throughput | 20 tokens/s |
| Per-token latency | 50ms/token |
.text / .rodata |
1,596,400 bytes |
.data |
532 bytes |
.bss |
444,404 bytes |
| Total static RAM (incl. reserved heap/stack) | 449,032 bytes |
20 tokens/s의 의미
20 tokens/s는 token 하나를 생성하는 데 약 50ms가 걸린다는 의미입니다. 최대 40개의 token을 생성한다면 decode 구간만 단순 계산했을 때 약 2초가 필요합니다. 실제 사용자가 체감하는 전체 응답 시간에는 prompt prefill과 application processing 시간이 추가됩니다.
이 정도의 속도는 긴 문서를 생성하기 위한 서버급 처리량은 아니지만, 짧은 command response나 local status generation에서는 token이 실시간으로 출력되는 것을 확인할 수 있는 수준입니다. Gear-1M은 MCU의 Flash에 들어가는 데서 끝나지 않고, 사용자가 관찰 가능한 속도로 auto-regressive generation을 수행합니다.
Footprint는 ELF로 측정한다
최종 ELF를 arm-none-eabi-size로 분석했을 때 .text와 .rodata의 합은 1,596,400 bytes(약 1.5MB)입니다. 이 수치는 순수한 model weight 크기만을 의미하지 않습니다:
.text에는 embedded runtime의 실행 코드가 포함됩니다..rodata에는 quantized weight와 읽기 전용 상수가 포함됩니다.- 16-bit embedding과 LM head도 읽기 전용 데이터에 포함됩니다.
따라서 W4 weight의 이론적인 크기와 최종 ELF section 크기는 서로 다릅니다. 실제 device build에서는 model weight뿐 아니라 inference code, lookup table, scale과 각종 constant가 함께 Flash를 사용합니다. 이러한 이유로 MCU 모델에서는 단순한 parameter count보다 최종 ELF를 기준으로 한 footprint 측정이 더 중요합니다.
최종 build의 .bss section은 444,404 bytes이며, .data와 예약된 heap/stack 영역을 포함한 static RAM footprint는 449,032 bytes(약 449KB)입니다. RAM은 주로 다음 구성에 사용됩니다:
- Layer activation
- GQA KV cache
- ConvKV fixed-size state
- Intermediate tensor
- Logit 및 sampling buffer
- Embedded runtime workspace
- Heap과 stack
What can we do
Opt.Gear-1M의 목표는 MCU에서 범용 chatbot을 실행하는 것이 아닙니다. 모델의 크기와 2,048 vocabulary에는 분명한 한계가 있습니다. 우리가 도전하고 싶었던 것은 서버 GPU나 모바일 NPU 없이 마이크로컨트롤러 자체 CPU에서 생성형 언어 모델이 실용적인 속도로 동작할 수 있는가라는 질문입니다.
STM32H747I-DISCO에서 측정한 20 tokens/s는 다음 가능성을 보여줍니다:
- 센서 데이터를 짧은 자연어로 요약
- 소형 로봇의 local command response
- 산업용 controller의 offline interface
- 정형화된 상태 메시지 생성
- 네트워크 연결이 제한된 장치의 간단한 질의응답
- 특정 도메인에 맞춘 짧은 embedded assistant
Conclusion
Opt.Gear-1M은 약 1M 파라미터의 언어 모델을 STM32H747I-DISCO의 ARM Cortex-M7에 직접 배포했습니다. 핵심 설계는 다음과 같습니다:
- 128-dimensional hidden state와 5개 decoder layer
- 2개의 query head와 1개의 KV head를 사용하는 GQA
- 고정 크기 state를 유지하는 ConvKV-Gated Mixer
- 2,048 vocabulary의 custom BPE tokenizer
- MCU에 맞춘 512-token maximum context
- 4-bit weight, 16-bit embedding·LM head, FP32 activation
- ONNX나 X-CUBE-AI에 의존하지 않는 embedded C runtime
실제 배포 build는 약 1.5MB의 .text/.rodata와 약 449KB의 static RAM을 사용했습니다. 400MHz Cortex-M7에서 측정한 생성 속도는 20 tokens/s, 약 50ms/token입니다.
이 결과가 의미하는 것은 단순히 "1M 모델을 MCU에 넣었다"는 사실만이 아닙니다.
Flash와 SRAM, 연산 성능이 극도로 제한된 환경에서도 architecture와 runtime을 함께 설계하면 auto-regressive generation을 사용자가 관찰 가능한 속도로 실행할 수 있다.
Opt.Gear-1M은 Opt.Gear 제품군의 배포 범위를 모바일과 edge accelerator에서 센서, controller, 소형 로봇과 offline human-machine interface와 같은 deeply embedded system까지 확장하기 위한 첫 번째 단계입니다.
Citation
@misc{optgear2026,
title = {{Opt-Gear} Technical Report},
author = {{OptAI Gear Team}},
year = {2026},
url = {https://huggingface.co/OptGear}
}
Correspondence: contact@opt-ai.kr · Hugging Face: huggingface.co/OptAI