モデル別実行レシピ

Qwen3.8-27Bをハードウェア別に実行:MacはoMLX、RTXはllama.cpp

モデル形式とリクエストをそろえ、MacとRTXで同じQwen3.8-27Bの作業を実行します

Qwen3.8-27BのQ4チェックポイント1は、Apple Silicon搭載MacではMLX2形式をoMLXで、RTXではGGUF3形式をllama.cppで実行します。同じ依頼に各サーバーが回答することを確認し、最初のトークン4と完了までの時間、メモリ使用量を記録します。0.7.1.dev1のINT8 activation prefill5の数値は、M5 Max上のQwen3.8-27B oQ8eに限った結果です。

Qwen3.8-27Bは、質問やコードを入力するとテキストで回答する27Bの密モデルです。まず短いリクエストが最後まで処理されることを確かめ、その後、利用環境に合わせて文脈長6と生成オプションを調整します。

実行条件と要点
  • oMLXはMLXチェックポイントを、llama.cppはGGUFを使います。
  • モデルの読み込みとキャッシュを含む初回実行を、ウォームアップ後の繰り返し実行と分けます。
  • INT8 activation prefillは対応するoQ8eチェックポイントのprefill段階に適用します。
  • 通常の基準応答を確認してから、MTPとKV cache精度を1つずつ変更します。
機器別の実行設定へ移動

まずチェックポイントとMac・GPUのメモリを合わせます

MacのoMLXはMLXに変換したチェックポイントを実行し、RTXのllama.cppはGGUFを読み込みます。同じQwen3.8-27Bという名前でもファイルを相互に使うことはできません。基準ファイルにはMacでmlx-community/Qwen3.8-27B-4bitを、RTXでggml-org/Qwen3.8-27B-GGUFのQ4_K_Mを使います。Q4_K_Mファイルは約17.6 GBですが、実際にはKV cache7と作業バッファの分もメモリが必要です。

24 GBのRTXではコンテキスト4,096 tokenから始め、ブラウザーやエディター用のメモリも残します。Macではユニファイドメモリ8総量とメモリプレッシャーを確認します。両方の環境で同じ依頼を使うと実行結果を比較できます。

文書ブロックから緑と黄色の経路が分かれ、ノートPCとGPU搭載PCにつながっています。
同じモデル系統でも、MacとRTXでは対応するチェックポイント形式が異なります。

MacではoMLXでMLXモデルを読み込みます

Apple Silicon搭載MacでoMLXを開き、モデルフォルダーを指定してサーバーを起動します。モデル検索でMLXチェックポイントmlx-community/Qwen3.8-27B-4bitをダウンロードし、ブラウザーでhttp://localhost:8000/admin/chatを開きます。モデルを選び、次の依頼を送ります。パス文字列を受け取り、ファイルがなければNoneを返し、存在すればUTF-8テキストを読み込むPython関数を書いてください。入力と戻り値の型も説明してください。

正常に応答すると、Pythonコードと入力・戻り値の型の説明がチャット画面に表示されます。失敗した場合は管理画面でモデルの状態とダウンロード完了を確認し、メモリプレッシャーとサーバーログの最初のエラーを調べます。モデル一覧にない場合は、MLXチェックポイントの形式と指定したモデルフォルダーを確認してください。

ファイルアイコンのあるノートPC、ブロック棚、グラフィックカードが色付きの経路でつながっています
MacではMLX、RTXではCUDAとGGUFの実行経路を用意します。

RTXでCUDA版llama.cppサーバーを起動します

CUDA9 Toolkitを用意したRTX PCで、以下のコマンドを使ってCUDA対応llama.cppをビルドし、サーバーを起動します。最後の行の-hfでGGUFリポジトリとQ4_K_Mを選び、-ngl allで可能な限り多くのモデル層をGPU10に載せます。-c 4096はコンテキストを4,096 tokenに設定します。以下の./build/bin/llama-serverパスはLinuxシェル用です。

llama.cppをCUDAでビルドしQ4_K_Mをサーバー実行
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -t llama-server
./build/bin/llama-server -hf ggml-org/Qwen3.8-27B-GGUF:Q4_K_M -c 4096 -ngl all --host 127.0.0.1 --port 8080
CUDAビルド完了後、ローカルアドレスでサーバーを起動します。

サーバーの準備ができたら、ブラウザーでhttp://localhost:8080を開き、モデルを選びます。Macの節で使ったものと同じPythonの依頼を貼り付けて送信してください。

コードと説明が表示されれば、モデルの読み込みとリクエスト経路を確認できます。ビルドに失敗した場合はCMakeがCUDA Toolkitを検出できるか確認してください。サーバーは開くのにモデルが起動しない場合は、ダウンロードの進行状況、リポジトリ名、空きVRAM11を調べ、コンテキストを2,048 tokenに下げて再試行します。

Windows CUDA PCではビルドしたサーバーの実行ファイルを確認します

Windowsでビルドする場合はVisual Studio 2022のC++開発ツールとCUDA Toolkitを用意し、Visual Studio Developer PowerShellでllama.cppのリポジトリを開きます。公式ビルドガイドではLinuxと同じCMake CUDAオプションを使い、サーバーガイドではllama-serverターゲットを個別にビルドします。以下のコマンドでサーバーをビルドし、生成された実行ファイルを探してモデルを指定します。

WindowsでCUDAビルドしQ4_K_Mサーバーを起動
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -t llama-server
$server = Get-ChildItem -Path .\build -Filter llama-server.exe -Recurse | Select-Object -First 1 -ExpandProperty FullName
& $server -hf ggml-org/Qwen3.8-27B-GGUF:Q4_K_M -c 4096 -ngl all --host 127.0.0.1 --port 8080
見つかった実行ファイルを指定のQ4_K_Mモデルとローカルポートで起動します。

サーバーが起動したらhttp://localhost:8080を開いてモデルを選び、Macの節にあるPythonの依頼をそのまま送信します。

正常に応答するとコードと入力・戻り値の説明が表示され、モデル読み込みとリクエスト経路を確認できます。実行ファイルが生成されない場合は、ビルド出力の最初のエラーとCUDA Toolkitの検出を確認してください。サーバーは起動するのにモデル読み込みが失敗する場合は、ログの最初のモデルエラーと空きVRAMを調べます。

初回と繰り返し実行の待ち時間を分けて記録します

まず各サーバーで上記のPython依頼に正常に回答するか確認します。速度を比べるときはモデルの初回読み込み時間を分けて記録し、1回ウォームアップしてから同じ依頼を3回送ります。コンテキストと回答上限を固定し、リクエスト開始、最初のトークン、回答完了までの時間を記録します。RTXではVRAM、Macではユニファイドメモリのプレッシャーも確認します。

入力を長くする場合は、同じPythonの依頼に実際の作業コードの一部を加え、両方の環境に同じテキストを送ります。リクエストが長くなるとプリフィル時間とKV cache使用量が変わる場合があります。MacのMLX Q4とRTXのGGUF Q4_K_Mは形式と量子化12が異なるため、実行したモデルファイルも記録し、ハードウェアとチェックポイントの違いを区別します。

同じ作業を異なるハードウェアで実行するときの記録項目
記録項目確認場所用途
モデル形式・量子化モデルカード・実行ログMacとRTXで使うファイルを区別
最初のトークンまでの時間・完了時間リクエストタイマー入力処理と生成の待ち時間を区別
最大メモリ使用量アクティビティモニタ・GPUモニタ他のアプリ用の余裕を確認
ノートPCと小型デバイスの横にある5つの色付きブロックが線でつながり、先にはチェックマーク付きのメモがあります。
入力長と設定を1つずつ変更し、回答と待ち時間の両方を記録します。

0.7.1.dev1のINT8 prefillは対応モデルで個別に試します

2026年10月9日公開のoMLX 0.7.1.dev1には、Qwen3.8-27B oQ8eのINT8 activation prefill改善が含まれています。モデル設定のExperimental Featuresでこの経路を有効にします。リリース測定にはM5 MaxとoQ8eチェックポイントが使われており、Macの実行手順で使うQ4モデルmlx-community/Qwen3.8-27B-4bitとは別ファイルです。入力長ごとの測定条件と数値は以下の表に示します。

INT8 prefillを試すには、対応するoQ8eファイルと0.7.1.dev1を用意し、短い入力で通常の回答を先に確認します。そのモデルのINT8 activation prefillを有効にし、token数をそろえた入力を3回処理して、プリフィル速度またはTTFT13の中央値を比べてください。M5 Maxで公開された向上幅はプリフィルに関するものなので、decode14 tok/sは別に記録します。

メモリエラーが出たり最初のトークンまで時間がかかったりしたら、コンテキストを短くし、モデル別設定とサーバーログで選択された経路を確認します。INT8 activationは計算に使う表現を変えるため、出力数値と回答品質も確かめてください。設定をoffにして同じリクエストを送り直すと、変更の影響を比較できます。

oMLXリリースのQwen3.8-27B oQ8e INT8 activation prefill測定
M5 Maxの入力長公開された変化比較対象
4K tokenプリフィル +25%プリフィル
16K tokenプリフィル +38%プリフィル

基準結果を記録してからMTPとKV cache精度を変更します

MTP15に対応するQwen3.8-27Bチェックポイントでは、そのモデルのLightning MTPを比較できます。MTPはtoken生成に、KV cache精度は会話状態を保存するためのメモリと計算量に影響します。まず両方を既定値にして回答とメモリ使用量を記録します。MTPだけを有効にした比較を終えてから、KV cache設定だけを変更してください。各段階で同じチェックポイントと質問を使います。

0.7.1.dev1は開発版です。安定性を優先する場合は0.7.0を使い、新機能は別のテスト環境で確認します。リクエストが頻繁に失敗する場合は、MTPやKV cacheを調整する前にサーバーログ、コンテキスト長、VRAMまたはユニファイドメモリの状態を確認してください。

付録:別のNVIDIAサーバーでBF16 vLLMを実行する場合

27BパラメータにBF1616の2バイトを掛けると、weightだけで約54 GBです。この計算には実行バッファとキャッシュを含みません。以下のコマンドは、上記のRTX 24 GB向けQ4_K_Mレシピではなく、BF16 weightを格納できる別のNVIDIAサーバー用です。主レシピを実行する場合はこの付録を飛ばし、先ほどのllama.cppコマンドを使ってください。

別サーバーでBF16 vLLMを起動
vllm serve Qwen/Qwen3.8-27B --host 127.0.0.1 --port 8000 --max-model-len 8192 --gpu-memory-utilization 0.90
BF16 weightを格納できる別サーバー向けの例です。

最初のコマンドを実行したら、サーバープロセスが動作し続けているか確認します。応答がない、またはプロセスが終了した場合は、ターミナルに出た最初のエラーとGPUメモリの状態を確認してください。サーバーが起動したら、2つ目のコマンドで登録済みモデルIDを調べ、リクエストに使います。

サーバーが通知したモデルIDを取得
curl -N http://127.0.0.1:8000/v1/models
リクエストには応答に表示されたモデルIDを使います。

用語の注釈

  1. チェックポイント — 学習済みモデルの重みなどを保存したファイルです。同じモデル系列でも、版や用途によって異なるチェックポイントを使うことがあります。

    本文に戻る
  2. MLX — Appleが開発する機械学習フレームワークで、Apple SiliconのCPUとGPUが共有するメモリを使ってモデルを実行します。

    本文に戻る
  3. GGUF — モデル情報を格納するファイル形式で、llama.cpp系のツールで広く使われます。

    本文に戻る
  4. トークン — モデルが入力や出力を分けて処理する単位です。

    本文に戻る
  5. プリフィル — LLMが入力プロンプトを読み、各トークンの内部表現を計算する段階です。プロンプトが長いほど処理するトークンが増えます。

    本文に戻る
  6. コンテキスト長 — 1回のリクエストでモデルが扱える入力と生成内容のトークン範囲です。上限や実際のメモリ使用量はモデルと実行設定によります。

    本文に戻る
  7. KVキャッシュ — 過去トークンのAttention用キー・バリューを保存し、後続トークン生成で再利用するメモリです。容量はコンテキスト長やバッチサイズで変わります。

    本文に戻る
  8. ユニファイドメモリ — CPUとGPUが同じ物理メモリ領域を共有する構造です。

    本文に戻る
  9. CUDA — NVIDIA GPUで汎用計算を行うソフトウェア基盤です。

    本文に戻る
  10. GPU — 多くの計算を並列に処理するプロセッサーです。AIモデルの実行ではモデル計算を担います。

    本文に戻る
  11. VRAM — グラフィックカードのGPUが使うメモリです。モデルの重みや計算途中の値を保存します。

    本文に戻る
  12. 量子化 — モデルの重みや計算値を少ないビット数で表し、保存容量やメモリ使用量を減らす方法です。表現が粗くなるため、精度にも影響することがあります。

    本文に戻る
  13. 最初のトークンまでの時間 — リクエスト送信から最初の出力トークンが届くまでの時間です。

    本文に戻る
  14. トークンのデコード — 入力とそれまでの回答をもとに、次の出力トークンを順に生成する段階です。

    本文に戻る
  15. MTP — 複数の将来トークンを一度に予測する学習目標、またはそれを行うモデル構成です。投機的デコーディングでは、その予測を候補トークンとして提案できます。

    本文に戻る
  16. BF16 — モデルの数値に使う16ビット浮動小数点形式です。指数部はFP32と同じ幅で、同程度に広い値の範囲を表せます。

    本文に戻る

よくある質問

この記事で最初に確認すべきことは何ですか?
Qwen3.8-27BのQ4チェックポイントは、Apple Silicon搭載MacではMLX形式をoMLXで、RTXではGGUF形式をllama.cppで実行します。同じ依頼に各サーバーが回答することを確認し、最初のトークンと完了までの時間、メモリ使用量を記録します。0.7.1.dev1のINT8 activation prefillの数値は、M5 Max上のQwen3.8-27B oQ8eに限った結果です。
必要なメモリはどのくらいですか?
MacのoMLXはMLXに変換したチェックポイントを実行し、RTXのllama.cppはGGUFを読み込みます。同じQwen3.8-27Bという名前でもファイルを相互に使うことはできません。基準ファイルにはMacで`mlx-community/Qwen3.8-27B-4bit`を、RTXで`ggml-org/Qwen3.8-27B-GGUF`のQ4_K_Mを使います。Q4_K_Mファイルは約17.6 GBですが、実際にはKV cacheと作業バッファの分もメモリが必要です。

実行レシピ

機器別の設定

1人で使う場合

使う機器を選ぶと、起動コマンドと調整できる設定が表示されます。

使用可能メモリ: 56GB / 帯域幅: 307GB/s

プロファイル

Apple MacBook Pro M5 Pro (64GB)

メモリに収まる

推奨ランタイム: oMLX (MLX 4ビット(GGUF Q4_K_Mとは別形式)) · ドキュメントに基づくランタイム設定

インストール後の初回実行や、毎日安定して使いたいときに

プロファイルのコンテキスト長

16,384 トークン

ランタイムの文書に基づく設定MBP M5 Pro 64GB · Q4 · 要求 1個

ランタイムのドキュメントに基づく初期設定です。下の手順に沿って調整し、速度を比べてください。

デコード速度の推定値

13.9 ~ 15.4 tok/s

1人で使う場合の推定値

最初のトークンまでの推定時間

36.0 ~ 41.9秒

プリフィル: 392 ~ 456 tok/s

推定メモリ使用量

約 21.21GB / 56GB

残余の余裕:少ない 34.8GB

サーバーアドレス

http://127.0.0.1:8000

ローカルのみ · 127.0.0.1

推定値は、計算ツールが推奨する量子化・高速化設定と 16,384トークンを基準にしています。上記の実行設定を測定した値ではありません。

このプロファイルの設定

設定値この設定にする理由
重みMLX 4ビット(GGUF Q4_K_Mとは別形式)MLXモデルのディレクトリを使います。Q4_K_MのGGUFとはファイル形式が異なります。
入力長の確認16,384リクエスト前にモデル設定の入力上限を確認してください。この起動コマンドではコンテキスト長を指定していません。
KVキャッシュモデル設定で確認この起動コマンドではKVキャッシュの精度を指定していません。
プリフィルのバッチサイズランタイム設定で確認llama.cppのbatch-sizeとubatch-sizeを、MLXの設定値としてそのまま使わないでください。
同時リクエスト数11件のリクエストの速度を測ります。複数リクエストを合わせた処理量とは分けて確認します。
メモリの余裕2GB以上モデルの読み込み後に、実際のメモリ使用量とスワップの有無を確認します。

MBP M5 Pro 64GB 実行コマンド(oMLX)

Apple Silicon · MLX モデル · メモリ ガード
MODEL_DIR="$HOME/.omlx/models"
omlx serve \
  --model-dir "$MODEL_DIR" \
  --host 127.0.0.1 \
  --port 8000 \
  --max-concurrent-requests 1 \
  --memory-guard balanced
まずこの設定で基準速度を記録し、その後は下の手順に沿って一項目ずつ変更します。

起動後の確認

  1. 01起動ログで、モデルの読み込み完了と実際のコンテキスト長を確認します。
  2. 02ウォームアップ後はリクエストを1件ずつ送ります。同じ長さの異なる入力を3つ使い、キャッシュを再利用しない初回の処理時間を記録します。
  3. 03同じ入力を繰り返した結果は、キャッシュ再利用の記録として分けます。初回入力の結果と混ぜないでください。
  4. 04プリフィルtok/s、デコードtok/s、ピークメモリをまとめて記録し、その後は一項目ずつ変更します。

変わる点と注意点

  • コンテキスト長と同時リクエスト数を控えめにしているため、機器の最大処理量より低い結果になることがあります。

1つずつ調整

高速化の手順

複数の値を一括で変更すると原因を特定するのが難しいです。

  1. STEP 1

    基準値を保存

    初回入力とキャッシュ再利用を分け、それぞれ3回記録します。プリフィル、デコード、ピークメモリを一緒に比較します。

    とき: エラーがある場合やメモリの余裕が2GB未満の場合は、次の段階へ進まないでください。

  2. STEP 2

    プリフィルのチャンクサイズを調整

    1,024 → 2,048 → 4,096の順に増やし、長い入力のTTFTとピークメモリを比べます。

    とき: TTFTが短くならない場合やピークメモリが急増する場合は、直前の値へ戻します。

  3. STEP 3

    KVキャッシュ調整

    コンテキスト長を確保したいときだけ、同じ質問でQ8キャッシュとF16/BF16の基準値を比較します。

    とき: 出力に差が出る場合や、必要なコンテキスト長をすでに確保できている場合は、標準の精度を維持します。

  4. STEP 4

    MTP・投機的デコーディング

    対応モデルだけで有効にし、コードと通常の文章を分けて、採用率と実際のデコードtok/sを測定します。

    とき: 3回の中央値が基準値より良くならなければ、無効に戻します。

  5. STEP 5

    コンテキスト拡張

    実際に必要な長さまで段階的に2倍ずつ伸ばし、入力途中の情報を見つけられるかと、スワップの有無を確認します。

    とき: 情報を探す精度が落ちたり、スワップ・メモリ圧縮が始まったりしたら、一段階短くします。

自分の機器の測定記録を送る

同じ条件で3回以上測定したJSONを読み込んでください。送信ボタンを押すまでは、このブラウザ内でのみ確認します。

受け付けるのは機器・モデル・実行条件と測定値だけです。プロンプト・回答・元のログ・ファイルパスは含めないでください。

記録ファイルがなければ、起動中のローカルサーバーと測定ツールで作成できます。Node.js 20以上が必要です。結果の自動送信は行いません。

内容を確認したユーザーの投稿記録です。このサイトが直接測定した結果とは区別しています。

設定の問題を報告

この設定でどこにつまずいたかを教えてください。報告を読めるのは管理者だけです。

報告する設定 · MBP M5 Pro 64GB · Qwen3.8 27B · バランス

変更履歴

サイトの説明を変更した記録です。インストール済みのエンジンやモデルのバージョンを自動で確認した結果ではありません。

  1. Macのモデル形式と実行設定を訂正

    MacのMLX実行経路をGGUF Q4_K_Mと区別し、エンジン名・モデル形式・コマンドの表記を揃えました。コマンドで指定していないKVキャッシュ精度とプリフィルのバッチ設定は、モデル・ランタイム設定で確認する案内に変更しました。

    コマンドは同じなのにバッチだけが大きくなるように見えていたMLX速度プロファイルも削除しました。

  2. Qwen 27BのSpark設定から別エンジンのオプションを削除

    Spark 1台・2台のSGLang設定に、llama.cpp専用の投機的デコーディングオプションが付かないよう修正しました。DFlash2・DSpark構成は、それぞれの専用モデルと実行経路を維持します。

  3. 初回入力とキャッシュ再利用の記録を分離

    検証手順を変更し、初めて読む入力と同じ入力を繰り返した結果を別々に記録するようにしました。キャッシュの効果を初回プリフィル処理量や機器の差に含めません。

  4. 機器・プロファイルの保存と再表示を追加

    実行可能なプロファイルを機器の選択と一緒にこのブラウザに最大5件保存し、ガイド一覧から再び開けるようにしました。保存後に公開設定が変わったりプロファイルの提供が終了したりした場合は、実行前の再確認を案内します。

  5. 実行エンジンの説明へのリンクを追加

    設定に表示されるエンジン名から、該当する実行プログラムの説明へ移動できるようにしました。エンジンを特定できない経路に、推測で別のプログラムをリンクすることはありません。