Qwen3-30B-A3BなどのMoEでどのExpertが使われているかを確認する

最近の大きいモデルはたくさんのExpertを用意してトークンごとに必要なExpertを使って推論するMoE(Mixture of Experts)が主流です。

そうなると、どんな感じでExpertが選ばれてるのか気になりますね。
ということで、Qwen3とLFM2.5のMoEモデルでExpertを可視化してみました。ブラウザで動きます。
https://kishida.github.io/QwenQwen3.js/html/router-viz.html

対応モデル

対応モデルはQwen3とLFM2.5です。で、たぶんQwen3-235B-A22Bも動かせるのだけど、メモリ的に無理。
ということで、Qwen3-30B-A3Bか、LFM2.5-8B-A1Bが動かせる感じです。

GPUメモリが足りなかったらCPUで動くはず。

量子化はQ2以上。IQには対応してなかった気がする。

Qwen3-30B-A3B

Qwen3-30B-A3BではUnslothさんのQ2_Kが一番小さいと思うので、このあたりを使うといいです。
https://huggingface.co/unsloth/Qwen3-30B-A3B-GGUF/tree/main

48レイヤーで、各層128Expert中の8Expertがアクティブです。

LFM2.5-8B-A1B

LFM2.5-8B-A1Bは小さいので、動かせる環境も多いと思います。CPUで動かしてもそれなりの速度になるはず。
https://huggingface.co/unsloth/LFM2.5-8B-A1B-GGUF/tree/main

全24レイヤーだけど、最初の2レイヤーはDenseなので、MoEは22レイヤーです。各層32Expertで4Expertがアクティブ。

動きも速いしExpertが少なくて見やすいので、こちらがおすすめ。

出力内容で違いはあるのか?

気になるところですね。ということで比較。

「日本語で短辺小説を書いて」

「Java言語の構文を説明して」

「Java言語の文法を日本語で説明して」

「日本語の短編小説を書いて」

使ってるところに違いはありそう。
だけど、MoEのRouterってトークンごとに動くので、あまり内容を考慮した切り替えには なってなく、句読点だとか接続詞だとか動詞だとか数、単位など短い範囲での切り替えになってます。
ただ、なんとなくプログラミング関連のほうが、日本語しか出してないとしても使ってるExpertの範囲が広そうではある。

実装

これ、Qwen3のCPU版エンジンは、Qwen3-27BとOpenCodeで実装しています。
その後のGPU化や、このRouter VizualizerはClaude Code+Opusを使ってるけど、Qwen3-27Bはいまのところウェイトが公開されたLLMではGLM-5.2に次いでコードが書けます。
他は総パラメータ数が多くてもアクティブパラメータが少ないので、こういったアルゴリズムの複雑なコードでバグ入れがちだったり、そのデバッグが難しかったりする。

ソースを見ると割と素直なLLM実装になってると思うので、見てみると面白いかも。