Trawling

Show HN: Cactus Needle 3 — 8~29MB 자동화 모델로 DeepSeek V4 Flash 수준을 겨냥합니다

Cactus Needle 3는 도구 호출, 구조화 데이터 추출, 임베딩에 특화한 2~20층 소형 모델 계열입니다. 9~29MB CQ2 바이너리와 Raspberry Pi 5에서 최대 4,000 tokens/s 디코딩을 내세우며, 특정 작업에 파인튜닝하면 4층 모델도 DeepSeek V4 Flash와 맞먹는 성능을 낼 수 있다고 설명합니다.

본문

Cactus Needle 3는 범용 대화형 LLM을 대체하려는 모델이라기보다, 정해진 도구를 선택하고 인자를 채우거나 텍스트를 구조화된 데이터로 변환하는 작업에 맞춘 온디바이스 자동화 모델 계열입니다. 입력은 텍스트 프롬프트와 도구 정의 또는 추출 스키마이며, 출력은 도구 호출이나 추출 결과를 담은 구조화된 JSON입니다. 지원 대상은 스마트홈, 로봇, 휴대폰, 웨어러블, AR 글래스, 자동차, 컴퓨터 제어와 로컬 검색·매칭입니다.

도구 호출과 구조화 추출

도구 호출에서는 애플리케이션이 노출한 함수 목록을 보고 사용자의 요청에 맞는 함수를 선택하며, 각 인자를 사용자의 발화에서 채웁니다. 예를 들어 두 가지 작업을 요청하면 두 개의 호출을 순서대로 만들고, 등록된 도구가 처리할 수 없는 요청이면 추측하지 않고 빈 목록을 반환한다고 설명합니다. 개발자는 Python 함수에 needle.tool 데코레이터를 붙이고, 함수 시그니처로 인자 타입을 제공하며, docstring으로 도구의 동작을 설명합니다. Needle의 run() 또는 complete()가 모델의 선택, 함수 실행, 실행 결과를 다시 모델에 전달하는 과정을 연결합니다.

구조화 추출에서는 개발자가 원하는 데이터 형태를 선언한 뒤 비정형 텍스트를 넣습니다. 예를 들어 Pydantic의 Invoice 모델에 vendor, total, due_date 필드를 선언하고 청구서 문장을 전달하면, Needle이 타입이 지정된 객체를 반환합니다. 문서에서는 디코드 grammar가 결과가 스키마에 맞게 파싱되도록 보장한다고 설명하며, 이 추출 기능이 분류 문제에도 일반화됐다고 밝힙니다. 같은 모델은 문장 임베딩도 반환하므로, 메모·메시지·문서의 의미 검색, 요청과 수백 개 도구 중 가장 가까운 도구의 매칭, 중복 알림 병합을 기기 내부에서 수행할 수 있습니다.

모델 구조와 성능 수치

Needle 3의 핵심은 intelligence laddering입니다. 각 계층이 단조롭게 용량이 증가하는 하위 네트워크로 구성되며, 개발자는 2층부터 20층까지 작업에 맞는 크기를 고를 수 있습니다. 모델은 29M~121M 파라미터 규모의 Laddered Simple Attention Networks이고, 배포 바이너리는 CQ2 2비트 양자화를 사용해 9~29MB로 제공됩니다. 학습에는 360B 토큰 규모의 proprietary structured dataset을 사용했다고 합니다.

원문은 각 하위 네트워크를 파인튜닝할 수 있으며, downstream task에 한 epoch만 튜닝해도 4층 모델이 DeepSeek V4 Flash와 맞먹을 수 있다고 설명합니다. Cactus의 DroidCall 작업에서는 파인튜닝을 통해 모든 하위 네트워크의 점수가 18~36포인트 상승했고, 4층 이상 튜닝된 하위 네트워크가 29M 파라미터부터 DeepSeek V4 Flash를 통과한다고 제시합니다. 여기서 강조하는 방식은 모델을 크게 만드는 것이 아니라, 특정 제품의 도구와 작업으로 용량을 제한하고 해당 작업에 맞춰 튜닝하는 것입니다.

속도는 Raspberry Pi 5 기준으로 디코딩 400~4,000 tokens/s, 프리필 1,000~10,000 tokens/s로 제시합니다. 실제 응답 객체에는 호출 유형, 성공 여부, 오류 정보, function_calls, suppressed_calls, reasoning, confidence, prefill_tps, decode_tps, peak_ram_mb가 포함됩니다. 예시 응답에서는 confidence 0.94, prefill 4,300 tokens/s, decode 850 tokens/s, 피크 메모리 28.5MB를 보여줍니다.

신뢰도 게이팅과 라우팅

모든 응답에는 calibrated head가 계산한 confidence 점수가 포함되며, 엔진은 기본적으로 0.1의 하한선을 적용합니다. 점수가 하한선보다 낮으면 호출을 suppressed_calls에 보류하고 function_calls는 비워 둡니다. 개발자는 점수가 높을 때 즉시 실행하고, 중간이면 모델이 선택한 호출과 reasoning을 사용자에게 보여 확인을 받은 뒤 실행하며, 호출이 전혀 없으면 해당 요청을 처리할 수 없다고 안내하는 흐름을 구성할 수 있습니다.

특정 의도가 반드시 도구에 도달해야 한다면 정규식 triggers를 추가할 수 있습니다. 트리거가 요청과 일치하면 디코드 대상이 일치한 도구로 제한되고 호출이 요구되므로, confidence floor 아래에서도 호출이 전송됩니다. 다만 이 경우에도 confidence 점수를 보고 즉시 실행할지 확인을 요구할지 결정할 수 있습니다. 여러 도구가 등록된 환경에서는 포괄적인 도구가 다른 도구의 명사를 가로채지 않도록 정규식을 작성해야 하며, 한 번의 요청에 등록하는 도구 수를 줄이는 것도 오배치를 줄이는 방법으로 제시합니다.

도구 설명은 모델이 스키마를 문자 그대로 읽기 때문에 중요합니다. 넓은 범주의 도구 하나보다 동작 하나를 설명하는 좁은 도구가 유리하고, enum 값은 사용자가 실제로 말할 법한 표현으로 정해야 합니다. 동의어는 설명에 포함하고, 요청에서 빠질 수 있는 값에는 기본값을 두며, 근거가 없는 필수 인자는 추측하지 않고 호출을 보류합니다. 값의 형식도 설명에 명시하고, 항상 호출되어야 하는 의도에는 triggers를 추가하라고 안내합니다.

파인튜닝과 배포

빠르게 시작하려면 Python 패키지를 설치하면 됩니다. 추론 엔진은 Hugging Face에서 한 번 받아 캐시하며 별도의 빌드 과정은 필요하지 않습니다. 파인튜닝은 동결된 20층 기본 모델에 LoRA를 적용한 뒤 adapter.safetensors를 만들고, 이를 4비트 cact 아카이브로 빌드하는 방식입니다. 이후 같은 엔진에서 2층 등 원하는 하위 네트워크를 선택해 특정 장치에 맞는 배포물을 만들 수 있습니다.

배포 대상에는 macOS, Linux의 x86_64·ARM·ARMv7·RISC-V·MIPS 계열, Windows, Android, iOS, tvOS, watchOS, Browser용 WASM, WASI component가 포함됩니다. 각 대상에는 1MB 이하의 미리 빌드된 엔진이 제공되며, needle build 명령이 플랫폼용 엔진을 내려받고 needle3.cact 가중치를 엔진 옆에 배치합니다. 전체 20층 모델뿐 아니라 Pi용 8층처럼 더 작은 하위 네트워크도 선택할 수 있습니다. Cactus는 자체 데이터셋, 2비트 양자화, 평가 설계와 추적, 전체 깊이 파인튜닝, 데이터셋 관리까지 포함한 Cactus Platform을 함께 제시합니다.

Hacker News 반응

  • @mihau — 제가 시도한 쿼리는 하나도 작동하지 않았습니다: ‘more light’, ‘less light’, ‘both doors should be locked’, ‘if blinds are open, open back door’입니다.
  • @HenryNdubuaku — 실제로 감사합니다. 그러니까 데모는 프리셋이고, 도구 설명을 수정하거나 원하는 방식으로 사용 가능한 도구를 추가할 수 있다는 뜻입니다. 그렇지 않으면 Needle은 false negative를 강하게 방어합니다. 사용자들이 이를 요청했습니다. 이 부분은 저희가 프리셋을 업데이트하겠습니다.
  • @hirako2000 — 작은 모델이 LLM을 능가한다는 의심스러운 주장이 점점 늘어나면, 유용한 혁신이 모두 묻힐 수 있다는 생각입니다. 리소스 요구량보다 더 중요한 것은 모델이 범용 LLM이라면 꽤 잘할 수 있지만 이 모델은 아예 시도할 수 없는 일을 분명히 밝히는 것입니다. 다시 말해 제가 직접 알아내야 하지 않도록 anti-use case를 명확히 알려 달라는 뜻입니다.
  • @HenryNdubuaku — 중요한 지적입니다. Needle은 task-specific model이고, bullet 6에서도 좁은 작업 집합에서만 잘하도록 학습됐다고 강조했지만, 이 점을 더 명확히 설명할 수 있었던 것 같습니다.
  • @owebmaster — AI를 사용해 답변하지 않았다면 더 명확했을 것입니다.

원문: Cactus Compute / 번역·요약: Trawling

참고 자료

오류 제보