Mac上のLM StudioでLLMを動かすとき、MLX版とGGUF版があって、最近はMLX版のリリースが速いしMLXに発展してほしいし出力速度も速いし、ということでMLX版をなるべく使うようにしてたのですが、プロンプト処理がGGUF版に比べてかなり遅いようです。
そのため、エージェント処理などでトークンが長くなると使い物にならなくなっていました。
これはGGUF版GLM-4.7で「注文の多い料理店」を要約してもらったところ。
unslothさんのQ4_K_Mを使っています。
出力は15.25tok/sec、最初のトークンまでは28.44秒です。

一方でMLX版4ビット。
出力18.33tok/sec、最初のトークンまで60.73秒です。

出力トークン数が違うので1500トークンだったとすると、GGUF版では1500/15.25+28.44=127秒、MLX版では=142秒と、MLX版のほうが15秒遅くなります。出力が長くなればトータルの時間は同じか逆転していきますが、体感では何もなく待たされるほうが嫌ですね。
LLMの処理は、プロンプトの入力処理と生成出力の処理に分かれます。ここで、プロンプト入力は計算主体、生成出力はデータフロー主体という風になってると思います。
出力速度はMLX版のほうが速いですね。
データフロー主体になるとハードウェアの帯域幅に律速されます。効率よい実装にはハードウェアの理解が必要です。恐らくMLX版はハードウェアを作ってるAppleが主体なのでデータ入出力の効率がいいんだと思います。一方でGGUFを動かすllama.cppはGeorgi Gerganov(GG)さんのML用計算ライブラリGGMLがベースで、計算の最適化には強いけどCUDA以外へのハードウェアの対応は弱いように見えます。
そのため、GGUF版は少し遅いというふうになっているんじゃないかと思います。
問題はプロンプト処理ですね。
計算主体になると、計算アルゴリズムの最適化が重要で、ある程度はハードウェア非依存に高速化できます。
ここがllama.cppのほうが実装が進んでいて、MLXにかなりの差をつけてるように見えます。
そしてこれは、トークンが長くなると、恐らくトークンの2乗に比例して遅くなっていきます。10kトークンあたりになるとかなりの差になります。
GLM-4.7はThinkingが長い傾向があるんですが、難しい問題を考えさせるとコンテキストが伸びてどんどん遅くなっていきます。このときは17分Thinkingしてました。

ということで、短い質問に答えてもらったり数往復のやりとりをするだけならMLX版でもいいですが、長い文章を要約させたりコーディングエージェントを動かすなどするときは、MLX版よりもGGUF版を使うほうがよさそうです。
ただ、ここは実装次第で改善できる部分なので、使うタイミングで自分の環境や自分の使おうとしているモデルで改めて確認をしたほうがいいと思います。
