MacとNVIDIA DGX Sparkを組み合わせたLLMワークロードの最適化手法

MacとNVIDIA DGX Sparkを組み合わせたLLMワークロードの最適化手法

  1. 目次
  2. 概要
  3. アーキテクチャ 1: EXO Framework — PrefillとDecodeの分離(分散推論)
    1. コンセプト
    2. 技術的メカニズム
    3. セットアップ方法
    4. 要件と注意点
    5. 出典
  4. アーキテクチャ 2: MacをDGX Sparkのクライアントとして使用 (Ollama / vLLM via API)
    1. コンセプト
    2. DGX Spark側のオプション
      1. オプションA: Ollama(最も簡単 — インストール済み)
      2. オプションB: vLLM via Docker(高性能)
      3. オプションC: LM Studio(ヘッドレスサーバーモード)
      4. オプションD: LM Studio + LM Link(暗号化リモートアクセス)
    3. Mac側のクライアント
    4. 重要な考慮事項
    5. 出典
  5. アーキテクチャ 3: MacからDGX SparkへのVS Code Remote-SSH
    1. コンセプト
    2. セットアップ方法
    3. Jupyter + GPUカーネルによる高度なワークフロー
    4. 重要な考慮事項
    5. 出典
  6. アーキテクチャ 4: MacからDGX SparkへのSSHトンネル経由のJupyterLab
    1. コンセプト
    2. セットアップ方法
    3. 重要な考慮事項
    4. 出典
  7. アーキテクチャ 5: DGX Spark + Mac Studioでのllama.cpp — 完全ガイド
    1. 5.1 NVIDIA公式プレイブック (DGX Sparkでのllama.cpp)
      1. ビルド手順 (NVIDIA公式ガイドより)
      2. NVIDIA推奨のモデルサポート
    2. 5.2 Blackwell SM121 ビルドフラグ — コミュニティのベストプラクティス
      1. ビルド問題のトラブルシューティング
    3. 5.3 DGX Spark上でのデュアルサーバー — 2つのモデルを同時に実行
      1. 設定例: Qwen3-Coder-Next 80B + Gemma 4 26B
      2. デュアルサーバーのメモリ使用量 (実測値)
      3. Macからのクライアント利用
    4. 5.4 GB10ユニファイドメモリ・アーキテクチャ向けの主要なllama.cpp最適化
      1. 1. --no-mmap はDGX Sparkでは必須
      2. 2. MXFP4量子化 — Blackwellネイティブの加速
      3. 3. KVキャッシュq8_0量子化 — スループットの大幅な低下なしにメモリを削減
      4. 4. 高速なモデルロードのためのNVMeリード・アヘッド調整
      5. 5. ユニファイドメモリのプレッシャー — ページキャッシュのフラッシュ
    5. 5.5 DGX Sparkにおけるllama.cppベンチマーク
    6. 5.6 Mac Studioでのllama.cpp — Metalバックエンド
      1. Mac Studio vs DGX Spark パフォーマンス比較 (llama.cpp特有)
    7. 5.7 llama.cppとMacクライアントの統合
      1. Open WebUI経由 (ブラウザベース)
      2. Continue.dev経由 (VS Code拡張機能)
      3. Ollamaクライアント経由 (llama.cppへのルーティング)
    8. 5.8 GB10におけるllama.cppのコミュニティ・リソース
    9. 出典
  8. パフォーマンス比較と各アプローチの使い分け
    1. 各アプローチの使い分け
  9. まとめ表
  10. 参考文献

目次

  1. 概要
  2. アーキテクチャ 1: EXO Framework — PrefillとDecodeの分離(分散推論)
  3. アーキテクチャ 2: MacをDGX Sparkのクライアントとして使用 (Ollama / vLLM via API)
  4. アーキテクチャ 3: MacからDGX SparkへのVS Code Remote-SSH
  5. アーキテクチャ 4: MacからDGX SparkへのSSHトンネル経由のJupyterLab
  6. アーキテクチャ 5: DGX Spark + Mac Studioでのllama.cpp — 完全ガイド
  7. パフォーマンス比較と各アプローチの使い分け
  8. まとめ表
  9. 参考文献

概要

はい — Apple Mac(Mシリーズチップ搭載のMacBook Pro、Mac Studio、またはMac mini)とNVIDIA DGX Sparkを組み合わせて大規模言語モデル(LLM)を実行するための、確立された手法が複数存在します。アプローチは大きく2つのカテゴリーに分けられます。

  1. 分散型ヘテロジニアス推論 — 単一の推論リクエストに対して、両方のデバイスが計算リソースを能動的に提供します。
  2. クライアント・サーバー / リモート開発 — MacはIDEまたはターミナルクライアントとして機能し、すべての重いGPU計算はSSHまたはローカルネットワークAPIを介してアクセスされるDGX Spark上で行われます。

以下に、各アプローチの詳細な解説を示します。


アーキテクチャ 1: EXO Framework — PrefillとDecodeの分離(分散推論)

コンセプト

最も革新的な組み合わせ戦略は、EXO Labs(GitHubのオープンソースプロジェクト)によって開拓されました。EXOは、Macを単なるシンクライアントとして使うのではなく、ワークロードを2つのフェーズに分割することで、単一のLLM推論リクエスト内で両方のマシンを使用します。

  • プリフィル・フェーズ(プロンプト処理): 高い計算能力(GB10 Blackwell GPU上で約100 TFLOPsのFP16)を持つDGX Sparkに割り当てます。
  • デコード・フェーズ(トークンごとの生成): メモリ帯域幅が非常に高い(DGX Sparkの273 GB/sに対し、819 GB/s)Mac Studio M3 Ultraに割り当てます。

技術的メカニズム

キーとなる革新技術は、レイヤーごとのKVキャッシュ・ストリーミングです。プリフィルが完了してからKVキャッシュを転送するのではなく、各レイヤーのKVベクトルが計算され次第、M3 Ultraへストリーミングされます。Mac Studioは、DGX Sparkが後続のレイヤーを処理している間に、そのレイヤーの作業を開始できます。これにより、計算とネットワーク通信を完全にオーバーラップさせることが可能です。

Llama-3.1 8B(8,192トークンのプロンプト)の場合:

設定 プリフィル時間 生成時間 合計時間 高速化率
DGX Spark単独 1.47s 2.87s 4.34s 1.9x
M3 Ultra Mac Studio単独 5.57s 0.85s 6.42s 1.0x (ベースライン)
DGX Spark + M3 Ultra (組み合わせ) 1.47s 0.85s 2.32s 2.8x

この組み合わせ設定は、Mac Studio単独で使用する場合よりも2.8倍速く、DGX Spark単独の場合よりも1.9倍高速です。標準的な10GbE接続を介した転送時間は、レイヤーあたりの計算時間よりも短いため、KVキャッシュ・ストリーミングのオーバーヘッドは実質的に隠蔽されます。

セットアップ方法

  1. Mac(Mシリーズ)とDGX Sparkの両方にEXOをインストールします。同じローカルネットワーク内にある必要があります。
  2. exoを実行します。接続されているすべてのデバイスを自動的に検出し、計算スループット、メモリ帯域幅、メモリ容量、およびネットワーク特性をプロファイリングします。
  3. モデルを開始します。EXOは、フェーズの配置、KVストリーミングのスケジューリング、および変化するネットワーク条件への適応を透過的に処理します。

要件と注意点

  • Mac Studio(M3 Ultraを推奨)とDGX Sparkは、同じローカルネットワーク内(10GbEが理想)にある必要があります。
  • 本稿執筆時点では、EXO 1.0は早期アクセス/招待制でした。EXOクラスターにおけるLinux/PCのGPUサポートは現在開発中です。
  • Mac Studio M3 Ultraの512GBユニファイドメモリにより、GPUのワークロードと並行して非常に大きなモデルを保持できます。

出典

  • EXO Labs Blog: “Combining NVIDIA DGX Spark + Apple Mac Studio for 4x Faster LLM Inference with EXO 1.0” (https://blog.exolabs.net/nvidia-dgx-spark/)
  • EXO GitHub Issue #1102 on Mac Studio + DGX Spark support (https://github.com/exo-explore/exo/issues/1102)

アーキテクチャ 2: MacをDGX Sparkのクライアントとして使用 (Ollama / vLLM via API)

コンセプト

これは最もシンプルで広く使われている手法です。すべてのLLM推論エンジンをDGX Spark上で実行し、ローカルネットワーク経由でOpenAI互換のREST APIを使用してMacから操作します。

DGX Spark側のオプション

オプションA: Ollama(最も簡単 — インストール済み)

# DGX Sparkのターミナルで
ollama pull gpt-oss:120b         # モデルをダウンロード
ollama serve                     # APIサーバーを起動(デフォルトポート11434)

その後、Macのターミナルやあらゆるアプリケーションから:

curl http://<DGX_SPARK_IP>:11434/api/generate -d '{
   "model": "gpt-oss:120b",
   "prompt": "Hello, write a haiku about AI.",
   "stream": false
}'

オプションB: vLLM via Docker(高性能)

GB10向けにパッチを適用したvLLMコンテナをDGX Spark上に構築・実行し、ポート8000でOpenAI互換APIを提供します。Macからは、http://<DGX_SPARK_IP>:8000/v1 を指定してあらゆるLLMクライアントから接続できます。

オプションC: LM Studio(ヘッドレスサーバーモード)

DGX Sparkにllmster(ヘッドレスLM Studioデーモン)をインストールします:

curl -fsSL https://lmstudio.ai/install.sh | bash
lms server start --bind 0.0.0.0 --port 1234
lms load openai/gpt-oss-120b    # モデルのダウンロードと提供

Macからは、http://<DGX_SPARK_IP>:1234/v1 を指定してOpenAI互換クライアントから接続できます。

オプションD: LM Studio + LM Link(暗号化リモートアクセス)

デバイスが同じLAN内にない場合でもリモートアクセスできるように、LM Link(Tailscaleをベースにしたエンドツーエンド暗号化メッシュVPN)を設定します。リンクされると、MacとDGX Sparkは同じ暗号化トンネルを共有します。MacのLM Studioの接続先をlocalhost:1234に設定すれば、Spark上のリモートモデルにシームレスにアクセスできます。

Mac側のクライアント

  • ターミナル: 上記のいずれかのAPIに対して直接curl / wgetを実行。
  • LM Studio (Mac): リモートサーバーURLに接続するか、LM Linkを使用してシームレスにアクセス。
  • ブラウザでのOpen WebUI: MacのSafariやChromeからhttp://<DGX_SPARK_IP>:3000にアクセス。
  • AIコーディングツール (例: Cursor AI, Continue.dev): DGX SparkのIPとポートをローカルLLMエンドポイントとして設定。
  • あらゆるOpenAI互換ライブラリ: PythonやJavaScriptなどで、base_urlをSparkのAPIエンドポイントに設定して使用。

重要な考慮事項

  • シングルノード推論の場合、すべてのモデルはDGX Sparkの128GBユニファイドメモリに収まる必要があります。
  • 128GBを超えるモデル(例: 229Bパラメータを持つMiniMax-M2.5のように115 GiBのGPU VRAMとKVキャッシュを必要とする場合)については、ConnectX-7 (200 Gbps)を介して接続された2台のDGX Sparkがテンソル並列化によって推論を分散できます。Macは、このデュアルSparkクラスターに対する純粋なクライアントとして機能します。

出典

  • NVIDIA Build Playbook: “LM Studio on DGX Spark” (https://build.nvidia.com/spark/lm-studio)
  • NVIDIA NIM Documentation: “Deploy on DGX Spark” (https://docs.nvidia.com/nim/large-language-models/1.15.0/deploy-on-dgx-spark.html)
  • EXO Labs Blog: EXO distributed inference framework

アーキテクチャ 3: MacからDGX SparkへのVS Code Remote-SSH

コンセプト

macOSを主要なビジュアルインターフェースとして使用し、VS Code / Cursorの「Remote – SSH」拡張機能を介して、DGX Sparkをヘッドレスな計算バックエンドとして使用します。すべてのコード、ターミナル、およびAIエージェントとのやり取りは、洗練されたMacネイティブのUIを通じて行われますが、重い計算はDGX上で実行されます。

セットアップ方法

  1. Mac: VS CodeまたはCursor (AI IDE)をインストール。
  2. Mac: MarketplaceからRemote – SSH拡張機能をインストール。
  3. Macのターミナルで、~/.ssh/configにホストエントリを追加:
Host DGX-Spark
    HostName <DGX_SPARK_IP_OR_hostname.local>
    User <your_username>
    Port 22
  1. VS Code/Cursorで: 緑色の「><」ボタンをクリック → 「Connect to Host…」を選択 → DGX-Sparkを選択。
  2. 初回接続時にパスワードを入力。ステータスバーに「SSH: DGX-Spark」と表示されます。

接続が完了すると、すべてのターミナルコマンド、ファイルの編集、Pythonスクリプト、およびAIエージェントとのやり取りは、お馴染みのMacネイティブのVS CodeまたはCursorインターフェースを通じて行われながら、直接DGX Spark上で実行されます。

Jupyter + GPUカーネルによる高度なワークフロー

ノートブックベースの開発の場合:

  1. MacからDGX SparkにSSH接続。
  2. Spark上にMiniconda (aarch64版)をインストールし、PyTorchとCUDAを備えたGPU有効なPython環境を作成。
  3. Spark上でJupyterLabサーバーを起動。
  4. Mac上のVS CodeをリモートのJerupyterカーネルに接続し、すべてのノートブックセルをDGXのGB10 GPU上で実行。

重要な考慮事項

  • DGX SparkはUbuntu 24.04 (ARM64 / aarch64)を実行しているため、すべてのPythonパッケージがこのアーキテクチャ向けにビルドされていることを確認してください。
  • DGX Spark自体にモニターやキーボードは不要です。すべてMacから管理されます。
  • Continue.devのようなVS Code拡張機能は、DGX Spark上で実行されているローカルモデルを指すように設定できるため、機密性の高いコードをネットワーク内に保持したまま、AIによるコード補完を利用できます。

出典

  • Medium: “Remote Power, Local Comfort: Running Jupyter on NVIDIA DGX Spark from Your Mac” by Kodoth (https://kodoth.medium.com/remote-power-local-comfort-running-jupyter-on-nvidia-dgx-spark-daa1f365c7f7)
  • Note.com: “【脱・黒い画面】DGX Spark + Remote – SSH でMacから開発” (https://note.com/shachiku_suzume/n/n0bd388f30c9d)

アーキテクチャ 4: MacからDGX SparkへのSSHトンネル経由のJupyterLab

コンセプト

DGX Spark上で直接JupyterLabサーバーを実行し、MacからSSHトンネルを作成して、Macのlocalhost:8888をDGキ_SPARKのポート8888へ安全に転送します。これにより、Mac上のブラウザで、あたかもローカルで実行されているかのようにJupyterLabを開くことができます。

セットアップ方法

# Macのターミナルで — SSHトンネルを確立(実行したままにする)
ssh -N -L 8888:localhost:8888 <user>@<DGX_SPARK_IP>

その後、Macのブラウザを開き、http://localhost:8888にアクセスします。認証にはDGX Sparkのターミナル出力に含まれるトークンが必要です。

Jupyterの設定(DGX Spark側で事前に行う):

# DGX Spark上で
pip install jupyterlab ipykernel torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
python -m ipykernel install --user --name gpu-notebook --display-name "Python (GPU Notebook)"
jupyter lab --no-browser --port=8888

重要な考慮事項

  • SSHトンネルは、すべてのJupyter通信に対して暗号化されたトランスポートを提供します。
  • Safari、Chrome、Firefoxなど、Mac上のあらゆるブラウザからアクセス可能です。SSHクライアント(標準搭載)以外のものをMacにインストールする必要はありません。
  • このアプローチは、使い慣れたMacのワークフローを維持しながら、GPU加速されたノートブックで迅速かつ反復的な実験を行いたいML研究者にとって非常に価値があります。

出典

  • Medium: “Remote Power, Local Comfort” (Architecture 3と同じ)
  • NVIDIA公式のオンボーディングガイドは、リモートクライアントからのJupyterLabアクセスに言及しています。

アーキテクチャ 5: DGX Spark + Mac Studioでのllama.cpp — 完全ガイド

このセクションでは、軽量で高度に最適化されたC/C++ LLM推論エンジンであるllama.cppを、DGX SparkとMac Studioの両方のハードウェアで使用する方法について詳しく解説します。GB10 Blackwell GPU向けにソースからビルドする方法、複数のサーバーインスタンスを同時に実行する方法、ユニファイドメモリ・アーキテクチャの最適化、およびMacクライアントからの接続方法をカバーします。

5.1 NVIDIA公式プレイブック (DGX Sparkでのllama.cpp)

NVIDIAは、DGX Spark上でllama.cppをビルドおよび実行するための公式プレイブックを公開しています。これは、一般的なビルド手順には含まれていないGB10特有の最適化が含まれているため、推奨される開始地点です。

ビルド手順 (NVIDIA公式ガイドより)

# ステップ 1: 前提条件の確認
git --version
cmake --version
nvcc --version

# ステップ 2: モデルダウンロード用のHugging Face CLIをインストール
python3 -m venv llama-cpp-venv
source llama-cpp-venv/bin/activate
pip install -U "huggingface_hub[cli]"

# ステップ 3: アップストリームのリポジトリをクローン
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp

# ステップ 4: GB10 (sm_121アーキテクチャ)向けにCUDAを使用してビルド
mkdir build && cd build
cmake .. -DGGML_CUDA=ON \
         -DCMAKE_CUDA_ARCHITECTURES="121" \
         -DLLAMA_CURL=OFF
make -j8

# ステップ 5: GGUFモデルをダウンロード (例: Gemma 4 31B IT F16)
hf download ggml-org/gemma-4-31B-it-GGUF \
       gemma-4-31B-it-f16.gguf \
       --local-dir ~/models/gemma-4-31B-it-GGUF

# ステップ 6: ポート30000でOpenAI互換サーバーを起動
./bin/llama-server \
   --model ~/models/gemma-4-31B-it-GGUF/gemma-4-31B-it-f16.gguf \
   --host 0.0.0.0 \
   --port 30000 \
   --n-gpu-layers 99 \
   --ctx-size 8192 \
   --threads 8

サーバーが起動したら、別のターミナルまたはMacからテストを行います:

curl -X POST http://<DGX_SPARK_IP>:30000/v1/chat/completations \
    -H "Content-Type: application/json" \
    -d '{
      "model": "gemma4",
      "messages": [{"role": "user", "content": "Hello"}],
      "max_tokens": 500
    }'

NVIDIA推奨のモデルサポート

以下のGGUFモデルは、DGX Spark上のllama.cppで動作することが公式に確認されています。

モデル HFハンドル メモリ (F16) 備考
Gemma 4 31B IT ggml-org/gemma-4-31B-it-GGUF ~62 GB NVIDIAのプレイブックにおけるリファレンスモデル
Gemma 4 26B A4B IT ggml-org/gemma-4-26B-A4B-it-GGUF ~53 GB MoEバリアント; 有効パラメータ数が少ない
Gemma 4 E4B / E2B IT ggml-org/gemma-E4B-it-GGUF 変動 極端な量子化バリアント
Nemotron-3-Nano 30B-A3B unsloth/Nemotron-3-Nano-30B-A3B-GGUF ~58 GB 非常に低い有効パラメータ数 (3B)

5.2 Blackwell SM121 ビルドフラグ — コミュニティのベストプラクティス

DGX SparkのGB10 GPUは、CUDA計算能力12.1 (sm_121)を使用します。このアーキテクチャを明示的に指定しない場合、CMakeはサイレントにsm_80 (Ampere)やその他の汎用ターゲットにフォールバックしてしまい、大幅なパフォーマンス低下を招く可能性があります。コミュニティによって特定された主要なフラグは以下の通りです。

# 推奨されるフル最適化ビルド (NVIDIA GB10開発フォーラムより)
cmake -S . -B build \
   -G Ninja \
   -DCMAKE_BUILD_TYPE=Release \
   -DGGML_CUDA=ON \
   -DGGML_CUDA_GRAPHS=ON \
   -DCMAKE_CUDA_ARCHITECTURES="121a-real"

# 簡略化されたバリアント (NVIDIA公式プレイブックより)
cmake -B build \
   -DGGML_CUDA=ON \
   -DCMAKE_CUDA_ARCHITECTURES="121" \
   -DLLAMA_CURL=OFF

主要なフラグの解説:

  • -DCMAKE_CUDA_ARCHITECTURES="121a-real" — Blackwell特有のカーネルを指定します。a-realというサフィックスを使用することで、汎用的なsm_121ではなく実際のGB10アーキテクチャをターゲットとし、最適化されたCUDAカーネルのディスパッチを可能にします。
  • -DGGML_CUDA_GRAPHS=ON — 繰り返される推論パターンに対してCUDAグラフキャプチャを有効にし、トークンごとのオーバーヘッドを削減します。
  • -DGGML_CUDA_FA_ALL_QUANTS=ON — すべてのKVキャッシュ量子化スキーム (F16, Q8_0, Q4_0)に対するFlash Attentionサポートをコンパイルします。注意: これによりバイナリサイズとコンパイル時間が大幅に増加します。llama.cpp共同作業者の0cc4mによると、これはF16/Q8_0/Q4_0以外の特殊な非標準KVキャッシュ量子化が必要な場合にのみ必要です。
  • -DLLAMA_CURL=OFFllama-cliのみが必要な場合に、より軽量なビルドにするために内蔵HTTPサーバーを無効にします。llama-serverを使用したい場合はONにします。

ビルド問題のトラブルシューティング

症状 原因 修正方法
cmake が “CUDA not found” で失敗 CUDA toolkitがPATHに含まれていない export PATH=/usr/local/cuda/bin:$PATH を実行してからbuild/ディレクトリをクリアして再ビルド
サイレントなsm_80へのフォールバック (GPUがあるにもかかわらずCPU推論になる) CMAKE_CUDA_ARCHITECTURESの設定ミス "121" または "121a-real"を明示的に指定
ggml_cuda_init: no CUDA devices found CUDAフラグなしでビルドされたバイナリ build/ディレクトリをクリアし、-DGGML_CUDA=ONを付けて再ビルド
llama_new_context_with_model: n_ctx_per_seq (512) < n_ctx (4096) GPUレイヤーがロードされていない; CPUへのフォールバック --n-gpu-layersを確認。CUDAリンクを検証
大きなコンテキストによるメモリプレッシャー / OOM KVキャッシュが残りのメモリに対して大きすぎる --ctx-sizeを下げ(例: 4096)、またはより小さな量子化を使用

5.3 DGX Spark上でのデュアルサーバー — 2つのモデルを同時に実行

コミュニティでは、単一のDGX Spark上で2つのllama.cppサーバーを同時に実行する方法が報告されています。それぞれ異なるモデルを別のポートで提供し、独立したsystemdサービスとして管理します。これは、MoE (Mixture of Experts) アーキテクチャの低い有効パラメータ数と、MXFP4量子化およびq8_0 KVキャッシュの組み合わせによって可能になります。

設定例: Qwen3-Coder-Next 80B + Gemma 4 26B

# start-qwen.sh — ポート 8080 (コーディングモデル, 大きなコンテキスト)
#!/bin/bash
MODEL="/mnt/nas/Data_Vol1/models/Qwen3-Coder-Next-MXFP4_MOE.gguf"

/home/terry/llama.cpp/build/bin/\
llama-server \
   --model "$MODEL" \
   --host 0.0.0.0 \
   --port 8080 \
   --n-gpu-layers 999 \
   --flash-attn \
   --no-mmap \
   --ctx-size 800000 \
   --parallel 4 \
   --threads 16 \
   --cache-type-k q8_0 \
   --cache-type-v q8_0

# start-gemma4.sh — ポート 8081 (会話モデル, 小さなコンテキスト)
#!/bin/bash
MODEL="/mnt/nas/Data_Vol1/models/gemma-4-26B-A4B-it-MXFP4_MOE.gguf"

/home/terry/llama.cpp/build/bin/\
llama-server \
   --model "$MODEL" \
   --host 0.0.0.0 \
   --port 8081 \
   --n-gpu-layers 999 \
   --flash-attn \
   --no-mmap \
   --ctx-size 200000 \
   --parallel 1 \
   --threads 8 \
   --cache-type-k q8_0 \
   --cache-type-v q8_0

両方をsystemdサービスとして登録します:

# /etc/systemd/system/llama-server.service
[Unit]
Description=Qwen3-Coder-Next (Port 8080)
After=network.target

[Service]
Type=simple
User=terry
ExecStart=/home/terry/start-qwen.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

デュアルサーバーのメモリ使用量 (実測値)

モデル コンテキストサイズ メモリ使用量
Qwen3-Coder-Next 80B (MXFP4 MoE, ~48GB) 800K ctx ~70 GB
Gemma 4 26B-A4B (MXFP4 MoE, ~16.7GB) 200K ctx ~22 GB
合計 ~92.65 GB / 121 GB 使用可能

これにより、OSやその他のプロセスに約28GBが残ります。単一のDGX Sparkで十分に実行可能です。

Macからのクライアント利用

DGX Spark上で両方のサーバーが動作したら、Macからアクセスできます:

# Qwen3 Coder (コーディング) — Macのターミナル経由
curl http://<DGX_SPARK_IP>:8080/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{"model": "Qwen3-Coder-Next",
         "messages": [{"role": "user", "content": "Write Python code"}]}'

# Gemma 4 (会話) — Macのターミナル経由
curl http://<DGX_SPARK_IP>:8081/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{"model": "gemma-4-26B-A4B",
         "messages": [{"role": "user", "content": "Hello"}]}'

両方のエンドポイントは完全にOpenAI APIと互換性があるため、base_urlを変更するだけで、あらゆるツール(OpenAI SDK, LangChain, Ollamaクライアント, Cursor AIなど)を接続できます。

5.4 GB10ユニファイドメモリ・アーキテクチャ向けの主要なllama.cpp最適化

DGX Sparkのユニファイドメモリ・アーキテクチャでは、従来の独立したGPU設定とは異なる特定の最適化が必要です。

1. --no-mmap はDGX Sparkでは必須

GB10のユニファイドメモリでは、mmapを使用すると不要なページフォールトが発生し、パフォーマンスが著しく低下します。コミュニティで確認されたベストプラクティスは、常に--no-mmapを渡すことです。

--no-mmap    # DGX Sparkのユニファイドメモリでのmmapによるパフォーマンス低下を回避

2. MXFP4量子化 — Blackwellネイティブの加速

Blackwell GPUは、ネイティブなMXFP4 (Mixed eXact FP4) 量子化をサポートしており、プロンプト処理を最大25%高速化します。--flash-attnフラグを使用すると、llama.cppでこのパスが有効になります。

--flash-attn    # BlackwellでのネイティブMXFP4によるFlash Attentionを有効化

3. KVキャッシュq8_0量子化 — スループットの大幅な低下なしにメモリを削減

KとVの両方のキャッシュにq8_0を使用することで、KVキャッシュのメモリを47%削減でき、大規模なコンテキスト(例: 800Kトークン)が可能になります。

--cache-type-k q8_0   # KVキーキャッシュを8ビットに量子化
--cache-type-v q8_0   # KV値キャッシュを8ビットに量子化

さらにq4_0にすることも可能ですが、ユニファイドメモリ・アーキテクチャでは、デクオンタイゼーション(逆量子化)のオーバーヘッドにより、生成速度が34–37%低下します。q8_0が最適なバランスです。

4. 高速なモデルロードのためのNVMeリード・アヘッド調整

DGX SparkのNVMeストレージでは、リード・アヘッドを128KBから8192KBに増やすことで、モデルロード中のシーケンシャルリード・パフォーマンスが大幅に向上します。

# 即時適用
echo 8192 | sudo tee /sys/block/nvme0n1/queue/read_ahead_kb

# 再起動後も永続化 (udevルール)
# /etc/udev/rules.d/99-nvme-readahead.rules
ACTION=="add|change", KERNEL=="nvme0n1", \
  ATTR{queue/read_ahead_kb}="8192"

5. ユニファイドメモリのプレッシャー — ページキャッシュのフラッシュ

ユニファイド・アーキテクチャで予期しないメモリプレッシャーが発生した場合は、ページキャッシュをフラッシュすることで解決できる場合があります。

sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'

5.5 DGX Sparkにおけるllama.cppベンチマーク

DGX Spark上のQwen3.5-MoE 122Bモデル(Q4_K量子化)のコミュニティ・ベンチマーク結果:

ベンチマーク t/s 備考
pp512 (プロンプト処理, 512トークン) ~467–508 tok/s プリフィル速度はGB10の計算能力の高さを示しています
tg128 (トークン生成, 128トークン) ~17–19 tok/s デコード速度は273 GB/sの帯域幅によって制限されます

NVIDIA認定のGemma 4 31B ITをllama-server経由で使用する場合、典型的な生成速度は、モデルのサイズとコンテキストの長さに応じて約40–50 tok/sの範囲です。これらの数値は--n-gpu-layers 99(ほぼ全レイヤーをGPUにオフロード)で測定されました。

5.6 Mac Studioでのllama.cpp — Metalバックエンド

Mac側では、llama.cppはApple Silicon GPU向けのMetalサポートをネイティブにサポートしてビルドできます。

# Mac Studio (Mシリーズ) で
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp

mkdir build && cd build
cmake -B . \
   -DCMAKE_BUILD_TYPE=Release \
   -DGGML_METAL=ON              # Apple Silicon Metalバックエンド
cmake --build build --config Release -j$(sysctl -n hw.logicalcpu)

Metal GPUの使用を確認する:

./llama-cli \
   -m path/to/model.gguf \
   -p "Hello" \
   -n 10 \
   --n-gpu-layers 1            # Metalが有効であることを確認するために、まずは1から開始

出力に ggml_metal_init: GPU name: Apple M3 Pro (または同様の名称) が表示されることを確認してください。その後、--n-gpu-labs 99に上げてモデル全体をオフロードします。

Mac Studio vs DGX Spark パフォーマンス比較 (llama.cpp特有)

指標 DGX Spark (CUDA sm_121) Mac Studio M4 Ultra (Metal)
プリフィル速度 長いプロンプトに対して約3.8倍高速 低いFP16計算能力 (~26 TFLOPS) により制限
生成 (デコード) 1x ベースライン (~30Bクラスで約40–50 tok/s) 3.4倍高速 — 大きなモデルのトークン生成がより高速
メモリ帯域幅 273 GB/s (LPDDR5x) 819 GB/s (LPDDR5x) — 3倍の優位性
CUDAエコシステム 完全対応: PyTorch, vLLM, ファインチューニング 利用不可
モデル容量 128GBユニファイド; デュアルSparkクラスターで最大~256GB 最大800GB (Mac Studio Max)

これこそが、EXOの分散型アプローチ(アーキテクチャ1)が優れている理由です。DGX Spark上のllama.cppで高速なプリフィルを行い、そのKVキャッシュをMac Studioに転送して、高速なMetalベースの生成を行うのです。

5.7 llama.cppとMacクライアントの統合

DGX Spark上でllama-serverが動作したら、以下のいずれかの方法でMacから接続できます。

Open WebUI経由 (ブラウザベース)

DGX Spark上にOpen WebUIをインストールしてアクセスします(Webベースのフロントエンドとして機能します)。llama.cppの/v1/chat/completationsエンドポイントを指すように設定します。その後、Macのブラウザからhttp://<DGX_SPARK_IP>:3000を開きます。

Continue.dev経由 (VS Code拡張機能)

Mac上のVS CodeでContinue.devの設定を行い、DGX Sparkのllama.cppサーバーを使用するように設定します:

// Mac上の .continue/config.json
{
  "models": [{
    "title": "Gemma 4 on DGX",
    "provider": "openai",
    "model": "gemma-4-31B-it",
    "apiBase": "http://<DGX_SPARK_IP>:30000/v1"
  }]
}

Ollamaクライアント経由 (llama.cppへのルーティング)

Mac上のOllamaクライアントの接続先を、DGX Sparkのllama-serverエンドポイントに向けます:

# Mac上で、OLLAMA_HOSTをDGX Sparkのllama.cppサーバーに設定
OLLAMA_HOST=http://<DGX_SPARK_IP>:30000 ollama run gemma-4-31B-it "Hello"

5.8 GB10におけるllama.cppのコミュニティ・リソース

リソース リンク
NVIDIA公式プレイブック https://build.nvidia.com/spark/llama-cpp
GitHub Discussion: GB10 Build Flags (#20405) https://github.com/ggml-org/llama.cpp/discussions/20405
llama.cpp GitHub リポジトリ https://github.com/ggml-org/llama.cpp
NVIDIA Forum: MXFP4 Blackwell PR Discussion https://forums.developer.nvidia.com/t/llama-cpp-experimental-native-mxfp4-support-for-blackwell-pr/355639
DGX Spark llama.cpp ベンチマーク (公式) https://github.com/ggml-org/llama.cpp/blob/master/benches/dgx-spark/dgx-spark.md
GB10用 Dockerfile (stelterlab gist) https://gist.github.com/stelterlab/33885c600c102792acb1638ca7d2d7e9
コミュニティ・インストールスクリプト (spamshaker) https://gist.github.com/spamshaker/c6201d391920032519fb5180bbf0804f

出典

  • NVIDIA Build Playbook: “Run models with llama.cpp on DGX Spark” (2026-04-02). https://build.nvidia.com/spark/llama-cpp
  • NVIDIA Forums: “Compiling llama.cpp – DGX Spark / GB10 User Forum” (2025-12-28). https://forums.developer.nvidia.com/t/compiling-llama-cpp/355864
  • AI-Girls Lab: “Dual llama.cpp Server on DGX Spark — Running Qwen3-Coder-Next 80B + Gemma 4 26B Simultaneously” (2026-04-06). https://ai-girls.org/en/2026/04/06/dgx-spark-llama-cpp-dual-server-en/
  • GitHub Discussion: “DGX Spark (GB10) llama.cpp build question” (#20405) (2026-03-11). https://github.com/ggml-org/llama.cpp/discussions/20405
  • Markaicode: “Compile llama.cpp: CPU, CUDA, and Metal Backends 2026”. https://markaicode.com/compile-llama-cpp-cpu-cuda-metal/

パフォーマンス比較と各アプローチの使い分け

指標 DGX Spark単独 M3 Ultra Mac Studio単独 DGX + Mac組み合わせ (EXO)
プリフィル速度 ~1159 tok/s (プロンプト評価, GPT-OSS 120B) 計算能力によって制限 ~1159 tok/s (Spark上で)
生成 (デコード) ~41 tok/s (GPT-OSS 120B), 273 GB/s帯域幅に制限 ~34→6 tok/s (コンテキストにより低下), 819 GB/s帯域幅 ~41 tok/s (Spark) + 高速なM3 Ultra生成
最適なLLMモデル gpt-oss:120b, Nemotron-3-Super, Qwen3.5-27B 小規模モデル、高帯域幅が必要な高密度ワークフロー 最大規模のモデル (クラスター経由で最大256GBまで)
メモリ帯域幅 273 GB/s 819 GB/s N/A (フェーズごとに分割)
計算能力 (FP16) ~100 TFLOPs ~26 TFLOPs 両方が貢献
ユニファイドメモリ 128 GB 最大800 GB (Mac Studio Max) 分散推論により集約

各アプローチの使い分け

  • アーキテクチャ 1 (EXO 分散推論): 最速のLLM推論を必要とし、すでにDGX SparkとM3 Ultra Mac Studioの両方を同一ネットワーク内に所有しているユーザーに最適です。スピードアップは長いプロンプト(8Kトークン以上)で最も顕著になります。注意: 本稿執筆時点では、EXOは早期アクセス/招待制でした。Linux/PCクラスターのGPUサポートは現在開発中です。

  • アーキテクチャ 2 (MacをDGX SparkのAPIクライアントとして使用): 大部分のユースケースに最適です。コーディング支援 (Cursor, VS Code + Continue)、チャットインターフェース (Open WebUI, LM Studio)、およびあらゆるOpenAI互換のワークフローに適しています。セットアップが最も簡単で、デバイス間のネットワークケーブル、あるいはWi-Fiだけでも機能します。

  • アーキテクチャ 3 (VS Code Remote-SSH): モデルの実験、ファインチューニング、トレーニングスクリプトの作成、またはカスタム推論コードの作成を行う開発者に適しています。DGX SparkがすべてのGPU計算を処理し、Macが使い慣れたVS Code/Cursorインターフェースを提供します。

  • アーキテクチャ 4 (JupyterLab SSHトンネル経由): Mac上にブラウザベースのUIを維持しながら、SparkのGPU加速を利用した反復的なノートブック・ワークフローを行いたいデータサイエンティストやML研究者に適しています。

  • アーキテクチャ 5 (llama.cpp): ビルドフラグとバックエンドを完全に制御できる、軽量でAPIコストのかからない推論を必要とするユーザーに最適です。DGX SparkのネイティブCUDAは高速なプロンプト処理を提供し、Mac StudioのネイティブMetalはクラウドに依存しないGPU加速された生成を可能にします。単一ノードのデプロイメントで、最もシンプルなスタック(llama-serverバイナリのみ)を使用したい場合に理想的です。


まとめ表

アプローチ Macの役割 DGX Sparkの役割 複雑さ 最適な用途
EXO (分散推論) 能動的計算: デコードフェーズ 能動的計算: プリフィルフェーズ + KVストリーミング 高 (早期アクセス、研究レベル) ヘテロジニアス・クラスターでの最大推論速度
APIクライアント (Ollama/vLLM/LM Studio) UI / CLI クライアント (リモートAPIへの接続) すべてのGPU推論 Macからの一般的なLLM操作
VS Code Remote-SSH フル機能のIDE + AIエージェント (SSH経由) すべてのコードのリモート実行 開発、ファインチューニング、カスタムスクリプト
JupyterLab SSHトンネル Mac上のブラウザベースのノートブックUI GPU加速された計算カーネル 研究用ノートブック、迅速なMLプロトタイピング
llama.cpp (CUDA + Metal) OpenAI互換API経由のllama-serverクライアント、またはローカル推論用のMetalバックエンド GB10 Blackwellの最適化を備えたCUDA対応llama-server 低〜中 フルビルド制御が可能な軽量推論; APIコストゼロのローカルデイプロイ

参考文献

  1. EXO Labs — “Combining NVIDIA DGX Spark + Apple Mac Studio for 4x Faster LLM Inference with EXO 1.0” (2025-10). https://blog.exolabs.net/nvidia-dgx-spark/
  2. Kodoth, K. — “Remote Power, Local Comfort: Running Jupyter on NVIDIA DGX Spark from Your Mac” (2026-01-10). https://kodoth.medium.com/remote-power-local-comfort-running-jupyter-on-nvidia-dgx-spark-daa1f365c7f7
  3. NVIDIA Build — “LM Studio on DGX Spark” Playbook (2026-03). https://build.nvidia.com/spark/lm-studio/instructions
  4. NVIDIA Docs — “Deploy on DGX Spark: NIM for Large Language Models” (v1.15.0). https://docs.nvidia.com/nim/large-language-models/1.15.0/deploy-on-dgx-spark.html
  5. GitHub exo-explore/exo — Issue #1102: “Mac Studio + DGX Spark” (2026-01-07). https://github.com/exo-explore/exo/issues/1102
  6. Densho — “DGX Spark を 2 か月使って見えた「向いている仕事」と「向いていない仕事」”. https://dev.classmethod.jp/articles/dgx-spark-use-case-guide/
  7. Zenn (Karaage) — “DGX Sparkで色々なローカルLLMを動かした比較結果” (2026-03-21). https://zenn.dev/karaage0703/articles/fcca40c614dffd
  8. Note.com — “【脱・黒い画面】DGX Spark + Remote – SSH でMacから開発” (2026-02-02). https://note.com/shachiku_suzume/n/n0bd388f30c9d
  9. NVIDIA Build — “Run models with llama.cpp on DGX Spark” Official Playbook (2026-04-02). https://build.nvidia.com/spark/llama-cpp
  10. AI-Girls Lab — “Dual llama.cpp Server on DGX Spark — Running Qwen3-Coder-Next 80B + Gemma 4 26B Simultaneously” (2026-04-06). https://ai-girls.org/en/2026/04/06/dgx-spark-llama-cpp-dual-server-en/
  11. GitHub Discussion — “DGX Spark (GB10) llama.cpp build question” #20405 (2026-03-11). https://github.com/ggml-org/llama.cpp/discussions/20405
  12. NVIDIA Forums — “Compiling llama.cpp – DGX Spark / GB10 User Forum” (2025-12-28). https://forums.developer.nvidia.com/t/compiling-llama-cpp/355864
  13. Markaicode — “Compile llama.cpp: CPU, CUDA, and Metal Backends 2026”. https://markaicode.com/compile-llama-cpp-cpu-cuda-metal/
  14. Medium (LLM Performance) — “DGX Spark vs Mac Studio vs RTX-4080: Ollama Benchmarks”. https://glukhov.org/ja/llm-performance/benchmarks/dgx-spark-vs-mac-studio-vs-rtx4080/
  15. GitHub — exo-explore/exo distributed inference engine (https://github.com/exo-explore/exo).
  16. Reddit / AI-Girls — “LLM Performance on DGX Spark: Q&A about llama.cpp, vLLM, Ollama” (2025-12–2026-03).

コメント

タイトルとURLをコピーしました