エヌビディアの佐々木です。
お久しぶりです。
先日、とあるイベントでブースの説明員をしていたところ、立ち寄ってくださったエンジニアの方にこんな言葉をいただきました。
あ、エヌビディアの佐々木さん?学生の頃、Qiitaの記事にお世話になりました!!
大変ありがたいお言葉だったのですが、ああ、あの頃の学生さんがもう立派な社会人になって第一線で活躍しているというのに、オレはその間何をしていた?と、大いに反省したのでした。たまにはなんか書くか… ちょうど DGX OS Advent Calendar 2025 というのがあるみたいだし!
DGX Spark 買いました
というわけで個人的な今年の大ニュースは DGX Spark を買ったことです。
これ、私がエヌビディアに入った 2016 年に発表された DGX-1 そっくりに作られているんですよ。DGX-1 は 3U サイズのラックマウントサーバーでしたが、DGX Spark は 15cm 四方の小さなデスクトップマシンです。Kawaii なぁ。
DGX Spark おすすめ情報
さて、久しぶりに記事を書いてみようと思ったのですが、困ったことに気づきました。DGX Spark に関するお役立ち情報、だいたい からあげさんの記事 とかにまとまってるんですよね。このうえ私に何か書くことがあろうか?
・・・・
あ、そうだ。
というわけで、2 台の DGX Spark を高速接続する秘密兵器、ConnectX-7 について書こうと思います。
DGX Spark と ConnectX-7
ConnectX というネットワークアダプタは、もともとは HPC 領域で強みを持つ Mellanox Technologies 社の製品です。2020 年に NVIDIA と統合されるよりも前から、 DGX には必ず ConnectX が搭載されていたのです。初代の DGX-1 には ConnectX-4 が、最新の DGX B300 には ConnectX-8 が、という具合です。GPU の世代と共に、ConnectX の世代も進んでいくわけです。
かわいい DGX Spark には、200GbE バージョンの ConnectX-7 が搭載されています。(Ethernet のみです。InfiniBand は非対応)
4つのインタフェース
DGX Spark の背面 (下図) には 2 基の QSFP ポートがありますね。デュアルポートの ConnectX-7 が搭載されているわけです。
が、実際に DGX Spark にログインしてみると、なんだか NIC が多くないか?と皆様気づかれたのではないでしょうか。ケーブル 1 本で 2 台を接続してある私の DGX Spark ではこんな風に見えます。
$ ip -br a | grep '^en'
enP7s7 UP 172.16.10.160/24 fe80::4ebb:47ff:fe2e:bf41/64
enp1s0f0np0 UP 10.10.1.11/24 fe80::4ebb:47ff:fe2e:bf42/64
enp1s0f1np1 DOWN
enP2p1s0f0np0 UP 10.10.2.11/24 fe80::4ebb:47ff:fe2e:bf46/64
enP2p1s0f1np1 DOWN
enP7s7 は ConnectX-7 ではない 10GbE のポート (RJ-45) で、それ以外の 4 つが ConnectX-7 の QSFP ポートなんですが、物理的なポートは 2 つなのに NIC は 4 つ見えるんですよね。で、ケーブルを 1 本接続すると、2 つの NIC が UP になります。これ、下図のようなマッピングになっております。
QSFP のそれぞれポートが、2 つの NIC に分かれているのは、GB10 チップ(CPU+GPU) と、ConnectX-7 (CX-7) の接続が、「二つの PCIe Gen5 x4」という形になっているためです。ざっくり図示するとこんな感じです:
NIC と PCI アドレスの対応は下記のコマンドで確認できます。
$ readlink -f /sys/class/net/en[pP][12]*
/sys/devices/pci0000:00/0000:00:00.0/0000:01:00.0/net/enp1s0f0np0
/sys/devices/pci0000:00/0000:00:00.0/0000:01:00.1/net/enp1s0f1np1
/sys/devices/pci0002:00/0002:00:00.0/0002:01:00.0/net/enP2p1s0f0np0
/sys/devices/pci0002:00/0002:00:00.0/0002:01:00.1/net/enP2p1s0f1np1
この物理的な構成から、下記のことがわかります。
- GB10 と CX-7 間の総帯域は 256Gbps 弱
→ ConnectX-7 には 200Gbps のポートが二つあるが、ケーブルを 2 本挿しても 400Gbps にはならない。 - 1 つの NIC (enp1s0f0np0 とか) の帯域は PCIe Gen5 x4 に律速される。
→ ethtool 等で確認すると 200Gbps でリンクアップしているが、実際にはそこまでの速度は出ない。
じゃぁどうする
他の大きな DGX 達とは違って、DGX Spark の用途であれば必ずしも 200Gbps の帯域がフルに発揮できなくても大きな問題はないともいえます。例えば、DGX Spark のプレイブックにある NCCL for Two Sparks では、NIC を一つだけ使う例が示されています。
とはいえ、せっかくの ConnectX-7 をできるだけ活用したいのも人情。なので、私は 1 本のケーブルで生えてくる二つの NIC 両方にアドレスを付けて使っています。NCCL-Tests を実行するときは、下記のように環境変数 NCCL_IB_HCA に RoCE デバイスを二つ指定しています。
export NCCL_IB_HCA=rocep1s0f0,roceP2p1s0f0
これで、NCCL が二つの NIC を使ってくれるようになります。
なお、NIC 名 (enp1s0f0np0) と RoCE デバイス名 (rocep1s0f0) のマッピングは、前述のプレイブックにもあるとおり、ibdev2netdev コマンドで知ることができます。
$ ibdev2netdev
rocep1s0f0 port 1 ==> enp1s0f0np0 (Up)
rocep1s0f1 port 1 ==> enp1s0f1np1 (Down)
roceP2p1s0f0 port 1 ==> enP2p1s0f0np0 (Up)
roceP2p1s0f1 port 1 ==> enP2p1s0f1np1 (Down)
DGX Spark (とその仲間達) は、Grace CPU と Blackwell GPU が統合されたスーパーチップアーキテクチャに ConnectX-7 まで搭載されている大変面白いマシンです。ぜひお楽しみください!


