스크립트
00:00:00こちらは「Needle 2」です。14MBのArgentic LLMモデルで、聞き逃した方のために繰り返します。
00:00:07サイズは14MBで、4500万のパラメータを持っています。要するに、このLLMは非常に小さいため、
00:00:14ベアメタルのESP32-S3に至るまで、あらゆるエッジデバイスで実際に実行可能です。これはCactus Computeが開発し、
00:00:21現在はApache 2.0ライセンスでオープンソースとして公開されているもので、実際に自分でテストしたところ、
00:00:28ちゃんと動作しました。そこで今回の動画では、Needle 2を取り上げてその仕組みを確認し、
00:00:34実際のマイクロコントローラ上でいくつかの面白い推論テストを実行して、そのパフォーマンスを見ていきます。
00:00:40非常に面白そうなので、早速詳しく見ていきましょう。数週間前、別の動画で2900万パラメータのモデルを
00:00:49ESP32-S3にデプロイしたのですが、それは本格的なLLMというよりは一種のギミックのようなものでした。
00:00:56中身が非常に簡素で、子供向けのお話だけでトレーニングされていたため、それ以外の出力ができなかったからです。
00:01:03しかし、今回のLLMは、コンテキストを理解する実際のモデルです。ただ、あまり期待しすぎる前に、
00:01:10注意点があります。これは通常のチャットボット用LLMではありません。そうではなく、
00:01:16このモデルはツールコールディスパッチャーとして機能するように特化して作られています。仕組みとしては、
00:01:22あらかじめ一連のツールコールを定義しておきます。それはサーボの回転から、思い付く限りのその他の機械的・
00:01:29実行可能な操作まで何でも構いません。そして、自然言語でモデルにプロンプトを入力すると、
00:01:35あなたのコマンドに基づいて、どのツールコールを実行すべきかを賢く理解してくれます。要するに、
00:01:40そういうことなのです。さて、これが本当にすごいのは、Raspberry Pi 5のようなボード上では
00:01:47秒間最大500トークンを達成できるため、例えばロボット工学プロジェクトなどの非常に効率的なドライバーになり得るところです。しかし、より大きく高性能なデバイスにおいて、
00:01:55Needle 2は実際にチャットボットとして動作するのでしょうか?答えは「いいえ」です。速度の問題というわけではなく、
00:02:04Needleは一般的な知識や会話についてまったくトレーニングされていないからです。そのトレーニングデータのすべては、
00:02:10スマートホームのコマンド、モバイルでの操作、ウェアラブルでの操作といったデバイスのアクションです。そのため、
00:02:17高性能なデバイスであっても、「フランスの首都はどこですか?」と尋ねても答えることはできません。
00:02:23適切な関数を選び出し、正しい引数を埋めることに関しては非常に優れていますが、それだけです。そしてそれこそが、
00:02:28ここまで小さくするために彼らが受け入れなければならなかったトレードオフなのです。では、
00:02:335倍から7倍大きなモデルに匹敵する4500万パラメータを、どのようにして実現したのかについて話しましょう。
00:02:40通常、モデルをここまで縮小すると単に性能が落ちてしまいます。しかしCactusはそれを望まなかったため、
00:02:47アーキテクチャの一部をゼロから再構築しました。大きな変更点は、「エングラム(engram)」と呼ばれるものです。
00:02:53通常、モデルのすべての知識はその重みに存在しており、トークンごとにそのすべての重みを
00:02:59行列乗算に通す必要がありますが、それはコストがかかります。しかしCactusは、その知識の一部を
00:03:06ハッシュ化されたルックアップテーブルに移行しました。これにより、モデルは数学的計算を行う代わりに、
00:03:12メモリの行を直接取得できるようになります。また、通常のMLP層をアダマール変換に基づくものに置き換えました。
00:03:19これは学習可能なパラメータがほとんど含まれていない固定の数学的演算です。通常、
00:03:25このミキシングのステップは、モデルがゼロから学習しなければならない巨大な行列によって行われます。
00:03:32そしてそれは小型モデルのパラメータ予算の大部分を食いつぶします。しかし、アダマール変換は固定された数式であり、
00:03:38すべてのミキシングを自動で行ってくれるため、こうした学習をすべてスキップできます。そのため、
00:03:44Cactusは4500万のパラメータを消費することなくその恩恵を得られます。そして量子化ですが、
00:03:50正直なところ、これこそが全体のデプロイを可能にしている要素です。Needle 2は重みあたり2ビットで動作し、
00:03:57後から量子化されたのではなく、実際に2ビットでトレーニングされました。問題は、多くの小型モデルは
00:04:03トレーニング後に圧縮すると破綻してしまう点です。なぜなら、そのような圧縮に耐えるように作られていないからです。
00:04:09しかしNeedleは最初から自身の圧縮を前提としてトレーニングされているため、デフォルトのバージョンですでに最適化されています。では、
00:04:16これらは実際に通用するのでしょうか?Cactus自身のベンチマークによると、Needle 2は
00:04:235倍のサイズのモデルと真剣勝負を繰り広げており、いくつかの難しいツール呼び出しテストでは、
00:04:30LFMの2.5の完全な16ビット精度に対し、2ビット精度で動作しているにもかかわらず、実際に打ち勝っています。
00:04:38そしてモバイル操作のベンチマークでは、Needleは98.3%の確率で正しい関数名を選択しており、
00:04:45これは比較されたすべてのモデルの中で最も高い数値です。すべての面で完璧というわけではありませんが、
00:04:51実際に作られた目的においては、本当に優れています。それでは、実際にどのように動作するか試してみましょう。
00:04:57この目的のために、まさにこのボード(ESP32-S3)上で実行される独自のカスタム推論エンジンを構築しました。
00:05:05ご自身で試してみたい場合は、下の説明欄にGitHubリポジトリのリンクを貼っておきます。さて、
00:05:10ターミナルを見ると、小さなTUIアプリケーションが表示されています。これで、自然言語のリクエストを
00:05:17入力して動作を確認できます。まずは簡単なプロンプトから始めてみましょう。「赤いライトを3秒間点滅させる」
00:05:25という指示を出します。これを実行するとすぐに、フラッシュチップからモデルを直接マッピングし、
00:05:32ワーキングメモリをセットアップしているのがわかります。それが完了すると、推論フェーズに移行します。
00:05:39色として「赤」、モードとして「点滅」が特定され、さらに3秒間実行する必要があることも識別されているのが確認できます。
00:05:48推論フェーズが完了すると、実際のツールコールの記述に進みます。
00:05:53ESP32上では動作が遅いため、これには少し時間がかかります。しかし、それでもこれは非常にクールです。
00:06:00ご覧ください、このようにして赤いライトが3秒間点滅します。また、この特定のツールコールに対して
00:06:08どれほど確信を持っていたかを示す信頼度スコアが得られることも確認できます。
00:06:15これはNeedle 2に組み込まれている機能です。この信頼度スコアに基づいて、
00:06:21さまざまなシナリオに応じてチップをプログラムできるため、非常に優れています。ご覧いただいたように、
00:06:27完了までに約39秒かかりました。これは遅く聞こえるかもしれませんが、GPUなしで8MBのマイクロコントローラ上で
00:06:35動作している4500万パラメータのモデルであることを覚えておいてください。では、
00:06:41全く文脈外の質問をしたらどうなるか見てみましょう。「フランスの首都はどこですか?」と尋ねてみます。
00:06:48ここでご覧の通り、再びリクエストを読み込んでいます。そして推論フェーズでは、
00:06:54国の事実に関する利用可能なツールがないため、ツールコールは空になると述べられています。
00:07:00そしてご覧ください、このプロンプトに基づいて確信を持って実行できるツールはないと非常に確信していました。
00:07:07そのため、これは依然として非常に知的な応答だと言えます。今度は、「紫色のライトを7秒間点灯させる」
00:07:14と頼んでみましょう。それが理解できるか見てみます。色が確かに紫色であることを識別し、
00:07:21点灯(shine)が点滅ではなくソリッド(常時点灯)のモードでなければならないことを理解しています。
00:07:29さらに、それが7秒間でなければならないことも理解しています。そして実際のツールコールの記述に進みます。
00:07:36それが完了すると、ご覧の通りです。現在、紫色のライトが点灯しています。7秒間のはずです。
00:07:46どうですか?すごいでしょう?興味深いことに、今回はそれほど確信度が高くありませんでした。
00:07:52信頼度スコアは0.57でしたが、それでもタスクの推論を適切に行い、要求した通りに実行することに成功しました。
00:08:00そしてもうひとつお見せしたいことがあります。このプロジェクトは特に再利用できるように構築しました。
00:08:06そのため、ライトの点滅コマンドを別のものに置き換えることができます。例えば、
00:08:12サーボを使用するロボットプロジェクトがある場合、これらのコマンドを独自のコマンドに基本的に置き換えることができます。
00:08:17その方法についての3ステップのプロセスをプロジェクトのREADMEファイルに文書化しています。
00:08:24ご自身のプロジェクトで再利用したい場合は、その3つのステップに従うだけで準備完了です。別のバリエーションも試してみましょう。
00:08:29「黄色のライトを5秒間表示する」。これで実行されます。黄色のライトが5秒間点滅しています。
00:08:36これは全体の中で最も低い信頼度スコア、0.46を記録しました。
00:08:42「表示する(displaying)」という意味を、長時間にわたって表示し続けるのではなく、ライトを点滅させることだと
00:08:50解釈したのが興味深い点です。というわけで、モデルが完璧ではないことがこれで示されます。
00:08:56あなたの意図をまだ誤解することもあるかもしれませんが、それでも黄色のライトを5秒間得ることができました。
00:09:03これらのツールコールのほとんどは、平均して秒間1.86トークンで処理に約40秒かかります。
00:09:10したがって、個人的には非常に素晴らしい結果だと思います。そういうわけで、要するにこれがNeedle 2です。
00:09:164500万パラメータ、14MBのモデルが、約10ドルのチップ上で完全にオフラインで動作します。
00:09:24皆さん、このような技術的解説がお好きでしたら、動画の下にある「いいね」ボタンを押して
00:09:28お知らせください。また、チャンネル登録もお忘れなく。
00:09:33BetterStackのAndrusがお届けしました。次の動画でお会いしましょう。
커뮤니티 글
아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!
이 영상에 대해 글쓰기