
14MB 온디바이스 AI Needle 2, 스마트홈에 정말 쓸 만한가: 벤치마크 5종이 말하는 위치
무료 자료
PDF · 무료
사진 세 장 크기의 AI가 집 안의 불을 끕니다 — 14MB 모델 Needle 2 쉬운 가이드
긴 글을 다 읽기 전에, 실무 가이드부터 먼저 챙겨가세요.
14MB 온디바이스 AI Needle 2, 스마트홈에 정말 쓸 만한가: 벤치마크 5종이 말하는 위치
Needle 2는 엔진과 가중치가 한 파일에 들어간 약 14MB 실행파일로, 말을 함수 호출로 바꾸는 일에만 특화된 모델입니다. 스마트홈 기기 제어에는 강하고, 범용 API 오케스트레이션에는 약해요.
2026-08-10 공개된 Cactus Compute의 Needle 2는 라즈베리파이나 ESP32급 보드에서 인터넷 없이 도는 소형 언어모델이에요. 결론부터 말하면 "작은데 더 똑똑한 모델"은 아닙니다. 정확한 표현은 "5배에서 67배 작은 크기로 비슷한 점수를 내는 모델"이죠.
"우리 스마트홈 서버에 붙여서 음성 명령을 처리해도 되나요?" Hacker News 공개 스레드(527 points, 182 comments)에서 가장 먼저, 가장 많이 나온 질문이 이거였습니다. 궁금할 만해요. 14MB는 지금까지 온디바이스 AI 이야기에서 보던 단위가 아니거든요.
그래서 이 글은 그 14MB가 정확히 무엇의 크기인지부터 확인하고, 구조와 벤치마크 5종, 실제로 못 하는 일, 지금 바로 시도하는 방법, 마지막으로 도입 판단 기준까지 순서대로 정리합니다.
목차
- "14MB"는 정확히 무엇의 크기인가
- FFN을 걷어낸 구조, Simple Attention Network
- 벤치마크 5종이 말하는 진짜 위치
- 할 수 있는 것과 못 하는 것
- 지금 시도해 보는 법
- 실무 도입 판단 기준
- 자주 묻는 질문 (FAQ)
- 참고자료
"14MB"는 정확히 무엇의 크기인가
Needle 2의 14MB란? 가중치 파일만의 크기가 아니라 추론 엔진, 가중치, 토크나이저, 문법 컴파일러가 하나로 묶인 실행파일 크기입니다. 가중치 아카이브만 따지면 13.10MB, 학습용 체크포인트는 86.24MB로 각각 다른 숫자예요.
숫자가 후킹의 전부인 만큼 벤더 발표를 그대로 옮기는 대신 Hugging Face 파일 트리에서 바이트를 직접 확인했습니다. 결과는 아래와 같아요.
| 대상 | 실측 크기 | 의미 |
|---|---|---|
linux-arm64/needle | 14,801,016 B (14.12MB) | 엔진과 가중치가 합쳐진 통짜 실행파일 |
macos-arm64/needle | 14,594,024 B (13.92MB) | 동일 구성 |
android-armv7/needle | 14,448,988 B (13.78MB) | 플랫폼 중 최소 |
linux-mipsel/needle | 15,272,444 B (14.56MB) | 플랫폼 중 최대 |
needle2.cact | 13,737,807 B (13.10MB) | 가중치 아카이브 단독 |
checkpoints/needle2.pkl | 90,426,504 B (86.24MB) | 학습용 체크포인트(비양자화) |
그래서 "가중치 파일이 14MB"라는 표현은 정확하지 않습니다. "런타임을 따로 깔고 나서 14MB"라는 표현도 틀렸어요. 런타임이 그 안에 이미 들어 있으니까요.
파라미터는 45M(4,500만)입니다. 2비트로 저장하면 이론상 약 11.25MB이니, 13.10MB라는 가중치 크기는 토크나이저와 헤드, 메타데이터를 더한 값으로 자연스럽게 설명돼요. 숫자들이 서로 모순 없이 맞물립니다.
Cactus 측 설명에 따르면 이 2비트는 학습이 끝난 뒤 눌러 담은 게 아니라 사전학습부터 후처리학습까지 전 구간을 2비트로 돌린 결과입니다. 소형 모델은 사후 양자화에서 무너지기 때문이라는 게 회사 측 근거인데, 이 부분은 독립 검증된 사실이 아니라 벤더 주장으로 읽는 편이 안전하죠.
RAM은 또 다른 숫자입니다. 세션 실행 시 최대 약 28MB를 씁니다. 256토큰 슬라이딩 윈도우로 KV 캐시를 고정해 대화가 길어져도 메모리가 늘지 않는 상한선 구조라는 것이 Cactus 측 설명이에요.
FFN을 걷어낸 구조, Simple Attention Network
45M 파라미터로 이만한 함수 호출 정확도가 나오는 이유는 구조에 있습니다. Cactus는 이 구조를 Simple Attention Network(SAN)라 부르고, 근거 논문 "A Controlled Study of Attention-Only Transformers"를 2026-07-20 arXiv에 공개했어요. Needle 2 저자진과 논문 저자진이 같습니다.
논문 주장은 이렇습니다. 트랜스포머 비임베딩 파라미터의 3분의 2를 차지하는 피드포워드(FFN) 층을 통째로 빼고 그 예산을 어텐션 깊이에 다시 배분하면, 파라미터를 맞춘 조건에서 성능 차이가 0.006 nats(손실의 0.27%)까지 좁혀진다는 것이죠.
흥미로운 대목은 논문이 스스로 남은 격차의 정체를 밝힌 부분이에요. 남은 차이가 "가중치에 저장된 지식을 꺼내는 능력"에 몰려 있다고 적고 있는데, 이건 Needle이 세계 지식에 유독 약한 이유와 정확히 이어집니다.
| 요소 | 역할 |
|---|---|
| Hadamard MLP | dense 업/다운 프로젝션을 고정 변환과 학습된 대각행렬로 대체해 채널 믹싱에 파라미터를 거의 안 씀 |
| Engram (해시 n-gram 테이블) | 세계 지식을 스택 밖 조회 테이블로 이동. 45M 중 8M이 연산 없이 읽힘 |
| Multi-lane hyper-connections | 27층 512폭 네트워크에 넓은 망 수준의 라우팅 유연성 부여 |
| 256토큰 슬라이딩 윈도우 + 도구 KV 싱크 | RAM 상한 고정, 도구 선언은 구조적으로 삭제 불가 |
| 바이트 레벨 문법 컴파일러 | 선언한 JSON 스키마에서 문법을 컴파일해 형식 오류 JSON 자체를 차단 |
학습 규모도 대비가 큽니다. Needle 2는 자체 코퍼스 115B 토큰으로 사전학습하고 38B 토큰으로 후처리학습했어요. 비교 대상인 LFM2.5-230M이 19조 토큰을 먹었다는 점을 들어 "데이터를 약 120배 덜 쓰고 대등한 점수"라고 프레이밍하는데, 이 비교 역시 Cactus 측 서술입니다.
연산량은 토큰당 70 MFLOPs로 LFM2.5 230M(460), FunctionGemma 270M(540), Apple FM(약 6,000) 대비 7배에서 85배 적다는 것이 회사 측 측정치예요.
벤치마크 5종이 말하는 진짜 위치
여기가 과장과 사실이 갈리는 지점입니다. 채점 방식은 순서까지 맞아야 정답인 엄격한 완전일치라, 함수 이름과 호출 순서와 모든 인자 값이 전부 맞아야 점수를 받아요.
벤치마크 5종이 말하는 진짜 위치
이미지 출처: cactuscompute.com
Cactus가 스스로 밝힌 두 가지 비대칭도 그대로 옮길 값어치가 있습니다. 비교군을 f16으로 돌린 건 비교군에 유리한 조건이고, Needle이 함수 호출만 학습했다는 건 Needle에 유리한 조건이라고 명시했거든요.
Mobile Actions (961행) — 소비자 기기 동작
| 모델 | 정확도 | 함수명 정확도 | 1-call | 2-call |
|---|---|---|---|---|
| LFM2.5 230M (f16) | 69.1 | 93.0 | 76.1 | 55.0 |
| FunctionGemma 270M (f16) | 64.0 | 87.3 | 73.0 | 46.2 |
| Needle 2 (2비트, 45M) | 63.7 | 98.3 | 71.3 | 48.4 |
| Apple FM (약 3B, 온디바이스) | 57.6 | 94.2 | 64.5 | 43.8 |
종합 정확도는 4개 중 3위입니다. 다만 "어떤 함수를 부를지" 고르는 정확도는 98.3으로 1위예요. 틀리는 지점이 함수 선택이 아니라 인자 값 채우기라는 뜻이죠.
Seal-Tools — Needle이 가장 앞서는 벤치마크
| 모델 | 인도메인(700행) | 아웃오브도메인(654행) |
|---|---|---|
| Needle 2 (2비트) | 32.6 | 28.7 |
| LFM2.5 230M (f16) | 26.9 | 17.0 |
| FunctionGemma 270M (f16) | 16.3 | 15.6 |
도구 후보가 많고 다중 호출이 대부분인 조건에서는 Needle이 양쪽 다 1위입니다. 학습에서 통째로 빠진 도메인에서도 앞선다는 건 스키마 일반화가 됐다는 신호로 읽을 만해요. 다만 절대 점수는 28에서 33% 사이라 낮습니다.
BFCL v4 single-turn (3,641행) — Needle이 지는 벤치마크
| 카테고리 | Apple FM | LFM2.5 230M | FunctionGemma 270M | Needle 2 |
|---|---|---|---|---|
| Simple (Python) | 86.8 | 85.5 | 62.3 | 61.2 |
| Simple (Java) | 67.0 | 48.0 | 38.0 | 29.0 |
| Parallel multiple | 52.0 | 51.5 | 30.5 | 22.5 |
| Irrelevance | 28.3 | 77.7 | 72.1 | 60.8 |
| Overall | 61.7 | 60.8 | 46.1 | 42.6 |
범용 벤치마크에서는 4개 중 최하위입니다. Cactus는 이 결과를 감추지 않고, 자사 학습 코퍼스가 일반 엔터프라이즈 API가 아니라 소비자 기기 동작에 몰려 있어 Java나 JavaScript SDK 계열이 분포 밖이라고 설명해요.
DroidCall(200행)에서는 Needle 2가 17.0으로 FunctionGemma(17.5)와 사실상 동률입니다. 여기서 눈여겨볼 건 2-call 정확도가 세 모델 모두 0.0%라는 점이에요. 이건 Needle만의 문제가 아니라 이 체급 전체의 한계입니다.
정리하면 이렇습니다. 스마트홈과 기기 제어에는 붙여볼 만하고, 범용 API 오케스트레이션에는 맞지 않아요.
할 수 있는 것과 못 하는 것
할 수 있는 것
- 함수 호출: 자연어 문장을
{"name": ..., "arguments": {...}}구조로 변환 - 구조화 추출: 스키마 하나만 선언하면 영수증이나 인보이스에서 타입이 보장된 필드를 뽑아냄
- 다단계 체이닝: 연락처 검색 후 그 결과의 ID로 메시지를 보내는 식의 후속 호출
- 도구 검색: 도구를 6개 이상 선언하면 내장 검색 헤드가 매 턴 상위 5개만 컨텍스트에 올림
- 신뢰도 게이팅: 응답마다 0에서 1 사이 점수 반환. 임계값 아래면 재질문하거나 클라우드로 넘김
- 거절: 처리 못 하는 요청에는 빈 배열
[]반환
못 하는 것
자유 텍스트 대화가 아예 안 됩니다. 챗봇이 아니에요. 공식 문서가 "자유 텍스트 폴백은 없다"고 못 박고 있습니다. 세계 지식도 거의 없어요. 창업자 로만 셰멧이 Hacker News에서 "14MB 모델이 할 수 있는 일에는 한계가 있다. Needle은 범위가 좁게 정의된 환경의 인컨텍스트 추론에서 강하다"고 직접 답한 그대로입니다(2026-08-11).
성능이 도구 설명 품질에 크게 좌우된다는 점도 중요합니다. 한 사용자가 "Add two numbers."라는 설명으로 덧셈 도구를 만들었더니 "수학 도구가 없다"며 거절했고, 설명을 "Calculate the sum of two numbers. Use for any arithmetic or math question."으로 바꾸자 동작했어요. 그런데 같은 사용자가 질문을 "what is 5 + 7?"로 바꾸자 다시 안 됐고, 창업자 헨리 은두부아쿠는 이를 "우리 쪽의 또 다른 실패 지점"이라고 인정하며 파인튜닝을 권했습니다(2026-08-10).
가장 눈여겨볼 약점은 무관한 입력을 못 거르는 오탐입니다. Hacker News에 올라온 사례들이 구체적이에요.
- "HN"이라고만 입력했는데
lock_door(door="front door")호출 - "potato" 한 단어에도 같은 결과
- "do not lock the door"(문 잠그지 마)에도 문을 잠그는 호출
- "I'm hungover"(숙취야)에
lock_door호출과 함께 "'hungover'는 보안 도어를 암시"라는 추론 문구
이건 인상비평으로 넘길 이야기가 아닙니다. 벤더 자신의 BFCL Irrelevance 점수 60.8이 같은 방향을 가리키거든요. LFM2.5(77.7)와 FunctionGemma(72.1)보다 낮은 수치죠. 반론도 함께 나왔습니다. 이 사례들 대부분에서 confidence가 0으로 반환돼 설계 의도대로 임계값에서 걸러진다는 지적이었고, 실제로 "Unlock my doors"를 신뢰도 0.9492로 올바르게 거절한 보고도 있었어요. 그래도 "테스트셋 전반의 거절 벤치마크를 내놓으라"는 요구가 스레드에서 반복됐고, 창업자도 지적을 접수했습니다.
나머지 제약도 짚고 갑니다.
- 비영어 주의: 공식 문서가 스페인어 기준 토큰이 약 1.7배로 쪼개져 품질과 256토큰 윈도우 양쪽에 부담이 된다고 밝혔습니다. 정확한 스페인어 호출이 신뢰도 0.0으로 측정된 사례도 문서에 명시돼 있어요. 한국어 관련 수치는 공식 출처에 없습니다.
- 파인튜닝하면 신뢰도 기능이 꺼집니다. 신뢰도 헤드가 베이스 모델 기준으로만 보정돼 있어 튜닝 모델을 로드하면
confidence가None으로 돌아와요. - 다중 호출 정확도는 체급 전체가 낮습니다. DroidCall 2-call에서 세 모델 모두 0.0%였죠.
지금 시도해 보는 법
설치 없이 브라우저에서
공식 페이지에 WebAssembly로 모델이 직접 도는 샌드박스가 있습니다. 스마트홈 병렬 호출, 로봇 3단계 시퀀스, 문서 필드 추출, 12개 도구 라우팅, 무관한 입력 거절까지 프리셋이 준비돼 있어요. 판단에 필요한 감을 가장 빨리 잡는 경로입니다.
Python으로 확인하기
pip install cactus-needle
import needle
@needle.tool
def get_weather(city: str):
"Get the current weather for a city."
return {"city": city, "temp_c": 27, "sky": "clear"}
agent = needle.Needle(tools=[get_weather])
print(agent.run("what's it like in Lagos right now?")["results"])
# [{'city': 'Lagos', 'temp_c': 27, 'sky': 'clear'}]
구조화 추출은 Pydantic 모델을 넘기면 타입이 보장된 객체가 돌아옵니다.
from pydantic import BaseModel
class Invoice(BaseModel):
vendor: str
total: float
due_date: str
invoice = needle.extract("Invoice from Acme Corp, $1,200.00, due 2026-09-01", Invoice)
print(invoice.vendor, invoice.total) # -> Acme Corp 1200.0
import needle은 JAX를 불러오지 않아 가볍고, 엔진 바이너리는 첫 실행 때 한 번 내려받아 캐시합니다.
기기에 올리기
./needle --tools tools.json --prompt "dim the living room to 30"
./needle --tools tools.json --serve # localhost:8080, POST /complete
지원 플랫폼은 Hugging Face 파일 트리에서 직접 확인했습니다.
| 구분 | 폴더 |
|---|---|
| macOS (Apple Silicon) | macos-arm64 |
| Linux | linux-x86_64, linux-arm64, linux-armv7, linux-riscv64, linux-mipsel |
| Windows | windows-x86_64, windows-arm64 |
| Android | android-arm64, android-armv7, android-riscv64 |
| Apple 모바일/웨어러블 | ios-arm64, ios-sim-arm64, watchos-arm64, tvos-arm64 |
| 브라우저/Node | wasm |
마이크로컨트롤러는 외부 RAM이 있는 보드가 대상입니다. 공식 문서가 드는 예는 ESP32-P4(32MB PSRAM), STM32H7, NXP i.MX RT예요.
파인튜닝
여러 사용자가 "이 체급은 파인튜닝이 사실상 필수"라고 지적했고, 창업자도 같은 권고를 했습니다.
needle finetune data.jsonl --epochs 10
needle build checkpoints/needle2.pkl --lora checkpoints/needle_lora.pkl --out my_needle.cact
공식 문서가 짚는 함정 세 개만 옮깁니다. 에폭 부족이 가장 흔한 실수라 예제 200개 규모면 기본값 3에폭으로는 어댑터가 거의 안 움직이고, 10에서 30에폭을 권장해요. 무관한 예제("answers": [])를 반드시 섞어야 하는데, 안 섞으면 튜닝된 모델이 모든 입력에 도구를 호출합니다. 위에서 본 오탐 문제와 바로 이어지는 대목이죠. 도구 선택은 수백 개 예제로 개선되지만 인자 값 grounding은 수천 개 규모가 필요합니다.
작업 자체는 무겁지 않습니다. Apple Silicon 기준 스텝당 0.71초라 노트북에서 수 분에서 수 시간이면 끝나요.
실무 도입 판단 기준
앞의 수치를 한 장으로 접으면 경계가 꽤 선명합니다.
| 적합한 경우 | 맞지 않는 경우 |
|---|---|
| 스마트홈 자동화, 기기 음성 제어 | 범용 API 오케스트레이션, 엔터프라이즈 SDK 호출 |
| 도구 범위가 좁고 설명을 정밀하게 쓸 수 있는 환경 | 무엇이 올지 모르는 열린 입력 |
| 인터넷 없이, 데이터가 기기 밖으로 안 나가야 하는 조건 | 자유 대화나 지식 질의응답이 필요한 서비스 |
| 도메인 데이터로 파인튜닝할 여력이 있는 팀 | 베이스 모델 그대로 바로 붙이려는 경우 |
라이선스는 상업 이용에 걸림돌이 없습니다. 다만 표기가 저장소마다 갈려요. GitHub LICENSE 파일은 MIT, PyPI 패키지와 Hugging Face 가중치와 공식 사이트는 Apache-2.0입니다. 둘 다 상업 이용과 수정과 재배포가 가능하니 도입 가부는 바뀌지 않지만, 컴플라이언스 문서에는 "코드 MIT, 가중치 Apache-2.0"으로 나눠 적는 편이 정확합니다.
실제 채택 사례로는 웨어러블 업체 Pebble이 Index 01 앱에서 Needle을 로컬 구동 중이라고 공식 페이지에 적혀 있습니다. 창업자 에릭 미기코브스키의 코멘트가 실명으로 실려 있는데, Cactus 자사 페이지에 게재된 고객 코멘트라는 점은 감안해서 읽어야 해요.
시장 논거로 Cactus는 IoT 기기가 210억 대인 데 비해 PC는 약 15억 대이고 엣지 기기 5대 중 4대가 200달러 미만이라고 제시합니다. 원 출처 표기가 없어 회사 측 주장으로만 귀속하는 게 맞지만, 엣지 AI의 무게중심을 맥과 PC에서 값싼 하드웨어로 옮기려는 시도라는 방향성 자체는 읽을 만하죠.
커뮤니티 정서를 한 줄로 요약하면 "형태의 혁신에는 감탄, 실사용 신뢰도에는 유보"입니다. GitHub 스타는 5,194개(2026-08-14 실측)까지 올랐고 스마트홈 자가구축 수요가 즉시 붙었지만, 거절 능력과 신뢰도 보정 상태에 대해서는 증명을 요구하는 목소리가 함께 남았어요.
지금 당장 프로덕션에 넣을 결정을 서두를 필요는 없습니다. 브라우저 샌드박스에서 우리 팀이 실제로 쓰는 명령 열 개를 넣어보는 것만으로도 판단 재료는 충분히 모여요. 오늘 정리한 기준이 그 결정에 보탬이 되길 바랍니다.
자주 묻는 질문 (FAQ)
Q: ESP32 같은 마이크로컨트롤러에서도 돌릴 수 있나요?
외부 RAM이 붙은 보드라면 가능합니다. 세션 실행에 약 28MB를 쓰기 때문에 공식 문서가 드는 예도 ESP32-P4(32MB PSRAM), STM32H7, NXP i.MX RT처럼 PSRAM이 넉넉한 쪽이에요. 내장 SRAM만 있는 소형 보드는 메모리가 모자랍니다.
Q: 한국어 명령도 제대로 알아듣나요?
공식 출처에 한국어 성능 수치는 없습니다. 확인 가능한 건 스페인어 기준으로 토큰이 약 1.7배로 쪼개져 256토큰 윈도우에 부담이 되고, 정확한 스페인어 호출이 신뢰도 0.0으로 측정된 사례가 있다는 문서 기록이에요. 비영어 환경에서는 신뢰도 점수를 그대로 믿지 말라는 경고로 읽는 편이 안전합니다.
Q: 파인튜닝을 꼭 해야 하나요?
베이스 모델만으로도 도구 설명을 정밀하게 쓰면 동작하지만, 여러 사용자와 창업자 모두 이 체급에서는 파인튜닝을 권했습니다. 특히 무관한 입력 오탐을 줄이려면 "answers": [] 형태의 무관 예제를 학습 데이터에 섞는 과정이 사실상 필수예요. 노트북에서 수 분에서 수 시간이면 끝나는 작업이라 진입 장벽 자체는 낮습니다.
마무리
Needle 2를 한 문장으로 줄이면 "작아서 더 똑똑한 모델"이 아니라 "훨씬 작은 크기로 대등한 자리까지 온 모델"입니다. 이 구분을 놓치면 도입 판단이 통째로 흔들리죠.
그래서 결정을 서두를 이유는 없습니다. 브라우저 샌드박스에 명령 열 개만 넣어보면, 우리 기기에 맞는지 아닌지가 대체로 드러나니까요. 잘 되는 열 개보다 엉뚱하게 반응한 한 개가 더 많은 걸 알려줍니다.
오늘 정리한 실측 크기와 벤치마크 위치가, 다음에 온디바이스 AI 이야기를 들었을 때 무엇부터 확인할지 판단하는 데 보탬이 되면 좋겠습니다.
참고자료
- cactus-compute/needle GitHub 저장소
- Needle 2 공식 출시 페이지 (전체 벤치마크 표)
- Hugging Face 모델 카드 — Needle 2
- Hugging Face 파일 트리 (플랫폼별 실측 바이트)
- llms.txt — Needle 2 API 계약 및 동작 규약
- doc/finetuning.md — LoRA 파인튜닝 절차와 한계
- A Controlled Study of Attention-Only Transformers (arXiv:2607.18363)
- Show HN: Needle2: 14MB agentic LLM (527 points)
- PyPI cactus-needle 릴리스 정보
- MarkTechPost — Meet Needle 2

