世界を動かす技術を、日本語で。

Show HN: Needle: 私たちは「Gemini Tool Calling」を26Mモデルに凝縮しました

概要

  • Needle は26Mパラメータの超軽量関数呼び出し(ツール利用)モデル
  • 完全オープンソース ・MITライセンスで、Mac/PC上でローカルファインチューニング可能
  • FFN(MLP)非搭載 のSimple Attention Network構造、推論速度も高速
  • ツール呼び出し特化 でFunctionGemma等の他小型モデルを上回る性能
  • Cactus 推論エンジン上で動作、スマホ・ウェアラブル等の端末向け設計

Needle: 超軽量ツール呼び出しモデルの全貌

  • Gemini 3.1 を元に、パラメータ数26Mの「Simple Attention Network」へ蒸留
  • Mac/PC上でローカルファインチューニング が可能な設計
  • Cactus 推論エンジン上で動作、6000トークン/秒(prefill)、1200トークン/秒(decode)の高速処理
  • モデル重み・データ生成方法も完全公開 (Cactus-Compute/needle)
  • ネットワーク構成
    • d=512, 8ヘッド/4KV, BPE=8192
    • FFN(フィードフォワード層)非搭載、全層がAttention+Gating
    • Decoder 8層、Encoder 12層、クロスアテンション採用
    • ZCRMSNorm, Masked Self Attn+RoPE, Gated Residual
    • Embeddingは共有、出力はJSON形式でツール呼び出し
  • 事前学習
    • 16 TPU v6eで2000億トークン(27時間)
    • 追加で20億トークン(45分)のシングルショット関数呼び出しデータで後学習
    • データセットはGeminiで合成(タイマー、メッセージ、ナビ、スマートホーム等15カテゴリ)
  • FunctionGemma-270M, Qwen-0.6B, Granite-350M, LFM2.5-350M をシングルショット関数呼び出しタスクで上回る性能
    • ただし、会話的用途では他モデルに軍配
  • 小型モデル特有の繊細さ もあるため、用途ごとにファインチューニング推奨

シンプルアテンションネットワークの特徴と設計思想

  • ツール呼び出し(Tool Call)=情報検索&組み立て
    • クエリ→ツール名のマッチング、引数抽出、JSON生成
    • 本質的に「推論」より「検索・組み立て」作業
  • クロスアテンションが最適解
    • FFNパラメータはこの規模では無駄
    • Attention+Gatingのみで十分な表現力
  • 外部知識(RAG, Tool Use, Retrieval-Augmented Generation)活用タスクにも一般化可能
    • モデル重みに事実を記憶させる必要なし、入力に与えればOK
  • スマホ、ウェアラブル、カスタムハードウェア等のエッジ端末でのAI体験を重視
    • 大規模モデルはオーバースペックとの問題意識
    • 軽量で高速な「エージェント的体験」を実現

利用方法・クイックスタート

  • GitHubリポジトリ: https://github.com/cactus-compute/needle
  • クローン&セットアップ

    • git clone https://github.com/cactus-compute/needle.git
    • cd needle && source ./setup
    • needle playground(Web UI起動、http://127.0.0.1:7860)
  • Python API例

    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,
    )
    print(result)  # [{"name":"get_weather","arguments":{"location":"San Francisco"}}]
    
  • ファインチューニング方法

    • needle playground(Web UIからデータ生成・学習・評価・バンドルまで一括)
    • needle finetune <data.jsonl>(CLIで独自データ学習)
    • needle run --query "..." --tools(単発推論)
    • needle train(フル学習)
    • needle pretrain(事前学習)
    • needle eval --checkpoint <path>(評価)
    • needle tokenize(データセットのトークナイズ)
    • needle generate-data(Gemini経由で合成データ生成)
    • needle tpu <action>(TPU管理)

Cactus推論エンジンとエコシステム

  • Cactus: スクラッチから開発された推論エンジン
    • モバイル、ウェアラブル、カスタムハードウェア向け最適化
    • 詳細:https://github.com/cactus-compute/cactus
    • Cactus関連紹介記事:https://news.ycombinator.com/item?id=44524544
  • MITライセンス で利用・改変自由
  • モデル重み: https://huggingface.co/Cactus-Compute/needle
  • コミュニティ参加・貢献歓迎

まとめと今後の展望

  • Needle は「ツール呼び出し特化」の超軽量AIモデル
  • エッジ端末でのAI体験刷新 を目指すCactusプロジェクトの一部
  • FFN不要論 はRAGやTool Use等の他タスクにも波及可能性
  • さらなる実験・結果公開予定
  • 開発者・研究者によるテスト・ファインチューニングを推奨

Hackerたちの意見

アクセスを開放する必要があるみたいだね。https://huggingface.co/Cactus-Compute/datasets/needle-tokeni... で、READMEの手順を実行しようとしたら、こんなエラーが出たよ。 > リポジトリが見つかりません: https://huggingface.co/api/datasets/Cactus-Compute/needle-tokenizer/revision/main。

今は直ったよ、ごめんね!

うーん、これで自然言語で引数を指定できるコマンドラインプログラムを作るのが現実的になるかも。もちろん、14MBの追加と「パース」の計算を含めることに反対する人もいるだろうし、みんながそれを始めたら結構大変かもしれないけど。今それが可能かもしれないってのは本当に面白いね。プログラムの使い方を理解するファインチューニングされたモデルを含めることができるし。例えば、> toolcli what can you dotoolcli --help summary を実行するし、toolcli add tom to teamfutz grouptoolcli --gadd teamfutz tom になる。

だから、NeedleはINT4で訓練されてるんだ。プレイグラウンドで見えるのもINT4で、サイズは14MBだけど、同じ課題があるね。

提案なんだけど、「needle playground」のライブデモを公開したらどうかな。結構小さいから、どこかの小さなVPSで運用するのも安く済むはずだよ!

ありがとう、そうなんだよね、問題はスケールの扱いなんだ。インフラがまだ整ってないけど、誰でもできることだし。人々が自分のノートパソコンで簡単に実行できるから、VPSのルートを試してみるよ。

WebGPUを使えば、すぐに簡単にできるはずだよ。

MとBの違いは微妙すぎるね。0.026Bが俺の提案だよ。

ハハ、あまり手を抜かないように頑張ってたんだよね :)

MとBの違いに気づかないのは、あなたの問題って感じだね(ソフトウェアエンジニアなのに)。

ここでのアイデアは、機能呼び出しがないモデルにそれを追加すること?それとも、機能呼び出しを改善すること(qwenのクセ)?

それは、安いデバイスでローカルに動かせる機能呼び出しができる小さなモデルなんだ。

これが何のためなのか、あまり理解できないな… GHページにはモデルのアーキテクチャについてML研究者の話がたくさんあるけど、どう使えばいいの?Kimi 2.7やClaude Haiku、Gemini Flash 3.1 liteの代わりになるの?主にツール呼び出し(コーディングや会話AI)に使う会話型LLMなの?

これは、電話やメガネ、時計などのとても小さなデバイスにエージェント機能を組み込むためのものだよ。分かる?

ツール呼び出しができるモデルの中で、唯一混乱してるのは、なんで最悪のものを選んだの?それとも、エージェント作業には悪いけど、一回限りのツール呼び出しには問題ないのかな?

Geminiは1回限りのツール呼び出しにはかなり良いし、値段も手頃だよ。

すごい!アラームをセットして、買い物リストに食材を追加してみたら、Siriよりも優れてたよ。

それ、最高だね!

これ、ホームアシスタントにめっちゃいいと思う。

業界外の人からの素朴な疑問…蒸留モデルって何?なんでGoogleはこれをやらないの?(モデルを小さくするために)Geminiに対抗できるものが作れそうじゃない?

バカな質問なんてないよ!1. 蒸留っていうのは、大きなモデルの知能を小さなモデルに圧縮すること。2. GoogleはFunctionGemmaで既にやってるけど、Needleは私たちの技術を使えば10倍小さいモデルでより良いパフォーマンスが得られるって主張してる。

モデルの蒸留は、大きなモデルを圧縮して小さなモデルを作ることだよ。小さいモデルはディスクのスペースも、ビデオメモリも、計算リソースも少なくて済む(安いハードウェアでOK)。でも、欠点は蒸留モデルが元のモデルと比べて同じベンチマークでパフォーマンスが劣ることだね。