$60 보드에서 실행하는 생성형 추론: STM32H747의 Gear-1M
Gear 제품군의 가장 작은 모델은 ARM Cortex-M7에서 초당 20 tokens의 텍스트를 생성합니다. NPU도, 외부 RAM도, 클라우드도 필요하지 않습니다. 언어 모델이 들어가기 어렵다고 여겨지는 환경에 모델을 배포한 방법을 소개합니다.
핵심 요점
- 20.0 tok/s 실측 — STM32H747I-DISCO의 Cortex-M7 @ 400 MHz에서 token당 50 ms를 기록했습니다.
- 1.59 MB의 Flash 에 가중치, 런타임, 애플리케이션을 포함한 전체 바이너리가 들어가며, 최대 RAM 사용량은 449 KB입니다.
- W4A32 양자화: 4-bit 가중치와 full-precision activation을 사용합니다. int8 벡터 연산 경로가 없는 코어를 고려한 선택입니다.
- 로컬 경로에 KV-cache 없음: 대형 모델의 64K 윈도우를 지원하는 것과 같은 ConvKV-Gated Mixer 덕분에 이 메모리 예산에 맞출 수 있습니다.
하드웨어 제약
STM32H747I-DISCO는 Cortex-M7 400 MHz, Flash 2 MB, SRAM 1 MB, 소형 LCD를 갖춘 표준 평가 보드입니다. 가격은 약 $60이며, 가전제품, 계량기, 산업용 컨트롤러에 이미 대량으로 쓰이는 유형의 부품입니다.
이 자원 예산은 바꿀 수 없습니다. Swap도 외부 DRAM도 없고, 연산을 넘겨줄 가속기도 없습니다. 모델과 런타임, 애플리케이션을 모두 Flash 2 MB와 RAM 1 MB 안에 넣지 못하면 실행할 수 없습니다.
1메가바이트의 가중치에 담은 구성
- 5개 레이어, hidden dimension 128 — Gear-1B와 같은 하이브리드 구성을 자원 예산에 맞게 축소했습니다.
- 2,048개 항목의 BPE tokenizer — Wikipedia가 아닌 명령·제어 언어에 맞춘 크기입니다.
- W4A32 — Cortex-M7에는 FPU가 있지만 설계의 중심으로 삼을 만한 int8 벡터 연산 유닛이 없어, 4-bit 가중치를 풀어 full-precision 연산에 사용합니다.
- Lconv = 4 — 대형 모델보다 convolution state를 한 위치 더 길게 유지합니다. 이 규모에서는 비용이 작은 절충입니다.
KV-cache를 없애야 했던 이유
일반적인 Transformer의 KV-cache는 대화가 길어질수록 RAM을 더 사용합니다. 이 보드에서 가장 부족한 자원입니다. Gear의 로컬 레이어는 대신 context 길이와 관계없이 4개 위치의 고정된 convolution state를 유지합니다. 따라서 decode 시 메모리 사용량이 prompt 길이에 따라 달라지지 않습니다. 같은 아키텍처를 이 보드부터 64K context를 지원하는 대형 모델까지 확장할 수 있는 이유입니다.
수행하는 작업
Gear-1M은 자연어를 구조화된 보드 제어 인텐트로 변환합니다. 아래 데모는 실제로 프로파일링한 작업입니다. 보드가 요청을 해석하고, 펌웨어가 실행할 수 있도록 타입이 지정된 JSON을 출력합니다:
$ gear run --model gear-1m-w4a32
> turn on the blue led and write hello on the lcd
{ "action": "led_set", "led": "blue", "state": "on" }
{ "action": "lcd_write", "text": "hello" }
초당 20 tokens라면 이와 같은 응답은 약 1초 반 만에 완성됩니다. 네트워크 스택이 전혀 없는 장치에서도 대화처럼 느낄 수 있는 속도입니다.
추정이 아닌 실측
네 수치 모두 서버 실행 결과에서 추정한 값이 아니라 장치에서 직접 측정했습니다. 프로파일링 방법과 모바일 NPU에서 실행한 270M·1B 모델의 동일한 측정 결과는 기술 보고서에 포함되어 있습니다.
가중치와 배포용 바이너리는 Hugging Face에서 확인할 수 있으며, 다른 제품군은 모델 페이지에서 볼 수 있습니다. 아직 지원하지 않는 보드를 사용하고 계시다면 알려 주세요.