MoE のアクティブパラメータ数を計算
入力
| 総エキスパート数 | 8 |
|---|---|
| アクティブエキスパート数(top-k) | 2 |
| エキスパートあたりのパラメータ数 | 7 |
| 共有パラメータ数 | 1 |
MoE のアクティブパラメータ数を計算
エキスパート数・top-k ルーティング・エキスパートあたりのサイズ・共有重みから、Mixture-of-Experts モデルの総パラメータ数とアクティブパラメータ数を求め、メモリ消費量とトークンあたりの計算量を切り分けます。
入力
モデル
結果
値を入力すると計算結果が表示されます。
詳細
MoE のアクティブパラメータ数
Mixture-of-Experts モデルは、対照的な 2 つの数を抱えています。どれだけの知識を保持できるかを表す大きな総パラメータ数と、トークンごとにどれだけの計算を行うかを表すはるかに小さなアクティブ数です。両者はしばしば混同されますが、答える問いが異なります。一方はメモリの請求額を、もう一方は計算の請求額を決めます。この計算では、エキスパート数・top-k ルーティング・エキスパートあたりのサイズ・共有重みから両者を切り分けます。
Mixture of Experts の構成
密(dense)なトランスフォーマーでは、すべてのトークンがすべての重みを通過します。Mixture of Experts は、ある層のフィードフォワードブロックを多数の並列なエキスパートに置き換え、各トークンに対してそのうち top-k だけを選ぶ小さなルーターを加えます。残りのモデル、すなわちアテンション、ルーター、埋め込み、そして常時稼働する共有エキスパートがある場合はそれは、すべてのトークンに共通したままです。したがってトークンの経路は、共有重みとルーティングされたわずかなエキスパートだけに触れ、残りのエキスパートはそのトークンに対しては休止します。
これは、密なモデルでは連動して動く 2 つの量を切り離します。容量はエキスパート数とともに増えます。エキスパートが多いほど、より専門的な知識を蓄えられるからです。計算量はアクティブエキスパート数とともにしか増えません。あるトークンに対して演算を行うのはそれだけだからです。
2 つの数
総エキスパート数 、トークンごとのアクティブ数 、エキスパートあたりのパラメータ数 、共有パラメータ数 とすると、総数とアクティブ数は次のようになります。
TAr=s+E⋅p=s+k⋅p=TAここで はメモリ消費量を決める総数、 はトークンあたりの計算量を決めるアクティブ数、 は各トークンが触れる重みの割合です。
計算例
70 億パラメータのエキスパートを 8 個持ち、トークンごとに 2 個をルーティングし、その上に 10 億の共有パラメータがあるモデルを考えます。
TAr=1+8×7=57 億=1+2×7=15 億=5715≈0.263=26.3%このモデルは 570 億パラメータを保持しますが、各トークンでは 150 億パラメータのモデルであるかのように計算量を費やします。常時稼働するのは重みのおよそ 4 分の 1 です。これが魅力です。570 億モデルの容量を、150 億モデルに近いトークンあたりコストで得られます。
メモリは依然として総数に従う
注意すべき点は、節約されるのが計算であってメモリではないことです。どのエキスパートも任意のトークンに選ばれうえ、トークンのバッチは多くのエキスパートに分散するため、すべてを同時に常駐させておく必要があります。将来のトークンがどのエキスパートを必要とするかをモデルは予測できません。したがってメモリ消費量は総数 に比例し、計算量だけがアクティブ数 に比例します。つまり Mixture-of-Experts モデルはホストするには大きいが動かすには安く、同じトークンあたりコストの密なモデルとは正反対のバランスです。
メモリ側を左右する総数は、Transformerのパラメータ数の計算 でアーキテクチャから積み上げられ、その重みを実際に提供するのに必要なメモリは LLM推論のVRAM計算 で扱っています。
よくある質問 (FAQ)
なぜ Mixture of Experts を使うのですか
Mixture of Experts を用いると、トークンごとの計算量を同じだけ増やすことなく、パラメータ数、ひいては知識を蓄える容量を拡大できます。ルーターは各トークンを少数のエキスパートにだけ送るため、トークンあたりの浮動小数点演算量は総数ではなくアクティブパラメータに比例します。これにより、同じトークンあたりコストの密(dense)モデルよりはるかに多くのパラメータを持つモデルを学習・提供することが可能になります。
総パラメータとアクティブパラメータの違いは何ですか
総パラメータはモデル内のすべての重みを数えます。すなわち共有層に加えてすべてのエキスパートです。アクティブパラメータは単一トークンで使われる重みだけを数えます。すなわち共有層に加えてルーターが選ぶ少数のエキスパートです。総パラメータ数はメモリ消費量を決めます。どのエキスパートも選ばれうるよう、すべて利用可能にしておく必要があるためです。アクティブ数はトークンあたりの計算量とレイテンシを決めます。実際に演算を行うのはルーティングされたエキスパートだけだからです。
トークンごとに少数のエキスパートしか動かないのに、なぜメモリは総数に比例するのですか
どのエキスパートも任意のトークンに選ばれうえ、トークンのバッチ全体では多くの異なるエキスパートが使われるため、すべてを同時にメモリ上に常駐させておく必要があります。将来のトークンがどのエキスパートを必要とするかを事前に知ることはできません。その結果、単一トークンの計算量はアクティブ数にしか比例しないのに、メモリ消費量は総パラメータ数に比例します。これがこの手法の核心的なトレードオフです。計算は安いものの、重み全体は依然として保持しておかなければなりません。
免責事項
これはエキスパートのサイズが一様であると仮定し、共有重みを常時アクティブとして扱う一次近似です。ルーティングの偏り、ルーターネットワーク自体、デバイス間のエキスパート並列による複製は無視しています。設計の比較に用いるためのもので、厳密な集計としては扱わないでください。