GP-Spark 快速入門 ( NVMe 需另外購買 )

NVMe-oF 高性能外接儲存 · 100G QSFP28 , 搭配本次開箱測試 另外購買的 MSI EdgeXpert ( DGX-Spark)

產品概述

GP-Spark 是一款 JBOF(Just a Bunch of Flash)NVMe-oF 儲存目標,內建 RDMA / NVMe-oF 硬體卸載引擎(專用 ASIC),以 100GbE(4 × 25G NRZ)QSFP28 介面透過 RoCEv2 連接 DGX Spark 等主機,把外接 NVMe SSD 提供給主機使用。搭配主機端的 SupremeRAID™ AEC,可由主機 GPU 執行 RAID,組成 SupremeJBOF 儲存方案。

型號 Model
GP-Spark-1000
管理 IP
192.168.10.1
帳號 / 密碼
admin / 123
資料面預設 IP
10.10.10.12/24
資料介面
100G QSFP28
供電
Type-C 20V⎓3.25A+ (<65W)
NVMe-oF 服務埠
4420
工作溫度
0–40°C
管理 Wi-Fi(GP-Spark-xxxx)密碼
12345678

※ 管理 IP 與帳密以機身標籤為準(見下方標籤照片)。管理介面需先連上 GP-Spark 的 Wi-Fi,再開啟 http://192.168.10.1;它與 NVMe-oF 儲存 IP(預設 10.10.10.12/24)是分開的。非隔離網路部署前,建議先變更出廠帳密。

(電源供應器為選配,請另行購買原廠核可、符合安規的 Type-C 20V / 3.25A 以上電源供應器)。

開箱

裝置與介面

背面連接埠:usb1(Type-C 電源輸入)、usb2(Type-C 設定埠)、100G QSFP28 儲存資料埠
背面連接埠:usb1(Type-C 電源輸入)、usb2(Type-C 設定埠)、100G QSFP28 儲存資料埠
機身標籤:型號、S/N、管理 IP、帳號密碼、供電規格
機身標籤:型號、S/N、管理 IP、帳號密碼、供電規格

介面說明

配件清單

請依訂單與裝箱單核對內容,選配品可能不包含在內:

組網方式

GP-Spark 透過 100G QSFP28 介面,採用 QSFP28 DAC 線或光纖模組,連接 DGX Spark 的 ConnectX-7 兩個介面中任一介面,或相容的 100GbE 主機網卡/交換器埠。連線需符合 100GbE / 4 × 25G NRZ 與 RoCEv2;四條 25G 通道組成一條 100GbE 連線,不是四個獨立埠。設備預設網路模式為 RS-FEC,請與對接端設定相容。

產品對接系統要求

以下作業系統可連線至 GP-Spark(JBOF):

GP-Spark 配置步驟

  1. 步驟1-網路配置

    將 DGX-Spark 主機的儲存網卡 IP 設為與 GP-Spark 同網段( GP-Spark 出廠預設 10.10.10.12)。本次開箱 使用 DGX-Spark 背面左埠 enP2p1s0f0np0 = 10.10.10.1

    # 設定埠位址(只用 ip addr add,不對儲存網卡做 ip link down/up)
    sudo ip addr add 10.10.10.1/24 dev enP2p1s0f0np0    # DGX-Spark 背面左埠 -> GP-Spark
    
    
    # 確認位址已生效
    ip -4 addr show enP2p1s0f0np0
    
    
    # 測試連通(-I 指定從哪一條線送)
    ping -c3 -I enP2p1s0f0np0 10.10.10.12    # 走左埠測 GP-Spark-1
    

    ※ GP-Spark 是 10.10.10.12,靠「哪個實體埠」區分;埠 IP(10.10.10.1) 之後即用作 nvme … -w 的 --host-traddr。 用完可 sudo ip addr del 10.10.10.2/24 dev enp1s0f1np1 移除; 若要開機自動生效,寫進 netplan/networkd(勿放 /etc/fstab)。

  2. 步驟2-安裝 NVMe 軟體

    安裝 nvme-cli 以管理與連接 GP-Spark(可線上安裝或用本地源):

    # CentOS
    sudo yum install -y nvme-cli
    # Ubuntu
    sudo apt-get install -y nvme-cli
  3. 步驟3-載入 RDMA 驅動

    sudo modprobe nvme-fabrics
    sudo modprobe rdma_cm
    sudo modprobe nvme
    sudo modprobe -v nvme-core multipath=0
    sudo modprobe -v nvme-rdma register_always=0
  4. 步驟4-網卡設置巨型幀(Jumbo Frame)

    MTU 依「對接的 GP-Spark 機型」而定。本機實測時, 搭配 另外購買的 MSI EdgeXpert ( DGX-Spark) 背面左埠 連接 GP-Spark, MTU 先依照主機(預設值) 與 GP-Spark(預設值) 能列出 subsystem 才算對; 偵測不到就把該埠 MTU 降到 1500 再試 ( ping 會過不代表 MTU 對,RDMA 建不起來時 ping 仍通)。 User Guide 以 MTU 5000 為設定範例;請確認主機、交換器(若有)與 GP-Spark 整條路徑都支援所設定的 MTU。

    sudo nvme discover -t rdma -a 10.10.10.12 -s 4420 -w 10.10.10.1
    
    # 偵測不到就把該埠 MTU 降到 1500 再試
    
    sudo ip link set dev enP2p1s0f0np0 mtu 1500
  5. 步驟5-NVMe SSD 盤發現

    探測 GP-Spark 提供的 NVMe-oF subsystem。目標位址(--traddr/-a)
    固定是 GP-Spark 的 10.10.10.12
    , 主機自己的IP; 用 --host-traddr(-w)綁定要走哪一條線 (左埠 10.10.10.1)

    # DGX-Spark 左埠 ( GP-Spark )
    sudo nvme discover -t rdma -a 10.10.10.12 -s 4420 -w 10.10.10.1
    
    # 會出現結果如下 ...
    
    	Discovery Log Number of Records 4, Generation counter 0
    	=====Discovery Log Entry 0======
    	trtype:  rdma
    	adrfam:  ipv4
    	subtype: nvme subsystem
    	treq:    not specified
    	portid:  0
    	trsvcid: 4420
    	subnqn:  nqn.2015-09.com.wdc:nvme.1
    	traddr:  10.10.10.12
    	eflags:  none
    	rdma_prtype: roce-v2
    	rdma_qptype: connected
    	rdma_cms:    rdma-cm
    	rdma_pkey: 0x0000
    
    # 摘錄 , 中間省略 ...
    
    	=====Discovery Log Entry 3======
    	trtype:  rdma
    	adrfam:  ipv4
    	subtype: nvme subsystem
    	treq:    not specified
    	portid:  0
    	trsvcid: 4420
    	subnqn:  nqn.2015-09.com.wdc:nvme.4
    	traddr:  10.10.10.12
    	eflags:  none
    	rdma_prtype: roce-v2
    	rdma_qptype: connected
    	rdma_cms:    rdma-cm
    	rdma_pkey: 0x0000
    

    ※ 常見錯誤:把 --traddr 填成主機埠 IP(10.10.10.1)會得到 Connection reset by peer / failed to add controller——那是「連到自己」。目標一律 10.10.10.12。

  6. 步驟6-硬碟掛載(連接)

    $nqn 對應上一步探測到的 subnqn;目標同樣是 10.10.10.12,並用 -w 綁同一條線。連接成功無返回值, 可用 lsblk 或 nvme list 查看:

    # 連接測試 , 先查看 要連接的 裝置名稱 與 uuid
    
    cat /etc/nvme/hostnqn
    
    # 會顯示如下:
    	nqn.2014-08.org.nvmexpress:uuid:9d400c12-d2e8-af54-b9d8-fc9d05013b1f
    
    
    # 指令: 連線第 1 個 Subsystem (nvme.1)
    sudo nvme connect -t rdma -a 10.10.10.12 -s 4420 -w 10.10.10.1 \
      -n nqn.2015-09.com.wdc:nvme.1 \
      -q nqn.2014-08.org.nvmexpress:uuid:9d400c12-d2e8-af54-b9d8-fc9d05013b1f
    
    # 指令: 連線第 2 個 Subsystem (nvme.2)
    sudo nvme connect -t rdma -a 10.10.10.12 -s 4420 -w 10.10.10.1 \
      -n nqn.2015-09.com.wdc:nvme.2 \
      -q nqn.2014-08.org.nvmexpress:uuid:9d400c12-d2e8-af54-b9d8-fc9d05013b1f
    
    # 指令: 連線第 3 個 Subsystem (nvme.3)
    sudo nvme connect -t rdma -a 10.10.10.12 -s 4420 -w 10.10.10.1 \
      -n nqn.2015-09.com.wdc:nvme.3 \
      -q nqn.2014-08.org.nvmexpress:uuid:9d400c12-d2e8-af54-b9d8-fc9d05013b1f
    
    # 指令: 連線第 4 個 Subsystem (nvme.4)
    sudo nvme connect -t rdma -a 10.10.10.12 -s 4420 -w 10.10.10.1 \
      -n nqn.2015-09.com.wdc:nvme.4 \
      -q nqn.2014-08.org.nvmexpress:uuid:9d400c12-d2e8-af54-b9d8-fc9d05013b1f
    
    
    # 出現結果
    connecting to device: nvme1
    connecting to device: nvme2
    connecting to device: nvme3
    connecting to device: nvme4
    
    
    # 查看連上的遠端 NVMe
    nvme list
    
    # 結果如下: ( 下列 NVME 需另外購買 )
    
    Node          Generic        SN                      Model      Namespace  Usage    Format                          FW   Rev
    --------------------- --------------------- -------------------- ---------------------------------------- ---------- -------------------------- ---------------- --------
    /dev/nvme0n1    /dev/ng0n1    S8C2NG0YA27605         SAMSUNG MZALC4T0HBL1-00B07  0x1        223.88  GB /   4.10  TB    512   B +  0 B   NXHB202Q
    /dev/nvme1n1    /dev/ng1n1    41100768072400043575   PCIe SSD    0x1    512.11  GB / 512.11  GB    512   B +  0 B   EJFMC0.0
    /dev/nvme2n1    /dev/ng2n1    DE7F0768082100024250   PCIe SSD    0x1    512.11  GB / 512.11  GB    512   B +  0 B   EJFMC0.0
    /dev/nvme3n1    /dev/ng3n1    41100768072400043576   PCIe SSD    0x1    512.11  GB / 512.11  GB    512   B +  0 B   EJFMC0.0
    /dev/nvme4n1    /dev/ng4n1    41100768072400043577   PCIe SSD    0x1    512.11  GB / 512.11  GB    512   B +  0 B   EJFMC0.0
    

    ※ 用完卸除:sudo nvme disconnect -n $nqn(勿用 disconnect-all)。
    此步只是把遠端 NVMe 接成區塊裝置,不含建檔案系統;
    GP-Spark 為 RAID 陣列成員碟時,切勿格式化或寫入!
    此 nvme disconnect 僅適用於單獨以 nvme-cli 連線;SupremeRAID™ AEC 的 RAID 使用中時不可直接下 nvme disconnect,請依 User Guide 4.2 的關機程序。

設定流程與授權(SupremeRAID™ AEC)

前面的步驟是單獨用 nvme-cli 連線。若要使用 GPU 加速 RAID,需在每一台支援的 DGX 主機上安裝 SupremeRAID™ AEC,再由 AEC 連接 GP Spark 並建立 RAID。依部署方式選擇起點:

部署方式起點接著
單台主機、自動安裝自動設定腳本(6.1)create_raid=false 時接著建立 PD / DG / VD;否則直接驗證建好的磁碟區
單台主機、手動安裝安裝程式步驟(6.2)連接目標並建立 PD / DG / VD(6.3)
多台 DGX 主機多主機部署順序(6.6,見下一章)以 create_raid=false 安裝 → 切 Namespace → 分配給各主機 → 各自建 RAID

AEC 透過 Remote NVMe-oF Target 功能管理 GP Spark 連線(graidctl),連線資訊會保存並在重開機後自動重連,不需要另外設定 nvme-cli 自動連線服務。

安裝前檢查清單

安裝 SupremeRAID™ AEC(手動)

先執行 pre-installer(含 NVIDIA 驅動與相依套件),再執行 installer。--productline 請用安裝包接受的值(目前為 ae),--yes 允許自動重開機。

PRE_INSTALLER='/absolute/path/to/pre-installer.run'
sudo chmod +x "$PRE_INSTALLER"
sudo "$PRE_INSTALLER" --productline=ae --yes

INSTALLER='/absolute/path/to/installer.run'
sudo chmod +x "$INSTALLER"
sudo "$INSTALLER" --accept-license

授權啟用與 GPU 綁定

  1. 開啟管理介面 https://<DGX 管理 IP>:50060(需開放 TCP 50060)。這是 DGX 上的 AEC 管理介面,和 GP Spark 的網頁介面 http://192.168.10.1 不同。
  2. 輸入主機 token;遺失時可用下方指令重新產生,token 請妥善保管。
  3. 選擇授權模式:Perpetual(永久)需 2.0 驅動適用的 V2 授權碼並設定密碼;Subscription(訂閱)按月計費,以入口網站帳號登入。
  4. 綁定 GPU,之後即可開始建立 RAID。
sudo graid-mgr host_token gen
授權需求:每一台執行 SupremeRAID™ AEC 的 DGX 都需要各自有效的 AEC 授權,並各自完成啟用與 GPU 綁定。多台主機共用同一台 GP Spark,不代表一份授權可涵蓋其他主機。

用自動設定腳本安裝(建議)

腳本會檢查 NVIDIA 驅動、執行 pre-installer 與 installer、在必要的重開機之間自動續跑,並驗證 AEC 服務。它不會設定網路、修改 Secure Boot 或簽署模組,這些要先自行完成。安裝包需放在設定檔 [supremeraid] package_dir 指定的目錄(預設 /opt/graid/packages)。

wget https://download.graidtech.com/misc/tools/gpspark_setup/gpspark_setup.zip
unzip gpspark_setup.zip

sudo python3 gpspark_setup.py --dry-run     # preflight only, no changes
sudo python3 gpspark_setup.py               # install (resumes after reboots)
sudo python3 gpspark_setup.py --status      # current stage / next action
sudo python3 gpspark_setup.py --verify      # check AEC services

預設 create_raid=false 只安裝軟體,完成後要再手動建立 PD / DG / VD。設成 true 會建立 RAID 並格式化磁碟,只能用在確認過、已備份的新磁碟。失敗時看 /var/lib/gpspark-setup/setup.log,不要把 --reset 當重試用(會清掉進度)。

sudo graidctl list remote_target
sudo graidctl list physical_drive
sudo graidctl list drive_group
sudo graidctl list virtual_drive
findmnt -M /mnt/graid
df -h /mnt/graid

多台 DGX 主機共用 GP Spark(Namespace 設定)

一台 GP Spark 可以把每顆 SSD 切成多個 NVMe Namespace,分配給多台 DGX Spark。每台主機用分配到的 Namespace 建立自己的 AEC Drive Group 與 Virtual Drive,各自擁有獨立容量;這不是共享檔案系統,也不能多台同時存取同一個 VD。

主機每顆 SSD 各取一個 Namespace該主機上的 AEC 儲存
DGX 0SSD 0、1、2、3 的 NS 14 個 PD → 本機 DG / VD
DGX 1SSD 0、1、2、3 的 NS 24 個 PD → 本機 DG / VD
DGX 2SSD 0、1、2、3 的 NS 34 個 PD → 本機 DG / VD
DGX 3SSD 0、1、2、3 的 NS 44 個 PD → 本機 DG / VD

多主機部署順序

切 Namespace 與分配主機必須全部完成後,才能讓任何主機用 graidctl connect remote_target 連線或建立 PD / DG / VD。
  1. 每一台 DGX:以 create_raid=false 安裝 AEC,完成授權啟用與 GPU 綁定;先不要用 AEC 連接 GP Spark,也不要建立任何 RAID。
  2. 管理主機(例如 DGX 0):用 nvme-cli 連接所有 SSD,建立並套用一份切割計畫(只有管理主機做這一步)。
  3. JBOF 管理者:依 GP Spark 韌體程序把每個 Namespace 分配給對應主機,完成連線交接並確認隔離;需要協助時帶著分配記錄聯絡技術支援。
  4. 每一台使用端 DGX:用 graidctl 連線、確認只看到分配給自己的 Namespace,再建立並驗證自己的 RAID;完成一台再做下一台。

管理主機:連接 SSD 並切 Namespace

探測 GP Spark 的儲存子系統(選 storage subsystem,不是 discovery subsystem),把 4 顆 SSD 的 subnqn 填進下方清單後全部連上。務必確認每個 NQN 與序號對應到正確的 SSD,絕對不要選到本機開機碟。

TARGET_IP=10.10.10.12
TARGET_PORT=4420
sudo nvme discover -t rdma -a "$TARGET_IP" -s "$TARGET_PORT"

SSD_NQNS=(
  'replace-with-ssd0-nqn' 'replace-with-ssd1-nqn'
  'replace-with-ssd2-nqn' 'replace-with-ssd3-nqn'
)
for SSD_NQN in "${SSD_NQNS[@]}"; do
  sudo nvme connect -t rdma -a "$TARGET_IP" -s "$TARGET_PORT" \
    -n "$SSD_NQN" --nr-io-queues=8 || break
done
nvme list-subsys
nvme list

在 gpspark_setup.conf 設定每顆 SSD 要切出的大小(以下範例:4 顆 SSD 各切 4 個 100 GiB,共 16 個)。每顆 SSD 需有至少 400 GiB 未配置容量與 4 個空的 Namespace 位置;現有 Namespace 會保留。

[raid]
create_raid = false
namespace_manifest =
nvmf_address = 10.10.10.12
nvmf_svcid = 4420
nvmf_transport = rdma
[namespace]
nqn =
ssd_serial =
sizes_gib = 100,100,100,100
lba_bytes = 512

先存成計畫檔並檢查(不會改動任何 Namespace),停止所有相關主機的 I/O 後再套用;套用時要輸入畫面上的確認字串。批次是逐顆執行、不會回復:若中途失敗,保留同一份計畫檔與 journal,用 --namespace-resume 繼續,絕對不要刪 journal。

sudo python3 gpspark_setup.py --namespace-plan --namespace-batch \
  --plan-file batch-plan.json

sudo python3 gpspark_setup.py --namespace-apply --namespace-batch \
  --plan-file batch-plan.json
# Type "APPLY BATCH 4 SSDS" to continue

sudo python3 gpspark_setup.py --namespace-apply --namespace-batch \
  --plan-file batch-plan.json --namespace-resume   # only after a failure

完成後從 journal 記下每個 Namespace 的 NSID、UUID 與容量,填寫每台 DGX 的分配記錄(SSD 序號 / 子系統 NQN、NSID、UUID、容量),交給 JBOF 管理者做主機分配。

每台 DGX:連線、確認分配並建立 RAID

主機分配與交接完成後,在該台 DGX 執行以下指令,逐一比對看到的 Namespace 是否和分配記錄一致。若看到不屬於自己的 Namespace、重複或歸屬不清,不要建立 PD,先修正分配並和技術支援確認隔離。

sudo graidctl connect remote_target rdma 10.10.10.12 ipv4 4420
sudo graidctl list nvme_drive
nvme list-subsys
nvme list

確認無誤後,只用這台的 4 個 Namespace(各來自不同 SSD)依手冊 6.3.2 建立 PD → DG → VD 並建立檔案系統,絕對不要選取全部探測到的 Namespace。完成後檢查:

sudo graidctl list physical_drive
sudo graidctl list drive_group
sudo graidctl list virtual_drive

容量估算:4 個 100 GiB 組成 RAID 5,約 300 GiB 可用(未扣系統開銷)。請在每台主機測試讀寫完整性,並量測共用 100GbE 連線下的總吞吐量。

疑難排解與常見問題

AEC 服務沒有啟動

查看服務狀態與記錄,排除原因後依序重啟 graid、graid-mgr,再檢查一次狀態(重啟成功通常沒有輸出,不代表一定正常)。

systemctl status graid.service graid-mgr.service
journalctl -u graid.service -u graid-mgr.service -b
systemctl restart graid.service
systemctl restart graid-mgr.service

Drive Group 一直進入 RESYNC

通常是 GP Spark 連線不穩定:網路短暫中斷 → Namespace 掉線 → 恢復後狀態不一致而重新同步。優先檢查線材、連接埠、RoCEv2 設定與 GP Spark 網路穩定度。不要為了消除 RESYNC 重建現有的 Drive Group。

graidctl list physical_drive
graidctl list remote_target
nvme list-subsys
dmesg | grep -i nvme

建立 DG / VD 失敗(graid_create_vd_ns,錯誤 -17)

-17(EEXIST)代表物件或資源衝突,常見原因是 VD 仍被掛載或被程式占用。先停止應用程式、I/O 與 automount,釋放 VD 後再確認是否已留下 DG / VD,再決定是否重試。

mount | grep gdg
lsof /dev/gdg0n1
umount /mnt/graid
graidctl list drive_group
graidctl list virtual_drive

graidctl 無法連上遠端目標

先確認主機不透過 AEC 也能用 RDMA 探測到目標;探測不到就檢查位址、連接埠、網路與 RDMA。探測成功後再重試連線,若仍看不到 Namespace,檢查目標存取權限與 Host NQN。

nvme discover --transport=rdma --traddr=10.10.10.12 --trsvcid=4420
graidctl connect remote_target rdma 10.10.10.12 ipv4 4420

多主機常見問題

一定要先切完 Namespace,AEC 才能連線嗎?
是。新部署要先切好、記錄 Namespace 並完成主機分配,才能在任何主機執行 graidctl connect remote_target(指令是 connect,不是 create)。
可以超過四台 DGX 嗎?
四台只是範例。只要 SSD 的 Namespace 數量與容量足夠、韌體支援所需的主機分配,並驗證整體設定,就有可能;實際支援數量請向 Graid 與 JBOF 廠商確認。
每台 DGX 都需要 AEC 授權嗎?
是。每台執行 AEC 的 DGX 都要有自己的有效授權並完成啟用與 GPU 綁定;共用同一台 GP Spark 不能共用授權。
每台 DGX 都要執行 Namespace 套用嗎?
不用。只有管理主機執行並保存計畫與 journal;其他主機在交接後連線、確認自己的 Namespace,再建立自己的 RAID。
目標已經用 AEC 連上了怎麼辦?
先不要切 Namespace。檢查現有的遠端目標、PD、DG、VD 與所有主機的使用情況,安排維護與連線交接;腳本偵測到本機已有 AEC PD 或 DG 時會拒絕套用。

完整內容(進階手動切割、單顆 SSD 更換與回復、解除安裝等)請參考《SupremeJBOF User Guide V1.1.1》。

注意事項

GP-Spark 是透過 NVMe-oF 乙太網連接硬碟(非本地 PCIe),系統開機時 fstab 永久掛載會因為裝置尚未連線而無法識別,導致開機異常。

若已誤操作導致系統無法正常啟動:進入單使用者模式,修改 /etc/fstab 刪除該硬碟掛載項, 讓系統先正常啟動,再以 nvme-cli 手動掛載 SSD。

※ 以上限制針對單獨連線的 NVMe-oF namespace。使用 SupremeRAID™ AEC 時,由服務管理目標連線,RAID 虛擬磁碟可依 User Guide 4.1 / 6.3.2 使用網路/服務相依的 fstab 與 automount 設定;但仍不可把底層 NVMe-oF namespace 當成本機硬碟加入 fstab。