>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
Python

スマートグラスにAIを組み込むのにラグで頭を悩ませない方法

スマートグラスやスマートウォッチのソフトウェアを構築しているとしましょう。デバイスに音声コマンドを理解させる必要があります。「電気を消して」「明日のセントペテルブルクの天気は?」「テーブルを予約して」といった具合です。通常であれば、GeminiやGPT-4のような大規模言語モデルのAPIを呼び出すでしょう。しかし、問題が発生します。数秒のレイテンシがユーザー体験全体を台無しにし、トークンのコストがユーザー数の増加よりも急速に膨れ上がるのです。

Cactus Computeチームは、異なるアプローチを取ることを決意しました。彼らは巨大なGemini 1.5から得た知識を「 Needle」という小さなモデルに「転移」しました。Needleのパラメータ数はわずか2600万です。比較のために言えば、これはLlama-3-8BやQwen-0.5Bのような人気の「小型」モデルよりも数百倍小さいサイズです。

Logo

この小型モデルできること

Needleは人生の意義について議論するチャットボットではありません。関数呼び出し(Function Calling)専用の狭い目的のツールです。ユーザーの自然言語のリクエストを受け取り、あなたのコードが理解できる構造化されたJSONに変換します。

ここでの主な特徴は速度です。彼ら自身のインフラストラクチャでは、モデルがプリフィルで秒間6,000トークン、生成で1,200トークンという驚異的な速度を達成しています。しかし、たとえ通常のMacBookでローカルに実行しても、実質的に瞬時に動作します。

Needleを興味深いプロジェクトにしているポイントをいくつか紹介します:

  • このモデルは2000億トークンで訓練されています。このサイズとしては真剣な量です。
  • エッジコンピューティングに最適化されています——スマートフォン、ウェアラブル、IoTデバイス向けです。
  • 便利なPlaygroundが付属しており、数クリックで特定のツール向けにモデルをファインチューニングできます。

内部での動作仕組み

アーキテクチャはSimple Attention Networkと呼ばれています。Authorsがリポジトリに残した図を見ると、かなりエレガントなソリューションであることがわかります。

モデルは12層のエンコーダと8層のデコーダで構成されています。興味深いことに、エンコーダには従来のFeed-Forward Networks(FFN)がありません——Self-AttentionとGated Residual接続のみです。これにより、メモリと計算リソースを大幅に節約できます。埋め込み重みと出力線形層の重みは結合されており、これは品質を落とさずにモデルサイズを縮小する標準的なテクニックでもあります。

Authorsたちは正直に言っています:Needleは実験です。関数呼び出しタスクではFunctionGemma-270mやQwen-0.6Bより優れていますが、通常の会話では及びません。小型モデルは世界の「記憶」が少ないため、複雑な脱線した質問で混乱させることが很容易です。

クイックスタートとファインチューニング

プロジェクトのデプロイは非常に簡単です。リポジトリをクローンしてセットアップスクリプトを実行した後、コマンドneedle playgroundでWebインターフェースが開きます。そこでは自分の例でモデルをすぐにテストできます。

PythonプロジェクトにNeedleを組み込む必要がある場合、コードは馴染みのあるものになります:

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="Сколько градусов сейчас в Сочи?",
    tools='[{"name":"get_weather","description":"Узнать погоду в городе.","parameters":{"location":{"type":"string","description":"Название города."}}}]'
)
print(result)
# [{"name":"get_weather","arguments":{"location":"Сочи"}}]

最も価値のある点は、ファインチューニングのシンプルさです。特定のAPIがある場合、それらでNeedleを「訓練」できます。Authorsたちは過学習を避けるためにツールごとに少なくとも120の例を準備することを推奨しています。リポジトリには、「古い」Geminiを使ってそのようなデータを生成するスクリプトさえあります。

試してみるべき人

私は、プライバシーとオフライン動作が重要なプロジェクトでNeedleを活用できると考えています。例えば、の会話をクラウドに送信したくないスマートホームシステムや、音声で複雑なインターフェースを制御するモバイルアプリなどがそうです。

もちろん、2600万パラメータには限界があります。エッセイを書いたり、複雑な技術テキストを翻訳したりすることはできません。しかし、ユーザーの意図——「それを消して」や「木曜日の会議をスケジュールして」——を理解するというタスクであれば、Needleは他のどのモデルよりも高速かつ低コストで処理できます。

プロジェクトはオープンソースで、重みはHugging Faceにあり、MITライセンスにより商用製品での使用が許可されています。マイクロコントローラーや古いスマートフォンにAIを追加する方法を探していたなら——これはテストに最適な候補です。

関連プロジェクト