Needle은 Cactus Compute가 공개한 2,600만 파라미터 함수 호출(function calling) 모델이다. Gemini 3.1에서 증류한 Simple Attention Network 구조를 사용하며, 휴대폰·워치·안경 같은 소비자 디바이스에서 개인 AI가 도구를 호출하는 시나리오를 겨냥한다.
핵심 아이디어
Needle은 범용 대화 모델이 아니라 단일 턴 함수 호출에 초점을 맞춘 초소형 SLM이다. 사용자 질의와 도구 스키마를 입력받아 어떤 도구를 어떤 인자로 호출할지 생성한다.
프로젝트가 공개한 기본 구조는 다음과 같다.
| 항목 | 내용 |
|---|---|
| 파라미터 | 26M |
| 토크나이저 | BPE 8,192 |
| 구조 | 인코더 12층 + 디코더 8층, GQA/RoPE, cross attention |
| 사전학습 | TPU v6e 16개에서 200B 토큰 |
| 후처리 학습 | 단일 턴 함수 호출 데이터 2B 토큰 |
| 라이선스 | MIT |
왜 작은 모델인가
개인 AI가 항상 클라우드 프론티어 모델을 호출하면 비용, 지연시간, 프라이버시 문제가 생긴다. Needle은 “대화 전체를 잘하는 모델”이 아니라 “로컬에서 도구 선택을 빠르게 처리하는 모델”로 역할을 좁힌다.
이 접근은 local-slm과 litert-lm이 다루는 온디바이스 AI 방향과 맞닿아 있다. 대형 모델은 복잡한 추론을 맡고, 초소형 모델은 반복적·구조화된 라우팅을 맡는 식의 하이브리드 구성이 가능하다.
실행 예시
git clone https://github.com/cactus-compute/needle.git
cd needle && source ./setup
needle playground플레이그라운드는 http://127.0.0.1:7860에서 열리며, 가중치를 자동 다운로드한 뒤 사용자의 도구 정의로 테스트와 파인튜닝을 수행한다.
Python에서는 체크포인트와 토크나이저를 불러와 질의와 도구 스키마를 전달한다.
from needle import SimpleAttentionNetwork, load_checkpoint, generate, get_tokenizer
params, config = load_checkpoint("checkpoints/needle.pkl")
model = SimpleAttentionNetwork(config)
tokenizer = get_tokenizer()
result = generate(
model, params, tokenizer,
query="What's the weather in San Francisco?",
tools='[{"name":"get_weather","parameters":{"location":"string"}}]',
stream=False,
)한계와 적합한 용도
Needle은 FunctionGemma-270M, Qwen-0.6B, Granite-350M, LFM2.5-350M보다 작은 규모를 내세운다. 다만 저장소도 명시하듯 더 큰 모델은 대화 능력과 범용성에서 유리하다. Needle은 다음 상황에 더 적합하다.
- 제한된 로컬 하드웨어에서 함수 호출 라우터가 필요한 경우
- 도구 스키마가 좁고 반복되는 개인 AI 앱
- 초소형 모델 구조와 증류·파인튜닝 실험
- 모바일·웨어러블 AI의 로컬 전처리 계층
관련 문서
- local-slm — 로컬 소형 언어 모델 개요
- gemma — Google 경량 오픈 모델 계열
- litert-lm — Google의 엣지 디바이스 LLM 추론 프레임워크
- llm-inference — LLM 추론 과정의 기본 원리
참고 자료
- cactus-compute/needle — GitHub 공식 저장소
- Cactus-Compute/needle — Hugging Face 모델 가중치