AI技術教材 · Dense vs Mixture-of-Experts

総パラメータは数千億
でも1トークンが使うのはその1割
MoE の非対称はどこから来るのか。

「MoE は軽い」とよく言われる。だが軽いのは計算だけで、メモリは軽くない—— パラメータは全部 VRAM に載せたまま、トークンごとにごく一部だけを通す。 この教材は、Dense と MoE の唯一の違いである FFN 層 を左右に並べ、 スライダーで expert 数・top-k・隠れ層サイズ を動かしながら、 「なぜ総パラメータ大・活性化小が両立するのか」を数値と点灯で体感する。

01 / 共通構造

違うのは FFN だけ。Attention は同じ。

Transformer ブロックは Attention(注意機構)と FFN(フィードフォワード, feed-forward network)の2段。 Dense と MoE で Attention 層はまったく同一。分岐するのは FFN 層の作り方だけだ。まずここを押さえる。

DENSE ブロック
① Attention 層 両者で同一Q·K·V·O 投影 ≈ 4·h²
② FFN 層 — 単一の巨大 FFN3·h·I が丸ごと毎回動く
MoE ブロック
① Attention 層 両者で同一Q·K·V·O 投影 ≈ 4·h²
② FFN 層 — Router + E 個の expertルーター(gating)が top-k だけ選ぶ
02 / 点灯 = 活性化

同じ1トークンを、両方の FFN に流してみる

「トークンを1個流す」を押すと、Dense は全ニューロンが点灯し、MoE は Router が選んだ top-k の expert だけが点灯する。点灯した部分=そのトークンで実際に計算された部分だ。

Dense の FFN DENSE

MoE の FFN MoE

03 / 非対称ダッシュボード

4つの数字で「軽いのは計算だけ」を見る

上のスライダーがそのまま連動する。注目は最下段の必要 VRAM——これは総パラメータで決まり、活性化では 1 ミリも下がらない。ここが非対称の核心。

Dense
MoE
総パラメータweights on disk / in memory
活性化パラメータ / token1トークンが実際に通る量
推論 FLOPs / token≈ 2 × 活性化パラメータ
必要 VRAM(重みのみ)FP16 · 2 byte/param
■ 概算式(画面の数値はこの式で計算) L = 層数(固定 64
総param(Dense) ≈ L × ( 4·h² + 3·h·Idense ) + 埋め込み
総param(MoE) ≈ L × ( 4·h² + E × 3·h·I + router ) + 埋め込み
活性param(MoE) ≈ L × ( 4·h²(=共通/Attention) + k × 3·h·I ) + 埋め込み
        = 共通k × (1 expert 分) ←(top-k を上げるほど Dense に近づく)
FLOPs / token ≈ 2 × 活性化param
VRAM ≈ param × byte/param ←(活性化ではなく総で効く。ここが非対称。
04 / 失敗モード

Router は放っておくと偏る — load imbalance

「トークンを流す」を何度も押すと、下の棒グラフに expert ごとの採用回数が積み上がる。特定の expert に集中すると、他は遊び、集中先が渋滞して遅くなる。これが MoE 最大の実務課題で、学習時は補助損失 (auxiliary / load-balancing loss) で均す。上の「負荷を均す」を ON にすると、混雑した expert にペナルティが入り、偏りが緩む様子が見える。

まだトークンを流していない。「▶ トークンを1個流す」を何度か押してみる。
05 / 誤解を正す

ここは崩さない — 4つの要点

✕ 誤解:MoE は VRAM が安い
○ 正しくは

安いのは計算 (FLOPs) だけ。expert は全部メモリに常駐する。DeepSeek-V3 は活性 37B でも、671B 全部を VRAM に載せねば動かない。「1枚のGPUに載る」かは総パラメータで決まる。

✕ 誤解:選ばれない expert は消える
○ 正しくは

活性化はスパースだが、どの expert が呼ばれるかはトークンごとに変わる。だから全 expert が常駐していないといけない。「使う瞬間だけロード」は帯域的に非現実的。

✕ 誤解:k は大きいほど賢い
○ 実際は top-2 が典型

Mixtral も DeepSeek も k=2〜8。k を上げると活性化と FLOPs が増え、MoE の旨味(安い計算)が消えて Dense に近づく。疎さ=速さのトレードオフ。

✕ 誤解:量子化すれば非対称は消える
○ 緩むが消えない

NVFP4 等はバイト数を下げ、VRAM の壁を緩める。だが「総で VRAM・活性で FLOPs」という構造そのものは精度を変えても不変。上のダッシュボードで FP16→NVFP4 に切り替えても、Dense と MoE の総/活性の比は動かない。

06 / 実在モデル早見表

総 vs 活性、現実の数字で

公称値。Dense は総=活性(全部使う)。MoE は総が大きくても活性は一部。VRAM は「総」列に比例することを確認する。

モデル方式総パラメータ活性/ token活性率備考
Qwen2.5-72BDense72B72B100%全パラメータ毎回
Mixtral 8×7BMoE47B~13B~28%E=8 / k=2
GLM-4.5-AirMoE106B12B~11%fine-grained experts
DeepSeek-V3MoE671B37B~5.5%E=256 / k=8 + shared
07 / 想定質問

もくもく会で出る問い

k=1 って何を意味するの?
1トークンにつき expert を1個だけ選ぶ最も疎な設定(switch routing)。活性化と FLOPs は最小になり最速だが、選択ミス(誤ったルーティング)の影響を薄める余地がなく、品質が不安定になりやすい。だから実務は保険を効かせて top-2 が主流。上のスライダーを k=1 にすると、MoE の点灯が最小になり、活性化パラメータが最も小さくなるのが見える。
なぜ活性化が小さいのに VRAM は減らないの?
どの expert が呼ばれるかはトークンごとに毎回変わるから。次の瞬間どの expert が要るか事前に分からない以上、全部をメモリに置いておくしかない。計算(FLOPs)は「今このトークンが通った道」だけで済むが、メモリ(VRAM)は「通りうる全ての道」を用意しておく必要がある。この「通った道 vs 通りうる道」の差が、活性化と VRAM の非対称の正体。
じゃあ MoE の得はどこにある?
同じ計算コスト(活性化パラメータ)のまま、総パラメータ=知識の総量を桁で増やせる点。13B 相当の計算速度で 47B 分の知識を持つ(Mixtral)。VRAM(=置き場所)を払える者だけが、計算を増やさずに賢さを買える。「メモリは潤沢だが計算・電力を節約したい」構成——まさに DGX Spark のような統合メモリ機——と相性が良い。
expert を増やせば増やすほど強い?
総パラメータと VRAM は増えるが、活性化(速度)は k で頭打ち。さらに expert が増えるほど Router の負荷偏り(load imbalance)が起きやすく、学習が難しくなる。上で E=128 にしてトークンを何度も流すと、棒グラフが偏りやすくなるのが確認できる。「たくさん置ける=そのまま賢い」ではなく、均等に使い切る技術(balancing)とセット。