「MoE は軽い」とよく言われる。だが軽いのは計算だけで、メモリは軽くない—— パラメータは全部 VRAM に載せたまま、トークンごとにごく一部だけを通す。 この教材は、Dense と MoE の唯一の違いである FFN 層 を左右に並べ、 スライダーで expert 数・top-k・隠れ層サイズ を動かしながら、 「なぜ総パラメータ大・活性化小が両立するのか」を数値と点灯で体感する。
Transformer ブロックは Attention(注意機構)と FFN(フィードフォワード, feed-forward network)の2段。 Dense と MoE で Attention 層はまったく同一。分岐するのは FFN 層の作り方だけだ。まずここを押さえる。
「トークンを1個流す」を押すと、Dense は全ニューロンが点灯し、MoE は Router が選んだ top-k の expert だけが点灯する。点灯した部分=そのトークンで実際に計算された部分だ。
上のスライダーがそのまま連動する。注目は最下段の必要 VRAM——これは総パラメータで決まり、活性化では 1 ミリも下がらない。ここが非対称の核心。
「トークンを流す」を何度も押すと、下の棒グラフに expert ごとの採用回数が積み上がる。特定の expert に集中すると、他は遊び、集中先が渋滞して遅くなる。これが MoE 最大の実務課題で、学習時は補助損失 (auxiliary / load-balancing loss) で均す。上の「負荷を均す」を ON にすると、混雑した expert にペナルティが入り、偏りが緩む様子が見える。
安いのは計算 (FLOPs) だけ。expert は全部メモリに常駐する。DeepSeek-V3 は活性 37B でも、671B 全部を VRAM に載せねば動かない。「1枚のGPUに載る」かは総パラメータで決まる。
活性化はスパースだが、どの expert が呼ばれるかはトークンごとに変わる。だから全 expert が常駐していないといけない。「使う瞬間だけロード」は帯域的に非現実的。
Mixtral も DeepSeek も k=2〜8。k を上げると活性化と FLOPs が増え、MoE の旨味(安い計算)が消えて Dense に近づく。疎さ=速さのトレードオフ。
NVFP4 等はバイト数を下げ、VRAM の壁を緩める。だが「総で VRAM・活性で FLOPs」という構造そのものは精度を変えても不変。上のダッシュボードで FP16→NVFP4 に切り替えても、Dense と MoE の総/活性の比は動かない。
公称値。Dense は総=活性(全部使う)。MoE は総が大きくても活性は一部。VRAM は「総」列に比例することを確認する。
| モデル | 方式 | 総パラメータ | 活性/ token | 活性率 | 備考 |
|---|---|---|---|---|---|
| Qwen2.5-72B | Dense | 72B | 72B | 100% | 全パラメータ毎回 |
| Mixtral 8×7B | MoE | 47B | ~13B | ~28% | E=8 / k=2 |
| GLM-4.5-Air | MoE | 106B | 12B | ~11% | fine-grained experts |
| DeepSeek-V3 | MoE | 671B | 37B | ~5.5% | E=256 / k=8 + shared |