広告

Qwen3.5-397Bに対する自動リサーチ:M5 Maxで20.34 tok/sに到達するまで36の実験、率直な結果

Reddit r/LocalLLaMA / 2026/3/30

💬 オピニオンDeveloper Stack & InfrastructureIdeas & Deep AnalysisTools & Practical UsageModels & Research

要点

  • Dan Woodsのflash-moe手法に基づく1週間にわたる「autoresearch」により、MacBook Pro M5 Max(128GB)上でQwen3.5-397Bを最適化し、デコード速度を10.61 tok/sから20.34 tok/sへ改善—ソフトウェアのみで約2倍の向上。
  • テスト環境では、SSDから209GBのモデルをストリーミング(RAMより大きいモデル)し、Q3-GGUFのエキスパートおよび特定のデコード/プリフィル設定を用いて、ページキャッシュが温まると約20+ tok/sを達成。
  • パープレキシティ(混乱度)に基づく品質ゲートを用い、36回の実験を体系的に記録した結果、ボトルネックが移り変わる様子が示された:最初はSSDのI/O制限、次にGPU側のエンコードオーバーヘッド、そして最後にプロジェクション(射影)カーネル。
  • 主要な性能向上は、16のIOスレッドを有効化し、並列かつページ境界に揃えたSSD読み出しを行ったことに加え、時間的なエキスパート予測によりトークン間のルーティング相関を活用し、I/Oと計算を重ね合わせたこと、さらに速度/品質のバランスが最も良い点としてQ3-GGUFのエキスパート量子化を選択したことによってもたらされた。
  • 記事では、Q3-GGUFのエキスパート対応(Anemllのflash-moeフォークから)に加えて、Metalレベルでの推論最適化を追加/活用することが、報告されているスループットに到達するために不可欠だったと報告している。

過去1週間、M5 Max 128GB上でQwen3.5-397Bをより速く動かそうと試行錯誤していました。Dan Woods'(@danveloper)の元となるベースラインは、M3 Maxで4.36 tok/sでした。M5 Maxでは、より良いハードウェアのおかげで、開始時点からすでに10.61 tok/sでした。私の最適化によって20.34 tok/sまで押し上げ、ソフトウェアだけで約2倍、Dan'sの元の結果に対しては4.67倍になりました。

ハードウェア: MacBook Pro M5 Max、128GBユニファイドメモリ、40コアGPU

モデル設定: Qwen3.5-397B-A17B、Q3-GGUF experts(Unsloth IQ3_XXS/IQ4_XS 混合精度)、Q8_0 embedding、Q6_K LM head。Decode: 20.34 tok/s。Prefill: 5.52 tok/s。モデルはディスク上で209GBで、RAMの128GBの4倍です——すべてSSDからストリーミングされます。

実際の実行結果のスクリーンショットを以下に示します。ページキャッシュが温まると、個々のトークンが20+ tok/sに到達しているのが見て取れます!

手法: 私は、もともとDan Woodsによって開発されたオートリサーチループの手法 github.com/danveloper/flash-moe を使用し、それをClaude Code(Anthropic)で動かして、M5 Max上で実験を体系的に実行・評価しました。各実験は次に進む前に結果とともに記録し、回帰を検出するためにパープレキシティのしきい値による自動品質ゲートを行いました。人間-AIの協業:私は研究を指揮し、ハードウェアを用意し、すべての科学的判断を行いました。Claude Codeは私の指示の下で実装・ベンチマークを実施しました。これにより、数週間ではなく数日で36件の実験をカバーできました。完全な論文PDFはリポジトリにあります。

ベースにしたもの: Dan Woodsのオリジナルflash-moe論文 github.com/danveloper/flash-moe とAnemllのフォーク github.com/Anemll/flash-moe. Apple Silicon上でSSDストリーミングによりQwen3.5-397Bを動かすための、純粋なC/Metal推論エンジンです。Anemllフォークでは、これらの結果に不可欠だったQ3-GGUF expert対応が追加されています。私の取り組みは、その上にさらにMetalレベルの最適化を加えています。

オートリサーチの過程で分かったことの1つは、ある壁を突破するたびに別の壁が現れる、という点でした。まずSSD I/Oがボトルネックになり、次にGPUエンコードのオーバーヘッド、さらに投影カーネルへと続きます。典型的な“シフトするボトルネック”問題です。

実際にスコアを動かしたもの:

  1. 16 IOスレッド + cache-io-split=4。各expertの重みファイルを1つの連続したチャンクとして読み込むのではなく、4並列のページアライン読み出しに分割して、異なるSSDチャネルを同時にヒットさせます。これはすでにエンジンに組み込まれており、有効化するだけで済みました。+1.5 tok/s
  2. 時間的(temporal)expert予測。トークン間のルーティング相関が27%あることを発見。SSD読み出しとGPU計算をオーバーラップ。+4.3 tok/s
  3. Q3-GGUF experts(Unsloth IQ3_XXS/IQ4_XS)。ペイロードが小さく、そして驚くほどQ3が“ちょうど良い”ポイントであることが判明しました。4-bitよりもパープレキシティが良い(5.58 vs 5.62)一方で、サイズは23%小さい。Unslothは、どの層をより強く圧縮し、どの層をより高い精度で残すかを賢く選ぶため、期待するほど3-bitからの品質低下が起きません。+2.3 tok/s
  4. CMD2事前エンコードにより、層ごとの提出ギャップを30μs削減。+0.44 tok/s
  5. 結合(fused)Q/K/V投影カーネル。入力ベクトルを3回ではなく1回だけ読み取る(Metal GPU最適化)。+0.76 tok/s
  6. CMD2事前エンコードを、全てのフルアテンション層に拡張。+0.47 tok/s

注:一部の最適化は相互作用するため、増加分は完全に加算されません。

失敗したもの(78%破棄率):

  • 1-bit QJL quantization、パープレキシティ5647、致命的
  • 三値(ternary)2-bit、重みの84%がスパース化され、モデルが崩壊
  • K=3のexpertルーティング、品質が崩壊
  • クロス層予測、命中率0%
  • NAXオフロード、タイルパディングのオーバーヘッドが得られた利益を相殺
  • 2-bit MLX experts。単独では速いが、パープレキシティが悪化(5.71 vs 5.58)。また、Q3に時間的予測を適用すると速度面で優位性がなくなった

率直な限界:

  • 単一のハードウェアプラットフォームでの結果であり、一般化されない可能性がある
  • この規模でのQ3量子化は、長文生成で目に見えて劣化する。残念ながら、短いタスクでは出力品質が許容範囲だったものの、長い応答ではアーティファクトが出た。品質はパープレキシティのみで評価し、MMLUやGPQAのような標準化ベンチマークではない
  • これは速度研究のプロジェクトであり、生産品質を主張するものではない

今後の予定: 驚くべき発見が1つあります。AppleのNeural Engine(ANE)は、ずっと完全にアイドル状態で、電力0Wでした。つまり未使用のまま38 TOPSの計算能力がありました。問題は、MoE推論では動的に有効化するexpertを決める必要があり、ANEは静的に事前コンパイルされたグラフでしか機能しないことです。ただしバッチのプリフィルにはチャンスがあるかもしれません。完全な分析は論文にあります。

論文 + リリース: https://github.com/iluvclubs/flash-moe/releases/tag/v1.0

X/Twitter: DrPhoto

読んでくれてありがとうございます。質問には喜んで答えます。

もし誰かがさらなる最適化のアイデアを持っていたら、ぜひ聞かせてください。特にANEの機会は、あまり掘り下げられていないように感じます。

submitted by /u/Equivalent-Buy1706
[link] [comments]

広告