| 2週間前に、ここで MLXは私のM1 MaxではGGUFより遅かった と投稿しました。あなたがフィードバックをくれて、MLX向けにおそらく最悪のモデルを選んでいた点を指摘してくれました。壊れたプロンプトキャッシュ(mlx-lm#903)、MLXのハイブリッド注意は最適化できない、そしてbf16に対応していないチップでbf16を使っていた。 そこで、あなたからのほぼすべてのヒントと推奨をもとに検証しました。 fp16への変換後は、ほとんどのシナリオで差は1桁台です。ですが、それでも「MLXを使うだけでOK」という結論にはなりません。 以下はQwen3 30B-A3B 実効 tok/s(高いほど良い)
生成速度は基本的にこのモデルとほぼ同率です:GGUFは58 tok/s、MLXは55〜56。パート1の「57 vs 29」はエンジンではなく、モデル側の影響でした。 興味深い:ランタイムはエンジンより重要です。
LM Studioは、素のllama.cppと比べてオーバーヘッドを追加しません。Metalサポートで自分でもコンパイルして検証しました。 MLX側では、oMLXはマルチターンでLM StudioのMLXより2.2倍速いです。ただしGemma 12Bでもテストしました。こちらではLM Studioのキャッシュは問題なく動作します。面白いことに、このときはoMLXとLM StudioのMLXが似た数値を出しています。つまり、oMLXはMLXの性能一般を改善するのではなく、キャッシュの問題を解決しているということです。それでも、やはりMLXの最良のランタイムではあります。 M1/M2の人向け:bf16の修正: 1分以内で品質の低下はなく、prefillペナルティを40〜70%取り戻します。M3+はネイティブでbf16に対応しているので、ここでは適用されません。 調査中に見つけたのが MLX量子化の品質面の懸念 です。MLXの4-bitとGGUFのQ4_K_Mは、どちらも「4-bit」と言っているにもかかわらず同じものではありません。ただし、この領域にはいくつか動きがあります。 GGUFのK-quantsはセンシティブな層により多くのビットを割り当て、MLXは一様な深さで適用します。llama.cppのプロジェクトでは、7Bモデルにおいて一様なQ4_0とQ4_K_Mの間で4.7倍のパープレキシティ差が測定されています。私はまだ自分でこれを検証していません。ベンチマークしたモデルで、それが実際の出力品質にも現れるのかを確認できると面白そうです。JANG-Qは、MLXに適応型量子化を取り入れる作業を進めています。 最終的に私はこう着地しました:
なお、M2とM4のデータを探しています。 やりたいなら、ベンチマークを自分でも実施してください 結果はPull Requestとして貢献してください。私があなたのハードウェアを追加しますし、あなたのユースケースのテストにそれを使うこともできます。ただし貢献する必要はありません。何か動かしてみたなら、結果と発見をコメントしてくれると嬉しいです**。** さて、ベンチマークはここまでにして、実際の問題を解決しに戻りましょう :) この道のりについての所感? もう少しヒントやコツは? また、プロフィールでリンクしているチャンネルでも議論できれば嬉しいです。 全原稿(全チャートと一部の研究データ付き): famstack.dev/guides/mlx-vs-gguf-part-2-isolating-variables [link] [comments] |
GGUF(llama.cpp)vs MLX Round 2:あなたのフィードバックで検証、2つのモデル、5つのランタイム。Ollamaはオーバーヘッドが追加。私の結論。ご意見は?
Reddit r/LocalLLaMA / 2026/3/26
💬 オピニオンIdeas & Deep AnalysisTools & Practical Usage
要点
- 著者は以前のベンチマークを振り返り、M1 Max環境でMLXがGGUFより遅かった点をまず確認したうえで、MLXの問題(プロンプトキャッシュの制限、アテンション最適化、bf16非対応)を解消してから再テストを実施し、さらにオーバーヘッド懸念を減らすためにllama.cppを再コンパイルしている。
- 2つのQAT/量子化モデル(Gemma 12B QAT と Qwen3 30B-A3B)を5つのランタイムで評価した結果、bf16をfp16に切り替えた後は、ほとんどのシナリオで差は数%程度にとどまることが示された。
- Qwen3 30B-A3Bでは、GGUFのQ4_K_Mが、創作ライティング、ドキュメント分類、マルチターンのops-agentプロンプトなどのタスクにおいて、しばしば最も高い有効トークン/秒を提供する。
- 生成スループットについては、今回のテスト構成ではGGUFとMLXは大きくは同程度で、例として約58 tok/s(GGUF)に対して約55〜56 tok/s(MLX)といった具合だった。一方で、プリフィル/長コンテキストへの負荷テストでは、提示された数値上GGUFが依然として有利だった。
- 重要な示唆は、ランタイムの選択が、エンジンレベルの性能差(LM Studio vs コンパイル済みllama.cpp)を支配し得る点であり、著者は「常にMLXを使うべき」といった単純な結論はない、という見解に至っている。