22
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[DGX Spark] 卓上スパコン2台をケーブル1本で繋いで、Qwen3.5-397Bのモンスターモデルを動かしてみた

22
Last updated at Posted at 2026-03-16

はじめに

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

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台の背面ポートを直結するだけ。スイッチもルーターも不要です。

IMG_6653.jpg

ケーブルを挿したら、各ノードに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

これだけで、以下が自動的に行われます。

  1. 両ノードでDockerコンテナ起動
  2. Rayクラスタの構成(node-1がhead、node-2がworker)
  3. 必要なパッチの適用(ROPE修正、チャットテンプレート修正)
  4. 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_utilization0.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台と拡張できます。さらに大きなモデルや、より長いコンテキストが必要になったとき、スケールアウトの道が開かれているのは大きな魅力です。

参考リンク

22
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?