はじめに
NVIDIA DGX Spark 2台をConnectX-7(200Gbps)で直結し、Qwen3.5-397B(3970億パラメータ)をローカルで動かすことに成功しました。生成速度は約21〜23 tok/s。クラウドに依存せず、手元のハードウェアだけでGPT-4クラスのモデルが実用的な速度で動きます。

DGX Sparkとは
NVIDIA DGX Sparkは、2025年に発表されたデスクトップ型のAIワークステーションです。
| 項目 | スペック |
|---|---|
| GPU | NVIDIA GB10(Blackwell世代) |
| メモリ | 128GB統合メモリ(CPU/GPU共有) |
| CPU | ARM Cortex-X925 + A725(20コア) |
| NIC | ConnectX-7(200Gbps RDMA対応) |
| サイズ | Mac miniより少し大きい程度 |
特筆すべきは128GBの統合メモリです。GPUとCPUがメモリを共有するため、一般的なGPUのようなVRAM制限がありません。LLMのような大きなモデルをロードするのに非常に有利です。
そしてもう1つの注目ポイントがConnectX-7。200Gbpsの高速ネットワークインターフェースが標準搭載されていて、2台以上のSparkを接続してクラスタ化する「スタッキング」が公式にサポートされています。
なぜ2台必要なのか
今回動かしたいモデルはQwen3.5-397B-A17B。Alibaba Cloudが開発したMixture of Experts(MoE)モデルで、総パラメータ数は3970億です。
INT4量子化しても、モデルの重みだけで約100GB以上のメモリを消費します。1台のDGX Spark(128GB)では、モデルをロードした時点でKVキャッシュやシステム用のメモリがほぼ残りません。
そこで、2台のDGX Sparkをスタッキングして256GBの統合メモリ空間を作ります。
物理接続
接続はシンプルです。QSFP56 200G DACケーブル1本で2台の背面ポートを直結するだけ。スイッチもルーターも不要です。
ケーブルを挿したら、各ノードにIPアドレスを静的に割り当てます。
注: 以下のIPアドレス(
192.168.xxx.1等)は説明用の仮の値です。お使いの環境に合わせて適宜変更してください。
# /etc/netplan/40-cx7.yaml(node-1側の例)
network:
version: 2
ethernets:
enp1s0f0np0:
dhcp4: no
dhcp6: no
link-local: []
mtu: 9000
addresses: [192.168.xxx.1/24]
node-2側も同様に192.168.xxx.2/24を設定し、sudo netplan applyで適用します。
ConnectX-7の「ツイン構成」について
DGX SparkのConnectX-7は少し特殊な構成をしています。200Gbpsの帯域を実現するために、1つの物理ポートが2つのPCIe 5.0 x4リンクを共有しています。
$ ibdev2netdev
roceP2p1s0f0 port 1 ==> enP2p1s0f0np0 (Up)
rocep1s0f0 port 1 ==> enp1s0f0np0 (Up)
IPアドレスは片方のインターフェースに割り当てるだけでOKですが、RDMAの帯域を最大化するには両方の「ツイン」を使う必要があります。後述のvLLMランチャーがこれを自動的に処理してくれるので、手動設定は不要です。
接続できたら、SSHを設定して疎通確認します。
$ ping -c 2 192.168.xxx.2
64 bytes from 192.168.xxx.2: icmp_seq=1 ttl=64 time=0.437 ms
レイテンシは0.4ms台。ケーブル直結なので当然ですが、分散推論には十分すぎる速度です。
ソフトウェア構成
分散推論のスタックは以下の通りです。
| レイヤー | 技術 |
|---|---|
| 推論エンジン | vLLM 0.17.1 |
| 分散フレームワーク | Ray(Tensor Parallelism = 2) |
| ノード間通信 | NCCL over RDMA/RoCE |
| コンテナ | Docker(spark-vllm-docker) |
| モデル | intel/Qwen3.5-397B-A17B-int4-AutoRound |
コミュニティが開発したspark-vllm-dockerを使うと、レシピファイル1つで2ノードクラスタを起動できます。
# IPアドレスはご自身の環境に合わせて変更してください
python3 run-recipe.py recipes/qwen3.5-397b-int4-autoround.yaml \
--port 8080 \
-n 192.168.xxx.1,192.168.xxx.2 \
-d
これだけで、以下が自動的に行われます。
- 両ノードでDockerコンテナ起動
- Rayクラスタの構成(node-1がhead、node-2がworker)
- 必要なパッチの適用(ROPE修正、チャットテンプレート修正)
- vLLMサーバーの起動(OpenAI互換API)
モデルのロードには約27分かかります。Marlinカーネルの再パッキングでピークメモリが一時的に2倍になるため、統合メモリを慎重に管理する必要があるためです。
ハマりポイント
順調にいったわけではありません。いくつかの落とし穴がありました。
1. カーネル選択の罠
vLLMにはGPTQ量子化モデル用のカーネルが複数ありますが、GB10(Blackwell)で正しく動くのはMarlinカーネルのみでした。
| カーネル | 結果 |
|---|---|
| Marlin | 正常動作 |
| Exllama | ゴミ出力(フォーマット不一致) |
| GPTQ | クラッシュ(vLLM 0.17.1のバグ) |
2. GUIとvLLMのメモリ競合
DGX SparkはGPUとCPUがメモリを共有しているため、デスクトップ環境(GNOME)もGPUメモリを消費します。
vLLMがgpu_memory_utilization=0.89で起動した後にGDM(ディスプレイマネージャ)を起動しようとすると、Xorgの2Dエンジン確保に失敗してGUIが真っ暗になりました。
解決策: nvidia-drm.modeset=1をカーネルパラメータに追加してWaylandを有効化。WaylandはXorgと違い、NVIDIAの2Dエンジンを必要としないため、vLLMとGUIが共存できるようになりました。ただし、gpu_memory_utilizationは0.87に下げる必要がありました。
# /etc/default/grub に追加
GRUB_CMDLINE_LINUX_DEFAULT="... nvidia-drm.modeset=1"
sudo update-grub && sudo reboot
3. NGC公式コンテナの非対応
NVIDIA公式のNGCコンテナ(26.02-py3、vLLM 0.15.1)はQwen3.5をサポートしていません。コミュニティのspark-vllm-dockerを使う必要があります。
ベンチマーク結果
推論性能
Model: Qwen3.5-397B-A17B-int4-AutoRound
Nodes: 2x DGX Spark (Tensor Parallel = 2)
Max context: 4096 tokens
KV cache: fp8
| メトリクス | 値 |
|---|---|
| 生成速度 | ~21-23 tok/s |
| KVキャッシュ容量 | 7.07 GiB(112,752トークン) |
| モデルロード時間 | ~27分 |
ネットワーク帯域
RDMA Write帯域テストの結果:
#bytes #iterations BW peak[Gb/sec] BW average[Gb/sec]
65536 20000 111.72 111.71
レイテンシ:
#bytes t_typical[usec] 99.9% percentile[usec]
2 1.47 1.93
200Gbpsの理論値に対して111.7Gbps。単一のPCIe 5.0 x4リンク経由であることを考えると、ほぼ上限値です。
まとめ
DGX Spark 2台 + ケーブル1本で、3970億パラメータのモデルをローカルで実用的な速度で動かすことができました。
- クラウドAPIへの依存なし
- データが外に出ない
- 月額料金なし
- 21 tok/sで快適な対話
最近はクラウドLLMの性能が注目されがちですが、「自分の手元で大規模モデルを動かす」という選択肢が、ハードウェアの進化によって現実的になってきていることを実感しました。
DGX Sparkのスタッキングは2台に限らず、スイッチを使えば4台、8台と拡張できます。さらに大きなモデルや、より長いコンテキストが必要になったとき、スケールアウトの道が開かれているのは大きな魅力です。
参考リンク
- spark-vllm-docker — DGX Spark向けvLLMクラスタ構築ツール
- intel/Qwen3.5-397B-A17B-int4-AutoRound — 使用したモデル
- NVIDIA DGX Spark Stacking Guide — NVIDIA公式フォーラムのスタッキング情報
- NVIDIA DGX Spark — 製品ページ
