背景

Qwen3.5-397Bは総パラメータ397B、活性17BのMoEモデル。通常はH100複数枚が必要なクラスだが、IQ4_NL量子化 + cpu-moe + テンソルオフロードの組み合わせで、EPYC + コンシューマGPU環境でも動く。

問題は「動くだけ」なのか「常用できる速度」なのか。28回の連続推論で定量評価した。

目的

  1. IQ4_NL量子化での定常TG/PP速度を28回のランから統計的に把握
  2. ハイブリッドオフロード(cpu-moe / マルチGPUテンソルオフロード)の実行構成を記録
  3. コンテキスト長依存性と安定性を評価
  4. 400B級MoEの日常運用可能性を判定

実験環境

項目仕様
CPUAMD EPYC 9175F(Zen 5, 16C, L3 512MB)
メモリDDR5-6400 768GB(12ch)
GPUNVIDIA RTX PRO 6000(96GB VRAM)
OSUbuntu 24.04 LTS
Runtimeik_llama.cpp(cpu-moe有効)
量子化IQ4_NL
コンテキスト最大262,144

結果

スループット統計(28回のラン)

指標Prefill (PP)Generation (TG)
最大値372.24 tok/s24.04 tok/s
最小値101.49 tok/s19.13 tok/s
平均(定常時)約160 tok/s約22.5 tok/s

代表的なラン

#PP(tok)TG(tok)PP速度(tok/s)TG速度(tok/s)合計(s)
14,69913314.2221.9515.5
31,1252,048161.6720.81105.4
81,1242,048154.7623.8293.3
1415,8662,048372.2422.98131.7
16550520117.7822.9127.4

Run #14: 15,866トークンの大規模入力を42.6秒で処理し、22.98 tok/sで生成開始。1.5万トークンのソースコード群を40秒強で読み込める。

コンテキスト依存性

  • PP速度: 短いプロンプト(<1k)では100 tok/s台。長くなるほど並列効率が上がり300 tok/s超に加速
  • TG速度: コンテキスト長によらず21-24 tok/sの範囲で極めて安定

ハイブリッドオフロード構成

単一GPU + cpu-moe構成

  IMG=compute.home.arpa/ik_llama-cuda
MODEL=/models/.../IQ4_KSS/Qwen3.5-397B-A17B-IQ4_KSS-00001-of-00006.gguf

podman run --rm -it --device nvidia.com/gpu=all \
  -p 8001:8080 --shm-size 16g --cap-add=SYS_NICE \
  -v "$MO":/models:ro,Z "$IMG" \
  --host 0.0.0.0 --port 8080 -m "$MODEL" \
  -c 262144 --threads 13 --threads-batch 24 \
  --jinja -b 2048 -ub 2048 -ngl 99 \
  -fa on --no-mmap --cpu-moe
  

--cpu-moe: GPUに収まらないエキスパート計算をCPU側で処理。EPYC 9175Fの12ch DDR5帯域がアクティブなエキスパートを供給し、GPU側でAttention演算を加速するハイブリッド設計。

マルチGPUテンソルオフロード構成

2GPU環境では-otで正規表現ベースのレイヤー分散が可能:

  ./build/bin/llama-server \
  --model "$model" \
  -fa on --ctx-size 135168 \
  -ctk q8_0 -ctv q8_0 \
  -ub 2048 -b 2048 -ngl 999 \
  -ot "blk\.(0|1|2|...|12)\.ffn_(gate|up|down)_exps.*=CUDA0,\
       blk\.(47|48|...|60)\.ffn_(gate|up|down)_exps.*=CUDA1" \
  --cpu-moe --threads 24 --no-mmap --jinja
  

初期レイヤー(0-12)をCUDA0、終盤レイヤー(47-60)をCUDA1に割り当て。中間レイヤーはcpu-moeが処理。VRAM消費を平滑化しつつ135kコンテキストを確保。

考察

なぜ397Bが22 tok/sで動くか

397Bという巨大な器を持ちながら、推論時に動くのは17B。IQ4_NL量子化でメモリ帯域負荷を1/4以下に圧縮。12チャネルDDR5帯域がアクティブエキスパートを供給し、GPU側でAttention演算を加速する分業体制が「17B級の速度」を実現している。

IQ4_NL量子化の選択

397Bクラスでは量子化なしのデプロイは非現実的。IQ4_NLは品質の低下を最小限に抑えつつ、メモリフットプリントを大幅削減。28回のランで品質の明らかな劣化は観測されなかった。

ウォームアップの必要性

初回数回は挙動が揺らぐ。安定したTG速度に入るまで2-3回のダミーリクエストが有効。常駐運用前提ならウォームアップスクリプトを組み込む。

感想

「400B級は実験用」という認識は変わりつつある。22.5 tok/sは人間がリアルタイムで対話するには十分で、非同期バッチでは高い処理能力を意味する。

TG速度がコンテキスト長によらず21-24 tok/sで安定している点が特に重要。15kトークンのソースコードを投げても速度が落ちない。これは複雑なリポジトリ全体を食わせるユースケースで活きる。

マルチGPUテンソルオフロードは「GPU2枚あるなら使うべき」構成。cpu-moeだけでも動くが、-otでの明示的なレイヤー分散はスループットを向上させる。

補足ノウハウ

KVキャッシュ量子化

135k-262kの広大なコンテキストではKVキャッシュが大量のメモリを消費する。-ctk q8_0 -ctv q8_0でKVキャッシュを量子化し、メモリ圧迫を抑制。品質への影響は体感では小さい。

サンプリングパラメータ

安定したコード生成には--temp 0.7 --repeat-penalty 1.2 --min-p 0.01 --top-p 0.95 --top-k 40が有効。temp 1.0では創造的だが冗長になりやすい。