最近出た DeepSeek-V2 が一部で話題になっていたのでまとめます。
DeepSeek-V2 は「Multi-head Latent Attention (MLA)」メカニズムと「DeepSeek Mixture-of-Experts (MoE)」アーキテクチャといった技術によって、モデルの推論速度を向上させるとともに、訓練コストを削減しています。
MoE はちょっと前に OSS で性能が高かった Mixtral-8x7B が採用していましたね。
この記事では、DeepSeek-V2 のアーキテクチャ等について簡単に説明していきます。
DeepSeek-V2 のアーキテクチャ
Multi-head Latent Attention (MLA)
従来の Multi-Head Attention (MHA) は、推論時のキー(key)と値(value)のキャッシュが大きなボトルネックとなっていました。これに対し、DeepSeek-V2 が導入した MLA は、低ランクのキー値結合圧縮を利用してこの問題を解決します。
この圧縮メカニズムにより、MLA は従来の MHA と比較してはるかに少ないメモリ使用量で同等以上の性能を発揮することが可能になります。
加えて、キャッシュする量も減ってデータの読み書きの時間が短くなり、かつ、計算効率も上がるので、低コスト化だけでなく推論速度向上にも寄与しているとのことです。
DeepSeek MoE
DeepSeek MoE では従来の MoE と以下のような違いがあります。
エキスパートの細分化と特化
従来の MoE と比べ、エキスパートをより細かく分割し、それぞれのエキスパートが特定のタスクやデータタイプにより特化するように設計されています。
これにより、各エキスパートが特定の問題をさらに効果的に解決できるようになり、全体としてモデルの精度と効率が向上します。
(従来の MoE モデルでもエキスパートが複数ありますが、DeepSeek MoE ほど細分化が行われていないため、エキスパート間での重複が多く見られ、非効率的な場合があるようで、その解決策ということですね)
共有エキスパートとルーテッドエキスパート
DeepSeek MoE には、共有エキスパートとルーテッドエキスパートという 2 種類のエキスパートを採用しています。
共有エキスパートは全ての入力で共通して使用される一方で、ルーテッドエキスパートは特定の入力に対してのみ活性化されるため、計算リソースの節約にもつながります。
従来の MoE では、このような区別ないので共通に持っておかないといけないような特徴があれば、すべてのエキスパートが持つことになりリソースを無駄遣いしてしまうということでしょうね。
ロードバランス用追加 Loss 関数
エキスパートへのルーティングの負荷の偏りを防ぐため、追加の損失関数が導入されています。
これにより、すべてのエキスパートが均等に学習に参加し、モデル全体の学習効率が向上します。
従来の MoE モデルではルーティングのバランスが取れにくく、一部のエキスパートが過剰に活用され、その他が十分に活用されないという問題があったのでその解決になります。
Token-Dropping 戦略
LLM は計算リソースを大量に消費するのが一番の問題点です。その解決策として、トークンによる重要性の違いに目を付けたのが Token-Dropping 戦略になります。
Token-Dropping 戦略では、トークンごとにスコアをつけ、スコアの低いトークンは影響が少ないとして計算をせず重要のみを計算するようです。
従来の MoE にはなかった機能ですね。
これらのアーキテクチャによって
DeepSeek-V2 はこれらのアーキテクチャによって、以下のような改善ができたみたいです。
計算コストも速度をメモリも効率化されているみたいですね。
また、性能は以下のようになるようです。Llama3 と比べても性能は悪くないようですね。
(Llama3 は MoE を持っていない認識なので、Llama3 の方がバグっている気もしますが)
まとめ
DeepSeek-V2 のまとめでした。DeepSeek MoE が技術的におもしろいと思いました。
最近の LLM 界隈では、アーキテクチャは頭打ちということを聞いていたので、こういうおもしろいメカニズムと会うと感動しますね。
おわり