İçindekiler
- Mimari Özet
- Ön Koşullar
- DGX Spark Düğümlerin Hazırlığı
- Management Ağı (10GbE) Bağlantısı
- Compute Ağı (200GbE QSFP) Fiziksel Bağlantısı
- Spark’lara Sparkrun Yüklenmesi
- Hız ve RDMA Testleri
- sparkrun ile Model Çalıştırma
- Sonuç ve Doğrulama
- Sorun Giderme
Bu ürünü satın almak için ilgili sayfayı ziyaret edebilirsiniz.
Bu doküman, 2 NVIDIA DGX Spark node’undan oluşan point-to-point topolojisine sahip bir AI cluster’ın kurulum ve konfigürasyon adımlarını baştan sona anlatmaktadır. Cluster, dağıtık AI iş yüklerini ve model çalıştırmayı yönetmek için sparkrun araç setini kullanır.
Doküman; management ve compute ağlarının hazırlanması, ConnectX-7 QSFP112 port yapılandırması, RoCEv2/RDMA ayarları, SSH erişimi ve cluster sağlık kontrolü adımlarını kapsar.
Mimari Özet
| Bileşen | Açıklama |
|---|---|
| DGX Spark × 2 | Her birinde ConnectX-7 200GbE QSFP112 port bulunur |
| QSFP112 Kablo | Amphenol: NJAAKK-N911 |
| sparkrun | Cluster yönetim, SSH mesh ve CX7 yapılandırma araç seti |
Ön Koşullar
Donanım
- 2× NVIDIA DGX Spark sistemi
- 1× Amphenol: NJAAKK-N911 Kablo
- Cat6 kablolar (management ağı)
Yazılım ve İşletim Sistemi
- DGX OS (her Spark sisteminde kurulu)
- İnternet erişimi (paket indirmeleri ve güncellemeler için)
Bilgi ve Erişim
- Linux komut satırı temel bilgisi
- Tüm cihazların fiziksel erişimi (kablo bağlantıları için)
DGX Spark OS Kurulumu
DGX Spark OS kurulumu için aşağıdaki videoyu kullanabilirsiniz:
NVIDIA DGX Spark Kurulumu Part 1
DGX Spark Düğümlerin Hazırlığı
Fiziksel bağlantılar ve ağ yapılandırmalarına geçmeden önce tüm Spark sistemlerinin güncel yazılım ve firmware sürümlerini kullandığından emin olunmalıdır. Kurulum sırasında karşılaşılan performans problemlerinin önemli bir kısmı eski sürücüler, eksik güncellemeler veya firmware uyumsuzluklarından kaynaklanabilmektedir.
Aşağıdaki işlemler iki Spark sistemi üzerinde de uygulanmalıdır.
Sistem ve Firmware Güncellemeleri
İlk olarak işletim sistemi paketleri güncellenir:
sudo apt update
sudo apt dist-upgrade
Daha sonra sistem firmware’leri güncellenir:
sudo fwupdmgr refresh --force
sudo fwupdmgr upgrade
DGX Dashboard üzerinden, herhangi bir güncelleme olmadığı kontrol edilir, eğer varsa yapılır:

Güncellemelerin tamamlanmasının ardından sistem yeniden başlatılır:
sudo reboot
Kurulum sırasında yapılan testlerde, güncel olmayan firmware sürümleri nedeniyle bağlantı performansının beklenen seviyeye ulaşmadığı gözlemlenmiştir. Bu nedenle kurulumun ilk adımı olarak tüm sistemlerin güncellenmesi önerilmektedir.
Docker Yapılandırması
Sonraki adımlarda kullanılacak container tabanlı araçların sudo gerektirmeden çalıştırılabilmesi için her bir Spark üzerinde Docker post-install işlemleri uygulanır.
Öncelikle mevcut kullanıcı Docker grubuna eklenir:
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
Yapılandırmanın başarılı olduğu aşağıdaki test ile doğrulanabilir:
docker run hello-world

Komutun başarılı şekilde çalışması ve Docker’ın örnek container’ı başlatabilmesi, sonraki adımlarda kullanılacak container tabanlı araçlar için gerekli hazırlığın tamamlandığını göstermektedir.
Depolama Sürücüsünün Kontrolü
Ayrıca tüm Spark düğümlerinde Docker depolama sürücüsü kontrol edildi. docker info çıktısında Storage Driver değerinin overlayfs olduğu doğrulandı. overlay2 veya farklı bir depolama sürücüsü tespit edilmesi durumunda Docker, containerd snapshotter (overlayfs) kullanacak şekilde yapılandırıldı ve Docker servisi yeniden başlatıldı. Böylece tüm düğümlerde aynı depolama altyapısı kullanılarak tutarlı bir çalışma ortamı sağlandı.
Öncelikle mevcut depolama sürücüsü aşağıdaki komut ile kontrol edildi:
docker info -f 'Driver= DriverStatus= DockerRootDir='
Çıktıda sürücünün overlay2 olarak görülmesi durumunda aşağıdaki yapılandırma uygulandı:
sudo tee /etc/docker/daemon.json >/dev/null <<'EOF'
{
"features": {
"containerd-snapshotter": true
}
}
EOF
sudo systemctl restart docker
Yapılandırma sonrasında aynı kontrol komutu tekrar çalıştırıldı ve depolama sürücüsünün overlayfs olduğu doğrulandı.

Management Ağı (10GbE) Bağlantısı
Her bir DGX Spark’ın 10GbE Ethernet portu kullanılacak switch’in RJ45 portlarından birine Cat6 kablo ile bağlanır. Kablo takıldıktan sonra switch üzerindeki ilgili portun bağlantı göstergesinin yandığı teyit edilir.
Spark masaüstünde terminal açılır ve cihazın IP adresi alıp almadığını kontrol edin:
ip addr show

Çıktıda, örnekte olduğu gibi 10GbE arayüzünde bir IP adresi görüyorsanız, management ağı üzerinden SSH erişimi sağlanabilir. IP adresi alınmamışsa, DGX OS masaüstü üzerinden manuel olarak atanır:
- Sağ üst köşedeki ağ simgesine tıklayın → Wired Settings seçin
- İlgili 10GbE bağlantısının yanındaki dişli (⚙) simgesine tıklayın
- IPv4 sekmesine geçin
- Method alanını Manual olarak değiştirin
- Aşağıdaki bilgileri girin:
- Address: 192.168.1.148 (her Spark için farklı ve kendi ağınıza uygun olarak— .147)
- Netmask: 255.255.255.0
- Gateway: 192.168.1.1 (varsa, yoksa boş bırakın)
- DNS: 1.1.1.1,8.8.8.8
- Apply butonuna basın ve bağlantıyı kapatıp tekrar açın

İnternet erişimi varsa 10GbE management bağlantısı hazırdır. Diğer Spark üzerinde de aynı adımları tekrarlayın ve farklı bir IP adresi atayın.
Düğümler Arası Erişim Kontrolü
Management ağı üzerinden tüm Spark’ların birbirini görebildiğini teyit edin. Bir Spark üzerinden diğerine ping atın:
ping -c 4 192.168.1.148
Tüm ping’ler başarılıysa management ağı hazır ve tüm düğümler birbiriyle iletişim kurabiliyor demektir.
Compute Ağı (200GbE QSFP) Fiziksel Bağlantısı
Mevcut kurulumda iki Spark, üzerinde bulunan ConnectX-7 QSFP112 portu üzerinden 200GbE hızında birbirine bağlanır.
Kablo Planı
İki Spark sistemi arasında oluşturulacak fiziksel bağlantıların port eşleşmeleri aşağıdaki gibidir:
| Kaynak | Hedef |
|---|---|
| Spark1 Port0 | Spark2 Port0 |
Spark’lara Sparkrun Yüklenmesi
Kullanıcı ve SSH Yapılandırması
Ağ yapılandırması tamamlandıktan sonra Spark sistemlerinin birbirleriyle şifresiz olarak haberleşebilmesi için tüm node’larda ortak bir kullanıcı oluşturulmalıdır. sparkrun, bu kullanıcı üzerinden tüm node’lara SSH ile bağlanır ve cluster yönetim işlemlerini gerçekleştirir.
Hostname Ayarlama Her Spark’a benzersiz bir hostname verin. Bu, SSH known_hosts yönetimi, log analizi ve cluster node takibi için gereklidir:
# Spark 1 üzerinde:
sudo hostnamectl set-hostname spark1
# Spark 2 üzerinde:
sudo hostnamectl set-hostname spark2
Ortak Kullanıcı Oluşturma Tüm Spark sistemlerinde aynı kullanıcı adı oluşturulmalıdır. Bu dokümanda nvidia kullanıcı adı kullanılacaktır. Aşağıdaki komutlar iki Spark sistemi üzerinde de çalıştırılır:
sudo useradd -m nvidia
sudo usermod -aG sudo nvidia
sudo passwd nvidia
Tüm sistemlerde aynı şifreyi kullanın — yönetim süreçlerini kolaylaştırır. sparkrun SSH mesh kurulumu sırasında ilk bağlantıda bu şifre sorulur, sonrasında anahtar tabanlı kimlik doğrulamaya geçilir.
Passwordless Sudo Yapılandırması
sparkrun, CX7 ağ yapılandırması sırasında sudo ile komutlar çalıştırır. Her seferinde şifre sormaması için passwordless sudo ayarlanmalıdır:
echo "nvidia ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/nvidia
sudo chmod 440 /etc/sudoers.d/nvidia

sparkrun Kurulumu
Kurulum nvidia kullanıcısı olan hesapta yapılır.
su - nvidia
Önce uv paketi kurulur:
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.bashrc
Sonra Sparkrun kurulur:
uvx sparkrun setup
Kurulum esnasında sorulan sorulara uygun cevaplar verilir:
- öncelikle cihazların ip adresleri girilir:
- cluster için bir isim verilir
- SSH kullanıcı adı olarak önceki adımda oluşturulan
nvidiaismi girilir. -
MESH kurulumu için Y seçilir

-
Configure CX7 networking? sorusuna Y denir:

- Add ‘nvidia’ to the docker group on all hosts? sorusuna Y seçilir
- “Generate the NVIDIA CDI spec on all hosts?” sorusuna Y seçilir
- Install sudoers entries? sorusuna “Y” seçilir
- Install earlyoom? sorusuna “Y” seçilir
-
Setup complete mesajı geldiğinde kurulum başarıyla tamamlanmış demektir

Hız ve RDMA Testleri
Bu adımda, compute ağının doğru çalıştığını ve RoCEv2 üzerinden RDMA iletişiminin beklendiği gibi performans verdiğini doğrulayacağız.
IP Ataması Referansı sparkrun wizard tarafından CX7 arayüzlerine atanan IP adresleri aşağıda göründüğü gibidir, sizin senaryoda bu adresler yerine kendi adreslerinizi kullanmanız gerekir:
| Spark | Management (enP7s7) | enp1s0f1np1 | enP2p1s0f1np1 |
|---|---|---|---|
| Spark 1 | 192.168.1.148 | 192.168.0.148 | 192.168.2.148 |
| Spark 2 | 192.168.1.147 | 192.168.0.147 | 192.168.2.147 |
Mevcut topolojide node’lar arasında 2 subnet bulunur. Testler bir subnet üzerinden yapılır; diğer subnet için testler benzer şekilde tekrarlanabilir:
- Subnet 1: 192.168.0.0/24
- Subnet 2: 192.168.2.0/24
IP ve MTU Testi Spark 1’den Spark 2’ye ping ile bağlantı ve jumbo frame testi yapın:
# Spark 1 üzerinde:
ping -c 4 192.168.0.147
ping -M do -s 8972 -c 4 192.168.0.147
İlk ping normal bağlantıyı, ikinci ping 9000 byte MTU’yu test eder. -M do fragmentation’ı engeller — paket düşmezse MTU 9000 uçtan uca çalışıyor demektir.

TCP Throughput Testi (iperf3) Ethernet/IP katmanı üzerinden temel bant genişliğini ölçün. Bu test RDMA değildir — TCP üzerinden CPU involvement’lı transferdir.
# Spark 2 üzerinde (sunucu):
iperf3 -s
# Spark 1 üzerinde (istemci):
iperf3 -c 192.168.0.147 -P 8 -t 30
-P 8 sekiz paralel akış, -t 30 otuz saniye test süresi. Beklenen sonuç: ~100-120 Gbps toplam throughput.
Not: iperf3 kurulu değilse yükleyin:
sudo apt install iperf3

RDMA Cihazlarını Belirleme RDMA cihaz adlarını öğrenin:
ibdev2netdev
Örnek çıktı: rocep1s0f0 port 1 ==> enp1s0f0np0 (Down) rocep1s0f1 port 1 ==> enp1s0f1np1 (Up) roceP2p1s0f0 port 1 ==> enP2p1s0f0np0 (Down) roceP2p1s0f1 port 1 ==> enP2p1s0f1np1 (Up)

RDMA Write Testi (ib_write_bw) RoCEv2 üzerinden RDMA write işleminin bant genişliğini ölçün. Bu test CPU involvement olmadan doğrudan bellek transferini test eder.
Subnet 1: Spark 2 üzerinde (sunucu):
ib_write_bw -d rocep1s0f1 -F --report_gbits
Spark 1 üzerinde (istemci):
ib_write_bw -d rocep1s0f1 -F --report_gbits 192.168.0.147
Beklenen sonuç: ~100-111 Gbps.

Subnet 2: Spark 2 üzerinde (sunucu):
ib_write_bw -d roceP2p1s0f1 -F --report_gbits
Spark 1 üzerinde (istemci):
ib_write_bw -d roceP2p1s0f1 -F --report_gbits 192.168.2.147
Beklenen sonuç: ~100-111 Gbps.

İki arayüz de ~100 Gbps veriyorsa, her Spark arasında toplam ~200 Gbps RDMA bant genişliği mevcuttur.
RDMA Read Testi (ib_read_bw) RDMA read işleminin bant genişliğini ölçün:
Subnet 1: Spark 2 üzerinde (sunucu):
ib_read_bw -d rocep1s0f1 -F --report_gbits
Spark 1 üzerinde (istemci):
ib_read_bw -d rocep1s0f1 -F --report_gbits 192.168.0.147
Beklenen sonuç: ~95-110 Gbps.

Subnet 2: Spark 2 üzerinde (sunucu):
ib_read_bw -d roceP2p1s0f1 -F --report_gbits
Spark 1 üzerinde (istemci):
ib_read_bw -d roceP2p1s0f1 -F --report_gbits 192.168.2.147

Beklenen sonuç: ~95-110 Gbps.
RDMA Latency Testi (ib_write_lat) Spark 2 üzerinde (sunucu):
ib_write_lat -d rocep1s0f1
Spark 1 üzerinde (istemci):
ib_write_lat -d rocep1s0f1 192.168.0.147

Beklenen sonuç: ~1-3 microsecond latency.
sparkrun ile Model Çalıştırma
Bu adımda, sparkrun üzerinden çok node’lu bir inference iş yükü çalıştırarak cluster’ın uçtan uca çalıştığını doğrulayacağız.
Model ve Recipe
Bu testte nvidia/MiniMax-M2.7-NVFP4 modeli kullanılır. Model, 2 node üzerinde tensor parallelism (TP=2) ile çalıştırılır. sparkrun’un built-in recipe’i vllm-distributed runtime’ını kullanacak şekilde yapılandırılmıştır; bu nedenle 2 node için vllm-ray runtime’ı kullanacak özel bir YAML dosyası hazırlanmıştır.
Modelin Çalıştırılması Aşağıdaki YAML dosyasını minimax-M2.7-nvfp4.yaml adıyla kaydedin:
model: nvidia/MiniMax-M2.7-NVFP4
name: MiniMax-M2.7-NVFP4
runtime: vllm-ray
min_nodes: 2
container: sparkrun-eugr-vllm
defaults:
max_model_len: 196608
host: 0.0.0.0
port: 8000
tensor_parallel: 2
gpu_memory_utilization: 0.85
reasoning_parser: minimax_m2
tool_call_parser: minimax_m2
load_format: instanttensor
pipeline_parallel: 1
recipe_version: '2'
env:
VLLM_MARLIN_USE_ATOMIC_ADD: '1'
builder: eugr
metadata:
quantization: nvfp4
head_dim: 128
num_kv_heads: 8
description: MiniMax-M2.7 NVFP4 (NVIDIA quant)
kv_dtype: fp8
model_dtype: nvfp4
quant_bits: 4
num_layers: 62
command: |-
vllm serve {model} \
--trust-remote-code \
--gpu-memory-utilization {gpu_memory_utilization} \
-tp {tensor_parallel} \
-pp {pipeline_parallel} \
--max-model-len {max_model_len} \
--load-format {load_format} \
--enable-auto-tool-choice \
--tool-call-parser {tool_call_parser} \
--reasoning-parser {reasoning_parser} \
--host {host} \
--port {port}
Ardından modeli çalıştırın:
sparkrun run minimax-M2.7-nvfp4.yaml
SSH Authorization Hatası Çözümü Eğer sparkrun komutu çalıştırıldıktan sonra kendine bağlanırken authorization ile ilgili bir hata alınırsa aşağıdaki komut kullanılır ve sparkrun tekrar çalıştırılır:
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys

Modelin Hazır Olduğunun Doğrulanması
Model başladığında “Application startup complete.” şeklinde bir mesaj alırsınız, artık model kullanıma hazırdır:

Benchmark Sonuçları Bu şekilde ayağa kalkan modelde linkte verdiğimiz benchmark aracıyla yapılan testler sonucunda elde edilen ortalama değerler şu şekildedir:
| Eşzamanlı İstek | TTFT (ms) | Token/sn | Gecikme (sn) | Verim (RPS) |
|---|---|---|---|---|
| 1 | 245 | 26.27 | 4.87 | 0.21 |
| 2 | 299 | 22.34 | 5.74 | 0.17 |
| 4 | 386 | 17.24 | 7.43 | 0.13 |
| 8 | 450 | 12.69 | 10.09 | 0.10 |
| 16 | 435 | 9.05 | 14.16 | 0.07 |
Sonuç ve Doğrulama
Bu dokümandaki adımları takip ederek aşağıdaki bileşenlerden oluşan tam fonksiyonel bir DGX Spark AI cluster’ı kurulmuş olur:
| Bileşen | Durum | Doğrulama Yöntemi |
|---|---|---|
| Management Ağı (10GbE) | Hazır | Düğümler arası ping başarılı |
| Compute Ağı (200GbE QSFP) | Hazır | ib_write_bw ~100-111 Gbps |
| RoCEv2 / RDMA | Hazır | ib_write_lat ~1-3 µs |
| sparkrun Cluster | Hazır | sparkrun setup tamamlandı |
| Model Servisi | Hazır | “Application startup complete.” mesajı |
Cluster Sağlık Kontrolü Özeti
Kurulumun tamamlandığını doğrulamak için aşağıdaki kontrolleri gerçekleştirebilirsiniz:
- Management ağı: Tüm düğümler birbirini ping edebiliyor mu?
- Compute ağı:
ib_write_bwtestinde her subnet ~100 Gbps veriyor mu? - MTU:
ping -M do -s 8972testi paket düşmeden geçiyor mu? - sparkrun mesh: Tüm node’lara şifresiz SSH erişimi çalışıyor mu?
- Model: Benchmark sonuçları yukarıdaki tabloyla tutarlı mı?
Tüm bu kontroller başarılıysa cluster AI iş yükleri için hazırdır.
Sorun Giderme
Docker Storage Driver overlay2 Görünüyor
docker info çıktısında overlay2 görüyorsanız /etc/docker/daemon.json dosyasına containerd-snapshotter feature’ını ekleyin ve Docker’ı yeniden başlatın (bkz. Docker Yapılandırması).
ping -M do ile Jumbo Frame Testi Başarısız
Spark tarafında CX7 arayüzlerinin MTU değerlerinin 9000 olduğundan emin olun: ip link show.
RDMA Bant Genişliği Düşük (~100 Gbps Altında)
- Tüm sistem ve firmware güncellemelerinin yapıldığından emin olun (bkz. Sistem ve Firmware Güncellemeleri).
- Kablo bağlantılarının sağlam olduğunu kontrol edin.
- ibdev2netdev çıktısı ile arayüz-cihaz eşleşmesini doğrulayın.
sparkrun SSH Authorization Hatası
sparkrun çalıştırıldığında authorization hatası alınırsa:
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
Komutunu çalıştırın ve sparkrun’u tekrar çalıştırın.