HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

8ドルのESP32-S3で学習させたSLM

An SLM trained on $8 ESP32-S3 (github.com)

53 pointsby pavelai17 コメント

要約

この記事は、わずか8ドルのESP32-S3マイクロコントローラー上で、ゼロから小規模言語モデル(SLM)を学習させる実験について解説しています。通常、モデル学習には高性能なGPUやデータセンターが必要と考えられていますが、本プロジェクトでは、限られたメモリと計算能力を持つ安価なチップで、言語の構造を学習させる可能性を示しています。学習対象には、構造が明確でコーパスが比較的小さいクリンゴン語が選ばれました。

全文翻訳

このテキストはAIの支援を受けて書かれました。注意:支援とは、AIが書いたという意味ではありません。AIが修正、レビューし、一部を補完しましたが、著者は人間です(少なくとも私はそう信じています)。スペイン語で読む Qapla' プロジェクト これは、8ドルのESP32-S3でトランスフォーマーをゼロから学習させる方法です。(クリンゴンの)GPTは誰も求めていませんでしたが、誰もが必要としていたものです。そして、なぜ私たちが必要としたのでしょうか?モデルの学習にはGPUやデータセンターが必要だと当然のように考えていますが、そうとは限りません。時には、8ドルのような小さくて安価なマイクロコントローラーでも、ゼロから学習させるのに十分なのです。もう一度読み直してください:学習です。ゼロから。事前に調理されたモデルを実行するのではなく。学習です。フォワードパス、バックプロパゲーション、重み更新をチップ内部で行います。Qapla'とは何でしょうか?エッジAIは新しいものではありません。TinyMLは何年も前からマイクロコントローラーで推論を行ってきました。Andrej Karpathyのミニマリストプロジェクトであるllama2.cのコミュニティポートは、約26万パラメータのトランスフォーマーをESP32に搭載し、最近では素晴らしいプロジェクトが2900万パラメータ近いモデルを8ドルのESP32-S3で動作させました。これらは素晴らしい成果ですが、この実験と時期が重なったとはいえ、私たちがモデルとしたものではありません。Slava S.(slvDev)によるesp32-aiプロジェクトや、それに類するプロジェクトは、すべて一つの共通点があります。それは推論であるということです。モデルはどこか別の場所(GPU、データセンター)で生まれ、そのデータで学習され、量子化されてからチップにロードされ、実行されます。脳は外部で調理され、チップ上で提供されます。私たちは異なる問いを立てました。モデルが外部で生まれない場合はどうなるのか?学習に必要なデータがデバイスが設置されるまで存在せず、そのデータを持てず、ダウンロードするインターネットもない場合、事前に学習できない場合はどうなるのか?皆さんが考えていることは分かっています。「なるほど、でも…誰がESP32でトランスフォーマーを学習させる必要があるんだ?」それはもっともな質問です。おそらく答えは「全く理由はない」でしょう。しかし…創造的になるなら、こう想像してみてください。農機具の真ん中に取り付けられたセンサーが、その特定の機械(世界中のどの機械とも異なる)の通常の振動を学習し、何かがおかしくなったときに検知して、壊れる前にメンテナンスをスケジュールする必要がある(そして、私が言い逃れることは許しません。インターネットがないと言いましたが…LoRaは?)。あるいは、ある土地のセンサーが、その特定の土壌がどのように乾燥するか(その土、その太陽、その排水)を学習し、植物が苦しむ前に水やりが必要になる時期を予測する。これらの場合(そして、私たちが考えられる他の場合)では、デバイスが設置されるまでデータは存在しませんでした。誰も事前に学習させることはできませんでした。チップは、その場で、一人で、立っている場所で学習しなければなりません。実験のために農機具が手元にあるわけではありません。そこで、ESP32の実際の学習能力をテストするために、手元にある唯一のもの、つまり言語を中心に実験を設計しました。8ドルのチップは、誰の助けも借りずに、ゼロから言語を学習してどこまで到達できるでしょうか?マイクロコントローラーで学習するとは、実際には何を意味するのでしょうか?8ドルのマイクロコントローラーで学習することは、データセンターにはないゲームのルールを課します。そして、そのルールが他のすべてを決定します:再び、メモリが支配します。ESP32-S3には数MBのRAM/PSRAMしかなく、ギガバイトはありません。これにより、モデルのサイズが制限されます。数百万ではなく、数万パラメータの話です。チップ上で「フィット」し、学習するモデルは、必然的に小さくなります。このサイズのモデルは、言語の構造(単語の作り方、音韻論、文法の一部)を学習できますが、言語全体の深い意味までは学習できません。タスクはモデルのサイズに合わせてカットする必要があります。そして、コーパスが結果を支配します。小さなモデルでは、ギガバイトのテキストは必要ありません。コンパクトでクリーンで構造化されたコーパスが必要です。そして、公開するのであれば、著作権の問題がないものが必要です。これら3つの制約(小さなモデル、狭いタスク、クリーンでコンパクトなコーパス)を組み合わせると、具体的な質問になります。一度にすべてを満たす言語はどれでしょうか?この最初の段階で、どの言語で実験するかを決定するためにブレインストーミングセッションを行ったと言えますが、時には古い「最初のアイデアが通常は良いアイデア」という言葉に従う方が良いこともあります…そして、この特定のケースでは、最初に思いついた言語は…クリンゴン語でした。クリンゴン語はい、クリンゴン語です。スター・トレックの戦士たちの言語です。そして、読み進めると、その選択は、見た目よりもエンジニアリングに基づいていることがわかります。クリンゴン語は、エイリアンが発するような音を吐き出して終わりという、意味不明な言葉ではありません。1984年に言語学者マーク・オクランドによって創造されたもので、体系的な音韻論、文法、形態論を持つ人工言語です。珍しい語順(目的語-動詞-主語)と厳格な規則を持つ形態論を持っています。つまり、学習すべき実際の構造があり、これは小さなモデルが単にノイズを記憶しているのではなく、本当に学習していることを証明するために必要なものです。そして、私たちの制約を満たしています:豊かな構造、限られた語彙。モデルが捉えるのに十分な文法がありますが、マイクロコントローラーのルールに収まるほど小さなコーパスです。縮小されたアルファベット。文字ごとに作業すると、約30の記号の語彙によりモデルは非常に小さくなります。これはESP32のメモリが要求するものにぴったりです。クリーンで無料のコーパス。オープンライセンス(boQwI')の下にあるコミュニティ辞書があるため、法的な領域を踏み越えることなく学習および共有できます。言い換えれば、クリンゴン語は理想的なテストベッドです。実際の言語、実際の文法を持ちながら、手のひらに収まるサイズです。おそらくプロジェクトの別の段階で、実際の少数言語、実際の話者を持つ言語に移行する前に、エンジンを絞り込むのに最適な実験室です。サーミ語?ケチュア語?ナワトル語?それは…また別の話です。ああ、そしてはい:間違いなくクールです。1.3インチOLEDでクリンゴン語を囁く低コストチップには、オタク的な要素と魔法のような要素の両方があります。しかし、それは…単なるボーナスです。qapla'。(「成功」を意味するクリンゴン語。適切な名前だと思いました。)それが何ではないか(正直に言いましょう)誰も誤解しないように、そして厳密さが重要なので:これはポケットChatGPTではありません。チャットしたり、質問に答えたり、推論したりしません。これは、意味ではなく、言語の形状を学習する小さな生成モデルです。意味的に完璧なクリンゴン語を生成するわけではありません。構造(接頭辞、接尾辞、語順、フレーズの響き)を学習し、クリンゴン語のように見え、その多くの規則を尊重するテキストを生成します。しかし、クリンゴンの学者も文句なしに承認するような、完全に意味のある文章を期待しないでください(エンタープライズ号の誰かが私たちのESP32からメッセージを受け取った場合、それはおそらく外交問題を引き起こすでしょう)。いずれにせよ、世界にはそれを実現するのに十分なクリンゴン語はなく、必要なモデルもチップに収まりません。これは隠れ蓑の推論ではありません。どこにも事前学習済みのモデルはありません。チップはランダムな重みとクリンゴン語に関する事前の知識なしに開始し、ゼロから学習します。あなたが見ているのは、どこかで調理されてここで提供されたモデルではなく、実際の学習です。これは高速ではありません。真面目に言いましょう:何度も言いましたが…これはGPUではなく、8ドルのマイクロコントローラーです!学習には数時間かかります。まさにそれがポイントです。遅いのに、それでも機能することです。これは何であるか:謙虚なマイクロコントローラーが、メーカーの精神を持って、完全にオンボードで、ゼロから言語モデルを学習できることの証明です。それ以上でも、それ以下でもありません。それは決して小さなことではありません。仕組みが重要であり、コードで自分で確認できることです。学習サイクル全体がオンボードで発生します:ESP32-S3内部:✓重みのランダム初期化(シードに注意、あーむ)✓コーパスの読み込みとトークン化✓フォワードパス✓損失計算(クロスエントロピー)✓バックプロパゲーション(手動で導出した勾配)✓重み更新(SGD with momentum + cosine LR)✓フラッシュへのチェックポイント保存(LittleFS)✓学習済み重みによるテキスト生成