TL;DR
- Needle 2는 14MB 함수 호출 모델로, Raspberry Pi 5에서 CPU만 사용해 자연어 요청을 로컬 동작으로 바꾸는 모델임.
- Python 함수에
@needle.tool을 적용하면 함수 이름과 설명, 타입 주석으로 도구 스키마를 만들고 모델이 호출할 함수와 인수를 선택함. - 첫 다운로드 뒤에는 클라우드 API나 네트워크 연결 없이 동작하며, LED 제어부터 메모 작성, CPU 온도 조회, 사진 촬영까지 처리함.
- Raspberry Pi 5에서 LED 켜기 요청은 78ms, 메모 저장은 107ms가 걸렸으며, 파이썬 데모 전체 프로세스 메모리 사용량은 최대 46.4MB임.
- 지정된 도구로 처리할 수 없는 질문에는 함수 호출을 반환하지 않으며, 모델 가중치와 코드는 Apache 2.0 라이선스로 공개됨.
Raspberry Pi 5에서 텍스트를 동작으로 전환
- Cactus Compute가 만든 Needle 2는 자연어를 Raspberry Pi의 로컬 동작으로 바꾸는 14MB 함수 호출 모델임.
- “Turn the LED on”이라고 입력하면 78ms 뒤 Raspberry Pi 5의 LED가 켜지며, 별도의 AI HAT 없이 CPU만 사용함.
- Needle은 챗봇이 아님. Cactus Compute 팀은 기기를 대상으로 한 안정적이고 구조화된 동작 하나에 집중해 학습시킴.
“Needle 2는 상당히 뛰어남” — Eben Upton, Raspberry Pi CEO
Python 함수로 도구 정의
- 설정 방식은 Python 함수를 선언한 다음 Needle이 호출할 함수를 선택하고 인수를 채우도록 하는 구조임.
- CPU만 사용하는 Raspberry Pi 5에서 로컬 메모 작성,
vcgencmd조회, LED 제어 등을 시험함. cactus-needle을 설치하고 최초 다운로드를 마치면 클라우드 API나 네트워크 연결 없이 로컬에서 실행됨. 첫 예제에는 추가 하드웨어가 필요하지 않음.@needle.tool데코레이터가 적용된 함수의 이름, 독스트링, 타입 주석을 사용해 도구 스키마를 구성함. 예를 들어save_note의 타입 주석은text가 문자열이어야 함을 나타냄.save_note는 텍스트 파일에 메모를 덧붙이고 메모 내용과 파일 경로를 반환함.get_temperature는vcgencmd measure_temp를 실행해 Raspberry Pi의 현재 CPU 온도를 섭씨 값으로 반환함.
도구 호출과 실행 결과
- “쿨러가 작동한다고 메모해”라는 요청에서 Needle은
save_note를 선택하고text인수에the cooler is working을 전달함. run()은 선택된 함수를 실행하고 반환값을response["results"]에 포함함. 이 예제의 결과는 메모 내용과needle-notes.txt경로임.- 이 실행에서
run()내부의 첫complete()는 함수를 선택하고 인수를 생성하는 데 107ms가 걸림. - “이 Raspberry Pi는 얼마나 뜨거워?”라는 요청에는
get_temperature를 인수 없이 호출하며, 예시 결과는 49.9°C임. set_led(on),blink_led(times),take_photo()도 도구로 선언해 선택을 시험함. 사진 촬영 함수는rpicam-still을 이용함.- Needle은 도구를 선택하며, 다음 동작은 일반 Python 코드가 결정함. 이름과 타입 주석, 설명이 명확한 Python 함수라면 같은 방식으로
@needle.tool을 적용할 수 있음.
범위와 성능 측정
- Needle은 의도적으로 범위를 좁힌 모델임. “프랑스의 수도는?”처럼 제공된 도구로 답할 수 없는 질문에는 92ms 뒤 빈
function_calls를 반환함. 동작 모델이 관련 없는 요청을 거부하는 것이 올바른 응답이라는 설명임. - Needle의 기본 세션 메모리 사용량은 약 28MB임. 인터프리터를 포함한 Python 데모 프로세스의 메모리 사용량은 43~46.4MB 범위에서 최고치를 기록함.
- Raspberry Pi 5의 8GB 모델, Raspberry Pi OS, CPU 전용 환경과
cactus-needle 2.0.7에서 실행한 측정 결과는 다음과 같음. - LED 켜기 —
set_led, 프리필 488 tok/s, 디코드 296 tok/s, 소요 시간 78ms - 온도 조회 —
get_temperature, 프리필 487 tok/s, 디코드 303 tok/s, 소요 시간 149ms - LED 두 번 깜박이기 —
blink_led, 프리필 475 tok/s, 디코드 314 tok/s, 소요 시간 83ms - 사진 촬영 —
take_photo, 프리필 461 tok/s, 디코드 248 tok/s, 소요 시간 76ms - 쿨러 작동 메모 저장 —
save_note, 프리필 475 tok/s, 디코드 305 tok/s, 소요 시간 107ms - 프랑스 수도 질문 — 호출 없음, 프리필 470 tok/s, 디코드 297 tok/s, 소요 시간 92ms
- 프리필과 디코드 수치는 Needle 세션 카운터임. 소요 시간은 선택한 Python 함수가 실행되기 전, 한 번의
complete()호출에 걸린 벽시계 시간임.
기존 Python 함수와 공개 자료
- GPIO Zero 함수를 이미 사용한다면 데코레이터를 적용해 Needle에 전달할 수 있으며, 다른 애플리케이션 로직에도 같은 방식을 적용할 수 있음.
- 특정 도구 모음에 맞춘 Needle 미세 조정은 노트북에서 로컬로 수행할 수 있음.
- 가중치와 코드는 다음 저장소에서 확인할 수 있으며, 둘 다 Apache 2.0 라이선스로 공개됨.
- huggingface.co/Cactus-Compute/needle2
- github.com/cactus-compute/needle
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요