「エキスパートのミックスについて解説」
「美容・ファッションのエキスパートがミックスについて解説」
ミクストラル8x7Bのリリース(発表、モデルカード)により、トランスフォーマのクラスがオープンAIコミュニティで最も話題となっています。それがエキスパートの混合(Mixture of Experts、略してMoEs)です。このブログ記事では、MoEsの構成要素、トレーニング方法、および推論時の考慮事項について見ていきます。
さあ、深く掘り下げてみましょう!
目次
- ミクストラルとは何ですか?
- MoEsの簡潔な歴史
- スパース性とは何ですか?
- MoEsのトークンのロードバランシング
- MoEsとトランスフォーマ
- スイッチトランスフォーマ
- ルータZ損失によるトレーニングの安定化
- エキスパートは何を学ぶのですか?
- エキスパートの数をスケーリングすると事前トレーニングにどのような影響を与えるのですか?
- MoEsの微調整
- スパースMoEsと密なモデルの使用時期はいつですか?
- MoEsを効果的に活用するために
- オープンソースのMoEs
- ワークのエキサイティングな方向性
- いくつかのリソース
要約
MoEs:
- 密なモデルに比べてより高速に事前学習できます
- 同じパラメータ数のモデルと比較して、より高速に推論できます
- すべてのエキスパートをメモリに読み込むため、高いVRAMが必要です
- 微調整に多くの課題がありますが、MoE 最新の研究では、MoEの指示調整が有望です
さあ、突入しましょう!
- ハグ顔(Hugging Face)での最新技術の組み合わせであるミクストラル(Mixtral)へようこそ
- 「NVIDIAがゲームチェンジャーとマーケットメーカーへの投資でAI革命を推進する方法」
- 「スピークAI転写ソフトウェアのレビュー(2023年12月)」
Mixture of Experts(MoE)とは何ですか?
モデルのスケールは、モデルの品質を向上させるための最も重要な要素の1つです。固定された計算予算のもとで、ステップ数が少ない大きなモデルを訓練する方が、ステップ数が多い小さなモデルを訓練するよりも良い結果を得ることができます。
エキスパートの混合(Mixture of Experts)では、モデルをはるかに少ない計算コストで事前訓練することができます。これにより、密なモデルと同じ計算予算で、モデルまたはデータセットのサイズを劇的に拡大することができます。特に、MoEモデルは事前訓練中に密なカウンターパートと同じ品質をより速く達成するはずです。
では、MoEとは具体的にどのようなものなのでしょうか?トランスフォーマーモデルのコンテキストにおけるMoEは、2つの主要な要素から構成されます:
- 疎なMoEレイヤー:密なフィードフォワードネットワーク(FFN)レイヤーの代わりに使用されます。MoEレイヤーは一定の数の「エキスパート」(たとえば8つ)を持ち、各エキスパートはニューラルネットワークです。実際には、エキスパートはFFNですが、より複雑なネットワークまたはMoE自体である場合もあり、階層的なMoEを導くことも可能です!
- ゲートネットワークまたはルーター:どのトークンをどのエキスパートに送信するかを決定します。たとえば、下の画像の場合、「More」というトークンは2番目のエキスパートに送信され、「Parameters」というトークンは最初のネットワークに送信されます。後で詳しく調べるように、1つのトークンを複数のエキスパートに送信することもできます。トークンをエキスパートにルーティングする方法は、MoEと一緒に作業する際の重要な決定の1つです。ルーターは学習されたパラメータから構成されており、他のネットワークと同時に事前訓練されます。
したがって、MoEでは、トランスフォーマーモデルのすべてのFFNレイヤーをMoEレイヤーに置き換えます。これは、ゲートネットワークと一定数のエキスパートで構成されています。
MoEは密なモデルと比較して、効率的な事前訓練と高速な推論という利点を提供しますが、以下のような課題もあります:
- 訓練:MoEは計算効率が非常に高い事前訓練を可能にしますが、過学習を引き起こすために微調整中に一般化が難しいという問題があります。
- 推論:MoEは多くのパラメータを持つ場合でも、推論中には一部のパラメータしか使用されません。これにより、同じ数のパラメータを持つ密なモデルと比較して、はるかに高速な推論が可能になります。ただし、すべてのパラメータをRAMに読み込む必要があるため、メモリの要件が高くなります。たとえば、Mixtral 8x7BのようなMoEがある場合、密な47Bパラメータモデルを保持するのに十分なVRAMが必要です。なぜ14Bモデルではなく47Bパラメータが必要なのでしょうか?それは、MoEモデルでは、FFNレイヤーのみが個別のエキスパートとして扱われ、モデルの残りのパラメータは共有されるためです。同時に、トークンごとに2つのエキスパートが使用されると仮定すると、推論速度(FLOPs)は12Bモデルの使用に似ています(14Bモデルではなく)、2つの7B行列乗算が計算されますが、一部の層は共有されています(後ほど詳しく説明します)。
MoEの大まかなアイデアがわかったので、次にその発展につながった研究の歴史を見てみましょう。
MoEの簡単な歴史
MoEのルーツは、1991年の論文Adaptive Mixture of Local Expertsに由来します。このアイデアは、アンサンブルメソッドに類似しており、別々のネットワークから成るシステムの教師あり手続きを持つことで、各ネットワークが異なる訓練ケースのサブセットを処理するようにしました。各別々のネットワーク、またはエキスパートは、入力空間の異なる領域に特化しています。エキスパートはどのように選ばれるのでしょうか?ゲーティングネットワークが各エキスパートの重みを決定します。トレーニング中には、エキスパートとゲーティングの両方がトレーニングされます。
2010年から2015年の間に、後のMoEの進歩に貢献した2つの異なる研究領域がありました:
- 構成要素としての専門家: 伝統的なMoEのセットアップでは、システム全体はゲーティングネットワークと複数の専門家で構成されています。MoEは、SVM、ガウス過程、他の手法においてもモデル全体として探索されています。Eigen、Ranzato、Ilyaによる研究では、MoEをより深いネットワークの要素として探索しています。これにより、モデルを大規模かつ効率的にするために、MoEをマルチレイヤーネットワークのレイヤーとして配置することが可能になりました。
- 条件付き計算: 伝統的なネットワークは、すべての入力データをすべてのレイヤーを通じて処理します。この期間中、Yoshua Bengioは入力トークンに基づいてコンポーネントの動作を動的に活性化または非活性化するアプローチを研究しました。
これらの研究は、NLPの文脈で専門家の混合を探索することにつながりました。具体的には、Shazeerら(2017年、「et al.」にはGeoffrey HintonとJeff Dean、GoogleのChuck Norrisも含まれる)は、このアイデアをスケールして137B LSTM(当時のデファクトのNLPアーキテクチャであり、Schmidhuberが作成した)に導入することで、スパース性を導入し、高スケールでも非常に高速な推論を可能にしました。この研究は翻訳に焦点を当てていますが、高い通信コストとトレーニングの不安定性など、多くの課題に直面しました。
MoEを使用することで、Switch Transformersなどのオープンソースの1.6Tパラメータモデルのトレーニングが可能になりました。MoEはコンピュータビジョンでも探索されましたが、このブログポストではNLPの領域に焦点を当てます。
スパース性とは何ですか?
スパース性は条件付き計算のアイデアを使用します。密なモデルではすべてのパラメータがすべての入力に使用されますが、スパース性を使用することでシステムの一部分のみを実行することができます。
Shazeerによる翻訳のMoEの探索についても詳しく見てみましょう。条件付き計算のアイデア(ネットワークの一部が例ごとにアクティブになる)により、計算を増やすことなくモデルのサイズをスケーリングすることができ、その結果、各MoEレイヤーで数千の専門家が使用されるようになりました。
このセットアップにはいくつかの課題があります。たとえば、通常パフォーマンスのために大きなバッチサイズが使用されることがありますが、MoEではデータがアクティブな専門家を通過することでバッチサイズが実質的に減少します。例えば、バッチ入力が10つのトークンで構成されている場合、5つのトークンは1つの専門家で処理され、残りの5つのトークンは別の五つの専門家で処理されるため、バッチサイズが均等ではなく、利用率が低下します。。以下のMaking MoEs go brrrセクションでは、その他の課題と解決策について説明します。
これをどのように解決できるでしょうか?学習されたゲーティングネットワーク(G)が、どの専門家(E)に入力の一部を送るかを決定します:
y=∑i=1nG(x)iEi(x)y = \sum_{i=1}^{n} G(x)_i E_i(x)y=i=1∑nG(x)iEi(x)
このセットアップでは、すべての専門家がすべての入力に対して実行されます-重み付けされた乗算です。しかし、もしGが0の場合はどうなるでしょうか?その場合、該当する専門家の操作を計算する必要はなくなり、計算を節約することができます。典型的なゲーティング関数はどのようなものですか?最も伝統的なセットアップでは、ソフトマックス関数を使用する単純なネットワークを使用します。ネットワークは、入力をどの専門家に送るかを学習します。
Gσ(x)=Softmax(x⋅Wg)G_\sigma(x) = \text{Softmax}(x \cdot W_g)Gσ(x)=Softmax(x⋅Wg)
Shazeerの研究では、Noisy Top-K Gatingなどの他のゲーティングメカニズムも探索されました。このゲーティングアプローチでは、(調整可能な)ノイズを導入してから上位kの値を保持します。つまり:
- ノイズを追加します
H(x)i=(x⋅Wg)i+StandardNormal()⋅Softplus((x⋅Wnoise)i)H(x)_i = (x \cdot W_{\text{g}})_i + \text{StandardNormal()} \cdot \text{Softplus}((x \cdot W_{\text{noise}})_i)H(x)i=(x⋅Wg)i+StandardNormal()⋅Softplus((x⋅Wnoise)i)
- 上位k個のみを選びます
KeepTopK(v,k)i={viif vi is in the top k elements of v,−∞otherwise.\text{KeepTopK}(v, k)_i = \begin{cases}v_i & \text{if } v_i \text{ is in the top } k \text{ elements of } v, \\-\infty & \text{otherwise.}\end{cases}KeepTopK(v,k)i={vi−∞if vi is in the top k elements of v,otherwise.
- ソフトマックスを適用します。
G(x)=Softmax(KeepTopK(H(x),k))G(x) = \text{Softmax}(\text{KeepTopK}(H(x), k))G(x)=Softmax(KeepTopK(H(x),k))
このスパース性はいくつかの興味深い特性を持っています。kを十分に低く設定することで、多くのエキスパートが活性化される場合よりも、トレーニングや推論をはるかに高速に実行できます。なぜ単一のトップエキスパートを選択しないのですか?最初の推測は、ゲートが異なるエキスパートへのルーティング方法を学習するためには、少なくとも2つのエキスパートを選択する必要があると考えられました。このスイッチトランスフォーマセクションでは、この決定を再評価します。
なぜノイズを追加するのですか?それは負荷のバランスです!
MoEsの負荷分散トークン
前述のように、すべてのトークンをわずかな人気のあるエキスパートに送信すると、トレーニングの効率が低下します。通常のMoEトレーニングでは、ゲートングネットワークはほとんど同じエキスパートのみを活性化するように収束します。これは好ましいエキスパートがより迅速にトレーニングされ、選択されるためです。これを緩和するために、補助損失が追加され、すべてのエキスパートがほぼ同じ数のトレーニング例を受け取るように促します。次のセクションでは、エキスパート容量の概念も探求します。これには、エキスパートが処理できるトークンの閾値を導入します。 transformers
では、補助損失はaux_loss
パラメータを介して公開されます。
MoEsとトランスフォーマ
トランスフォーマは、パラメータの数を増やすことでパフォーマンスが向上する明確な事例です。そのため、GoogleはGShardを使って、トランスフォーマを6000億以上のパラメータにスケールアップすることを研究しました。
GShardは、エンコーダとデコーダの両方で、トップ2のゲーティングを使用したMoEレイヤーで毎回のFFNレイヤーを置き換えます。次のイメージは、エンコーダパートの概要を示しています。このセットアップは大規模なコンピューティングに非常に有益です。複数のデバイスにスケーリングするとき、MoEレイヤーはデバイス間で共有され、他のすべてのレイヤーは複製されます。これについては、「Making MoEs go brrr」セクションでさらに詳しく説明します。
規模の均衡の取れた負荷と効率を維持するために、GShardの著者は前のセクションで議論したものと同様の補助的な損失に加えて、いくつかの変更を導入しました:
- ランダムなルーティング:top-2の設定では、常にトップエキスパートを選択しますが、2番目のエキスパートはその重みに比例して選択されます。
- エキスパート容量:1つのエキスパートが処理できるトークンの閾値を設定できます。両方のエキスパートが容量に達している場合、トークンは残差接続を介して次のレイヤーに送信されます(または他のプロジェクトでは完全にドロップされます)。この概念はMoEsにとって最も重要な概念の1つとなります。なぜエキスパート容量が必要なのですか?すべてのテンソル形状がコンパイル時に静的に決定されますが、あらかじめ各エキスパートにどれだけのトークンが行くかはわかりませんので、容量の要素を固定する必要があります。
GShardの論文では、MoEsに適した並列計算パターンを示していますが、それについて詳しく議論するのはこのブログ投稿の範囲外です。
注意: 推論を実行する際には、一部の専門家だけがトリガーされます。同時に、全トークンに対して適用される自己注意など、共有された計算もあります。ですから、8つの専門家を持つ47Bモデルについて話すとき、12Bの密なモデルの計算で実行できます。もし、トップ2を使用する場合、14B個のパラメータが使用されます。しかし、注意操作などは共有されるため、実際に使用されるパラメータの数は12Bです。
スイッチトランスフォーマー
MoEsは非常に有望な結果を示しましたが、訓練や微調整の不安定さに苦労しています。 スイッチトランスフォーマーは、これらのトピックについて深く掘り下げた非常に興味深い研究です。著者たちは2048人の専門家を使った1.6兆パラメータのMoEをHugging Faceでリリースしており、変換器で実行できます。スイッチトランスフォーマーはT5-XXLに比べて4倍の事前トレーニングの加速を実現しました。
GShardと同様に、著者たちはFFNレイヤーをMoEレイヤーに置き換えました。スイッチトランスフォーマー論文では、2つの異なるトークンを受け取り、4人の専門家を持つスイッチトランスフォーマーレイヤーを提案しています。
最初に2人以上の専門家を使用するという初期の考えとは異なり、スイッチトランスフォーマーは単純化された単一専門家の戦略を採用しています。このアプローチの効果は以下の通りです:
- ルーターの計算が減少する
- 各専門家のバッチサイズが少なくとも半分になる
- 通信コストが削減される
- 品質が保たれる
スイッチトランスフォーマーは専門家の容量の概念も探求しています。
専門家の容量 =(バッチあたりのトークン数/専門家の数)×容量係数
上記の容量は、バッチ内のトークン数を専門家の数で均等に分割します。容量係数を1より大きくすると、トークンが完全にバランスされない場合にバッファを提供します。容量を増やすと、デバイス間の通信コストが増えるため、考慮すべきトレードオフです。特に、スイッチトランスフォーマーは低容量係数(1-1.25)で良いパフォーマンスを発揮します。
スイッチトランスフォーマーの著者は、セクションで言及された負荷分散損失を見直し、単純化も行いました。各スイッチレイヤーに対して、補助ロスがトレーニング中の総合モデルロスに追加されます。このロスは一様なルーティングを促進し、ハイパーパラメータを使用して重み付けすることができます。
著者たちは選択的な精度の実験も行っており、専門家をbfloat16
でトレーニングしながら他の計算では完全精度を使用するという方法を試しました。低い精度はプロセッサ間の通信コスト、計算コスト、テンソルのメモリ使用量を減らす効果があります。最初の実験では、専門家とゲートネットワークの両方をbfloat16
でトレーニングした結果、より不安定なトレーニングとなりました。これは特にルーターの計算によるものであり、より高い精度が重要でした。不安定性を緩和するために、ルーティングにも完全精度が使用されました。
このノートブックでは、要約のためにスイッチトランスフォーマーを微調整する方法を紹介していますが、まずfine-tuningセクションを確認することをおすすめします。
Switch Transformersは、エンコーダとデコーダのセットアップを使用しており、MoE版のT5を行いました。 GLaM論文では、MoEのトレーニングに必要な計算量を1/3に減らすことで、GPT-3の品質に匹敵するモデルをトレーニングした結果、エネルギーの使用量を減らすことができます(実際、MoEのトレーニングに必要な計算量が少ないため、二酸化炭素排出量を桁単位で削減することが可能となります)。 著者たちは、デコーダのみのモデルやフューショットとワンショットの評価、そしてファインチューニングよりも大きな容量係数を使用しました。 さらに、トレーニングおよび評価中に計算量に応じて容量係数を変更することができるメトリックとして容量係数を試験しました。
ルータZ損失によるトレーニングの安定化
以前に議論されたバランシング損失は、不安定性の問題を引き起こす可能性があります。モデルの品質を犠牲にして、スパースモデルを安定化させるためには、さまざまな方法を使用することができます。たとえば、ドロップアウトを導入することで安定性が向上しますが、モデルの品質が低下します。一方、より多くの乗算要素を追加すると、品質が向上しますが、安定性が低下します。
ST-MoEで紹介されたルータZ損失は、ゲーティングネットワークに入力されるログットが大きい場合に罰則を与えることで、トレーニングの安定性を大幅に向上させます。この損失は、値の絶対値を小さくすることを促すため、丸め誤差が減少します。これは、ゲーティングなどの指数関数に非常に影響を及ぼす場合に非常に重要です。詳細は論文をご覧ください。
エキスパートは何を学ぶのか?
ST-MoEの著者は、エンコーダエキスパートがトークンのグループや浅い概念に特化していることを観察しました。たとえば、句読点エキスパートや固有名詞エキスパートなどが存在するかもしれません。一方、デコーダエキスパートはより特化していません。著者たちはまた、多言語のセットアップでトレーニングしました。各エキスパートが言語に特化することを想像することができますが、トークンのルーティングと負荷分散のため、特定の言語に特化したエキスパートは存在しません。
エキスパートの数をスケーリングすることがプレトレーニングにどのような影響を与えるか?
エキスパート数を増やすと、サンプル効率が向上し、速度が速くなりますが、これは減少する利益です(特に256または512を超える場合)、推論にはより多くのVRAMが必要になります。スケーリングした場合のSwitch Transformersで調査されたプロパティは、小規模なスケールでも一貫していました。たとえば、1つのレイヤーあたり2、4、または8のエキスパートを使用しても同様です。
MoEのファインチューニング
Mixtralは、transformersのバージョン4.36.0でサポートされています。
pip install "transformers==4.36.0 --upgrade
を使用してインストールできます。
密なモデルとスパースモデルでは、過学習のダイナミクスは非常に異なります。スパースモデルは過学習しやすいため、エキスパート自体でより高い正則化(たとえば、ドロップアウト)を探索することができます(たとえば、密なレイヤーに対して1つのドロップアウト率を持ち、スパースなレイヤーに対して別の高いドロップアウト率を持つことができます)。
ファインチューニングの際に補助損失を使用するかどうかは、意思決定の問題です。ST-MoEの著者は、補助損失をオフにする実験を行いましたが、品質にはほとんど影響がなく、トークンの最大11%が削除されている場合でも、品質にはほとんど影響がありませんでした。トークンの削除は、過学習を防ぐのに役立つ正則化の形態かもしれません。
Switch Transformersでは、固定されたプレトレーニングのPerplexityに基づいて、スパースモデルはSuperGLUEなどの論理的なタスクは特に下位互換性がありますが、TriviaQAなどの知識に基づくタスクでは比例して良い結果を残します。著者たちはまた、ファインチューニングにおいてエキスパートの数が少ない方が役立つことを観察しました。一般化の問題を裏付ける別の観察結果は、モデルが小さなタスクで悪化し、大きなタスクでうまくいくことです。
スパースなMoEをファインチューニングする際に考慮すべき最後の部分は、ファインチューニングのハイパーパラメータのセットアップが異なる点です。スパースモデルでは、バッチサイズが小さいほど、学習率が高いほど恩恵を受ける傾向があります。
この時点で、MoEのファインチューニングに苦労していることに少し悲しくなるかもしれません。しかし、最近の論文「MoEs Meets Instruction Tuning (2023年7月)」では、次のような実験を行っています:
- 単一タスクのファインチューニング
- マルチタスクの命令チューニング
- マルチタスクの命令チューニングの後に単一タスクのファインチューニング
著者がMoEとT5と同等のモデルをファインチューニングした場合、T5はより優れていました。著者がFlan T5(T5の命令同等)MoEをファインチューニングした場合、MoEのパフォーマンスは著しく向上しました。さらに、Flan-MoEの改善量はT5よりも大きかったため、MoEは命令チューニングからより多くの恩恵を受ける可能性があります。MoEはタスクの数が多いほど恩恵を受けます。前の議論では補助損失関数をオフにすることを示唆していましたが、損失関数は実際に過学習を防ぎます。
スパースなMoEと密なモデルの使い分け
多くのマシンを使用した大量のスループットシナリオでは、専門家は有用です。事前学習のための固定されたコンピューティング予算が与えられた場合、スパースなモデルがより最適です。VRAMが少ない低スループットシナリオでは、密なモデルの方が優れています。
注意: スパースモデルと密なモデルのパラメータ数を直接比較することはできません。なぜなら、両者は異なるものを表しているからです。
MoEsを活用する方法
初期のMoEの研究では、MoEレイヤーは分岐構造として表現され、GPUはそれに最適化されていないため計算が遅くなり、ネットワーク帯域幅が制約となりました。このセクションでは、これらのモデルの事前学習と推論をより実用的にするための既存の研究について説明します。MoEsはbrrrrrと鳴ります。
並列処理
並列処理について簡単に説明します:
- データ並列処理: 同じ重みがすべてのコアに複製され、データがコア間で分割されます。
- モデル並列処理: モデルがコア間で分割され、データはコア間で複製されます。
- モデルとデータの並列処理: モデルとデータをコア間で分割することができます。異なるコアが異なるデータのバッチを処理します。
- 専門家の並列処理: 専門家は異なるワーカーに配置されます。データ並列処理と組み合わせる場合、各コアには異なる専門家があり、データがすべてのコアに分割されます。
エキスパートの並列化により、さまざまなワーカーにエキスパートが配置され、それぞれのワーカーが異なるトレーニングサンプルのバッチを受け持ちます。非MoEレイヤーの場合、エキスパートの並列化はデータの並列化と同じように動作します。MoEレイヤーの場合、シーケンス内のトークンは、適切なエキスパートが存在するワーカーに送信されます。
容量係数と通信コスト
容量係数(CF)を増やすと品質が上がりますが、通信コストとアクティベーションのメモリも増えます。全対全の通信が遅い場合は、より小さな容量係数を使用する方が良いです。1.25の容量係数を持つトップ2のルーティングとコアごとに1つのエキスパートを使用するのが良い出発点です。評価時には、計算を減らすために容量係数を変更することができます。
サービングの技術
mistralai/Mixtral-8x7B-Instruct-v0.1をインファレンスエンドポイントに展開することができます。
MoEの大きなデメリットは、パラメータの数が多いことです。ローカルなユースケースでは、より小さいモデルを使用したい場合もあります。以下は、サービングに役立ついくつかの技術についてすばやく説明します:
- Switch Transformersの著者たちは、初期の蒸留実験を行いました。MoEを密な対応物に蒸留することで、スパース性の利益の30-40%を保つことができました。したがって、蒸留はより速い事前学習と本番モデルのサイズ縮小の利点を提供します。
- 最近のアプローチでは、ルーティングを変更して、フルの文章やタスクをエキスパートにルーティングし、サービング用のサブネットを抽出することができます。
- エキスパートの集約(MoE):この技術は、エキスパートの重みをマージするため、推論時のパラメータ数を減らします。
効率的なトレーニングのさらなる情報
FasterMoE(2022年3月)では、高い効率を持つ分散システムにおけるMoEのパフォーマンスを分析し、異なる並列化戦略の理論的な限界、エキスパートの人気を偏るように調整する技術、レイテンシを減らす細かい通信スケジュール、最も低いレイテンシに基づいてエキスパートを選択する調整されたトポロジ意識のゲートによる17倍の高速化を実現しています。
Megablocks(2022年11月)では、MoEに存在する動的な要素を処理するための新しいGPUカーネルを提供することで、効率的なスパースな事前学習を探求しています。彼らの提案はトークンを削除せず、モダンなハードウェアに効率的にマッピングできるため、大幅な高速化が可能です。その秘訣は何か?従来のMoEは、すべてのエキスパートが同じ形状と同じ数のトークンを持つことを前提としたバッチ化行列積を使用しています。一方、Megablocksでは、バランスのとれた割り当てを受け入れることができるブロックスパースな操作としてMoEレイヤーを表現しています。
オープンソースのMoE
現在、いくつかのオープンソースプロジェクトでMoEをトレーニングすることができます:
- Megablocks: https://github.com/stanford-futuredata/megablocks
- Fairseq: https://github.com/facebookresearch/fairseq/tree/main/examples/moe_lm
- OpenMoE: https://github.com/XueFuzhao/OpenMoE
オープンアクセスでリリースされたMoEの中でも、以下をチェックすることができます:
- Switch Transformers(Google):8から2048のエキスパートを備えたT5ベースのMoEsのコレクション。最大のモデルは1.6兆のパラメータを持っています。
- NLLB MoE(メタ):NLLB翻訳モデルのMoEバリアントです。
- OpenMoE:LlamaベースのMoEsをリリースしたコミュニティ取り組みです。
- Mixtral 8x7B(ミストラル):Llama 2 70Bを凌駕し、推論速度もはるかに速い高品質なMoEです。説明に基づいて調整されたモデルもリリースされています。詳細については、発表ブログ記事で確認してください。
ワクワクする取り組み方
疎なMoEをパラメータは少ないが同じ数のパラメータを持つ密なモデルに「蒸留」するさらなる実験。
もう一つの領域はMoEsの量子化です。2023年10月、MoEsをパラメータごとに1ビット未満に量子化することで、3.2TBのアクセラレータを使用している1.6Tのスイッチトランスフォーマーをわずか160GBに圧縮する方向への良いステップであるQMoE(Oct. 2023)を参考にしてください。
ですので、要約すると、探索すべき興味深い領域は以下の通りです:
- Mixtralを密なモデルに蒸留する
- エキスパートのモデルマージング技術を探索し、推論時間への影響を調べる
- Mixtralの極度の量子化技術を実施する
参考情報
- Adaptive Mixture of Local Experts(1991年)
- Learning Factored Representations in a Deep Mixture of Experts(2013年)
- Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer(2017年)
- GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding(2020年6月)
- GLaM: Efficient Scaling of Language Models with Mixture-of-Experts(2021年12月)
- Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity(2022年1月)
- ST-MoE: Designing Stable and Transferable Sparse Expert Models(2022年2月)
- FasterMoE: modeling and optimizing training of large-scale dynamic pre-trained models(2022年4月)
- MegaBlocks: Efficient Sparse Training with Mixture-of-Experts(2022年11月)
- Mixture-of-Experts Meets Instruction Tuning: A Winning Combination for Large Language Models(2023年5月)
- Mixtral-8x7B-v0.1、Mixtral-8x7B-Instruct-v0.1。
Citation
@misc {sanseviero2023moe, author = {オマー・サンセビエロ、 ルイス・タンストール、 フィリップ・シュミット、 ソウラブ・マングルカル、 ユネス・ベルカダ、 ペドロ・クエンカ }, title = {Mixture of Expertsの解説}, year = 2023, url = { https://huggingface.co/blog/moe }, publisher = {Hugging Face Blog }}
サンセヴィエロら(2023年)、「Mixture of Expertsの解説」、Hugging Face Blog. Webb. 2023.
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- 「ビジネスにスピーチAIを導入する際に考慮すべき5つのポイント」
- なぜOpenHermes-2.5はGPT-4やLLama2 13Bよりも優れているのか? 結果はこちら
- 「SuperDuperDBを活用して簡単にシンプルな重複排除システムを作成する」
- 「たぬき+GPT4を使用して、20分で顧客サポートボットを作成しましょう」
- ニューラルネットワークチュートリアルのプログラミング:ヴィンテージスタイル
- 次元性の祝福?!(パート1)
- Principal Components Analysis(主成分分析)が好きですか?新しい論文が「ファントム振動」というアーティファクトを生成できることを報告しています