以前、RTX 3060では7Bが最適という話を書きました。今回はそこから一歩進んで、「同じモデルを、違う"推論エンジン"で動かすと、どれくらい変わるのか」を条件を揃えて測ってみます。ローカルLLMは、モデルが同じでも走らせるエンジン次第で速さもメモリも変わる——その実際を並べてみました😊
・推論エンジン(llama.cpp / MLX)の違い
・同じ Qwen2.5-Coder-7B・同じQ4でのtok/s・ロード時間・メモリの実測
・量子化とは何をしているのか、VRAMに載るとは何かを図解
・7Bと14Bのサイズ差、自分のPCならどれが最適かの判断表
「推論エンジン」って何が違うの?
ローカルLLMは、①モデル(頭脳のデータ)と②それを動かすエンジン(実行ソフト)の組み合わせで動きます。同じモデルでも、エンジンが違えば速さやメモリの使い方が変わります。今回の主役は3つです。
- llama.cpp:いちばん広く使われる定番。MacではMetal(AppleのGPU)、WindowsではCUDA(NVIDIAのGPU)を使って、同じコードで動く。モデル形式はGGUF。
- MLX:Appleが作ったApple Silicon専用のフレームワーク。M系チップの統合メモリに最適化されている。モデル形式は専用。
- CUDA:厳密にはエンジンではなくNVIDIA GPUの土台ですが、ここでは「llama.cppをCUDAで動かした場合」を指します。
条件を揃えて測る(同じモデル・同じ量子化)
比較で大事なのは条件を揃えること。今回は次で固定しました。
- モデル:Qwen2.5-Coder-7B-Instruct(コード特化・軽量)
- 量子化:4bit(llama.cppは Q4_K_M、MLXは 4bit)
- 測る指標:生成速度(tok/s=1秒あたりの文字数のようなもの)/初回ロード時間/メモリ使用量
- マシン:Mac(Apple M4・32GB)。Windows(RTX 3060)は後半で
tok/s は「1秒間にどれだけ言葉を吐けるか」の目安。数字が大きいほど、返事がサクサク返ってきます。
Mac対決:llama.cpp(Metal)vs MLX
まずMac上で、同じ7B・同じ4bitを、llama.cpp(Metal)とMLXで走らせ比べました。
| エンジン(Mac M4・7B・4bit) | 生成速度 | ロード時間 | メモリ |
|---|---|---|---|
| llama.cpp(Metal) | 20.6 tok/s | 2.87秒 | 約4.6GB |
| MLX | 21.1 tok/s | 0.79秒 | 約4.2GB |
結果はほぼ互角、わずかにMLXが速い。生成速度はほとんど差がありませんが(20.6 vs 21.1 tok/s)、ロードはMLXが明確に速く(0.79秒 vs 2.87秒)、メモリもMLXがやや少なめでした。MLXはApple Silicon専用に作られているぶん、M系チップでは相性がいい印象です。一方 llama.cpp はWindowsでも同じコードで動く(CUDA)という強みがあり、これは後半で効いてきます。
モデルの大きさで変わる:7B vs 14B
エンジンの次は、モデルの大きさ。同じ llama.cpp(Metal)で、7Bと14Bを比べました。
| モデル(Mac M4・Q4・llama.cpp) | 生成速度 | メモリ |
|---|---|---|
| Qwen2.5-Coder 7B | 20.6 tok/s | 約4.6GB |
| Qwen2.5-Coder 14B | 10.1 tok/s | 約8.9GB |
14Bは7Bの約2倍の重さで、速度はおおよそ半分、メモリは約2倍。当然といえば当然ですが、「賢さ」と「速さ・軽さ」はトレードオフだとハッキリ数字で出ます。p941で「12GBのGPUなら7Bが最適」と書いたのも、この関係が背景にあります。
量子化とは何をしているのか(図解)
ここまで「Q4」「4bit」と言ってきた量子化について、平易に整理します。モデルは大量の数値(重み)の集まりです。元は1個あたり16ビットで持っていますが、これを4ビットや8ビットに"間引いて"小さくするのが量子化。写真をJPEGで圧縮するのに似ています。
ビットを削るほど小さく・速く・省メモリになりますが、精度(賢さ)は少しずつ落ちます。とはいえ、Q8とQ4の賢さの差は用途によっては体感しづらく、個人利用ではQ4_K_Mが定番の落としどころ。今回の計測もそこに合わせています(Q6/Q8の実測は今回は行わず、サイズは一般的な目安を載せています)。
「VRAMに載る」とはどういうこと?
ローカルLLMで最重要なのが、この「VRAM(GPUメモリ)に載るか」です。GPUで速く動かすには、モデル全体がVRAMに収まっている必要があります。収まっていれば爆速、はみ出すと一気に激遅になります。
載りきる/はみ出すの分かれ目:たとえばVRAM 12GBのGPUなら、7B(Q4で約4.7GB)は余裕で載るので速い。14B(Q4で約9GB)もギリギリ載る。でも、ほかのアプリがVRAMを使っていて載りきらないと、はみ出した分をシステムメモリへ退避(スピル)してしまい、生成が数十秒級まで落ち込むことがあります。前回の音声対話でも、これで一度ハマりました。速さを出したいなら、まずVRAMを空けてモデルを丸ごとGPUに載せる——これが鉄則です。
Macの統合メモリ(M4)は、CPUとGPUが同じメモリを共有する仕組みなので、この「VRAMに載るか」の感覚が少し違います。32GBあれば14Bでも余裕で動くのは、統合メモリの強みですね。
自分のPCならどのサイズが最適か
ここまでを踏まえて、手元のマシンならどのモデルサイズが良いかの目安を表にしました。
| 環境 | おすすめサイズ(Q4) | ひとこと |
|---|---|---|
| VRAM 8GB GPU | 7B | 14Bははみ出しやすい。7Bが安定 |
| VRAM 12GB GPU(RTX 3060等) | 7B(14Bも可) | 7Bが最速・最安定。14Bはギリ載る |
| Mac(統合メモリ16GB) | 7B | 14Bも動くが余裕は7B |
| Mac(統合メモリ32GB以上) | 7B〜14B | 14Bも快適。速さ優先なら7B |
| GPUなし(CPUのみ) | 7B(小さめ量子化) | 動くが遅い。用途を絞る |
ざっくり言えば、「まずは7B・Q4から」が失敗しにくい。物足りなければ14Bへ、というのが実測を踏まえた結論です。
WindowsのCUDAはどうか
ここまではMac(Metal / MLX)の話でした。もうひとつの主役、Windows(RTX 3060)でのllama.cpp(CUDA)を、同じモデル・同じQ4・同じ計測コードで測りました。llama.cppはMac(Metal)とWindows(CUDA)を同じコードで動かせるのが強み。結果は——CUDAの圧勝でした😳
| 同じ7B・Q4 | 生成速度 | ロード | メモリ |
|---|---|---|---|
| Mac(Metal・M4) | 20.6 tok/s | 2.87秒 | 約4.6GB |
| Mac(MLX・M4) | 21.1 tok/s | 0.79秒 | 約4.2GB |
| Windows(CUDA・RTX 3060) | 62.1 tok/s | 1.79秒 | 約4.6GB |
RTX 3060のCUDAは、M4のMetal/MLXの約3倍のtok/sが出ました(62.1 vs 20.6/21.1)。14Bでも CUDA 32.1 tok/s vs Metal 10.1 tok/s と、やはり約3倍。ロード時間やメモリはMacと同水準で、7B(約4.6GB)も14B(約8.8GB)も12GBのVRAMに全部載りきり、溢れずに全力を出せていました。専用GPU(NVIDIA)の生成速度はやはり強い——というのが、条件を揃えた実測での結論です。
そして注目は、これがMacと"同じllama.cppのコード"で動いていること。エンジンのビルドこそ CUDA 版ですが、呼び出すコードはエージェント本体とまったく同じ。「Macで書いて、Windowsの速いGPUで走らせる」が地続きでできるのは、大きな強みです。
ただ、Windowsで1か所だけ引っかかりました。計測スクリプトが冒頭で使っていた import resource(メモリ使用量を測るための標準モジュール)が、実はUnix(Mac/Linux)専用でWindowsには存在せず、Windowsでは実行した瞬間に「モジュールが無い」と落ちてしまったのです。対処として、resource が無ければ Windows のAPI(GetProcessMemoryInfo)でメモリを取るように、共通コード側で吸収しました。tok/sやロード時間の測り方は変えていません。「同じコードで動く」とはいえ、OSごとの小さな差はやはり出る——今回もそこは1つ学びでした。
まとめ
同じモデル・同じ量子化で、ローカルLLMの推論エンジンを並べてみました。
- Mac(M4)で llama.cpp(Metal)と MLX はほぼ互角(20.6 vs 21.1 tok/s)。MLXはロードが速く省メモリで、Apple Silicon相性がよい
- Windows(RTX 3060・CUDA)は、同じllama.cppのコードでMacの約3倍速(7B:62.1 vs 20.6/21.1 tok/s)。専用GPUの生成速度は強い
- モデルは14Bは7Bの約半分の速さ・約2倍のメモリ。賢さと速さはトレードオフ
- 量子化=重みのビットを削って小さく・速くする仕組み。個人利用はQ4_K_Mが定番
- 最重要は「VRAMに載るか」。載れば爆速、はみ出すと激遅。まずは7B・Q4からが失敗しにくい
モデルが同じでも、エンジンやサイズ、量子化でこれだけ挙動が変わるのは、実際に測ってみて改めて面白かったです。「速いエンジンはどれ?」の答えは「使っているチップによる」——Macなら MLX か llama.cpp、Windowsなら llama.cpp(CUDA)、どちらも同じモデルがちゃんと動きます😊
それでは、今回はここまで。最後までありがとうございました😊
【補足】計測環境=Mac(Apple M4・32GB)/Windows(RTX 3060・12GB/llama-cpp-python CUDAビルド)/モデル=Qwen2.5-Coder-7B・14B(Q4_K_M)+MLX 4bit(mlx-community)/エンジン=llama.cpp(Metal・CUDA)/MLX(mlx-lm)。tok/sはウォームアップ後に2回測り安定値を採用。数値はモデル・プロンプト・マシン・VRAMの空きで変わる実測の一例です。量子化ごとのファイルサイズは一般的な目安値です。