同一台、同一世代,卻不是同一種 GPU

CUDA P2P、NVLink 與 NCCL AllReduce 實測|2026-08-23

這台代號 4028 的伺服器並不是整齊的 8-GPU appliance,而是把 11 張 Volta/GV100 塞進兩個 NUMA domain:六張 Tesla V100、V100S、PG500、兩張 Quadro GV100,再加一張孤立的 16GB FHHL。真正棘手的不是「能不能看到 11 張卡」,而是每張卡的 HBM 時脈、PCIe 路徑、NVLink 與 NCCL transport 都不一樣。
11GPU五種板卡名稱,同屬 GV100 世代
336GiB HBM210 × 32GB + 1 × 16GB
193.5GB/sGPU 7 ↔ 9,NV4 雙向 P2P
16–18µsGPU 10 跨 NUMA、無 P2P 延遲

先講結論

GPU 0–4 是最乾淨的五卡 PIX 島;GPU 7 與 9 是唯一的 NV4 高速雙卡組;第六張卡開始跨 PHB,NCCL scaling 立刻掉一階;GPU 10 位於另一個 NUMA、沒有 P2P、而且只有 16GB,不適合硬塞進 11 卡同步訓練。這台機器的最佳解不是「全部一起跑」,而是按拓樸切工作。

測試平台與方法

測試前先停止 8 個推論服務並確認 GPU 記憶體清空,完成後再全部恢復。CUDA device index 固定使用 PCI_BUS_ID 排序,避免 CUDA 與 nvidia-smi 編號錯位。所有 NCCL validation 都是 0 errors

項目版本/設定備註
Hostlab217(SSH alias: 4028)雙 NUMA,GPU 0–9 在 NUMA 0;GPU 10 在 NUMA 1
Driver580.173.02nvidia-smi 顯示 CUDA 13.0 相容上限
CUDA Samples12.0.140 / sm_70p2pBandwidthLatencyTest
NCCL2.23.4 / CUDA 12.0 / sm_70搭配 nccl-tests 2.13.11
AllReduce1 GiB、float sum、out-of-place另做重複單點與 transport log
版本細節:驅動宣告 CUDA 13.0 相容,不代表拿 CUDA 13 預編譯 binary 就能測 Volta。這次使用保留 sm_70 code object 的 CUDA 12 工具鏈,才是實際執行環境。

五種 GV100:時脈與單卡 HBM 實測

下表的「應用核心」與「記憶體時脈」是 4028 由 NVML 回報的固定 applications clock;「本機 copy」取自 CUDA sample 對角線,代表 device-local copy 的有效頻寬,不等同於廠商標示的理論峰值。

GPU板卡HBM2應用/回報最高核心HBM 時脈理論/推算頻寬本機 copy 實測
0–5Tesla V100-PCIE-32GB ×632GB1230 / 1380 MHz877 MHz900 GB/s804.21 GB/s(平均)
6Tesla V100S-PCIE-32GB32GB1245 / 1597 MHz1107 MHz約 1134 GB/s1017.25 GB/s
7、9Quadro GV100 ×232GB1132 / 1912 MHz850 MHz870 GB/s590.74 GB/s(平均)
8Tesla PG500-21632GB1260 / 1380 MHz1107 MHz約 1134 GB/s1010.67 GB/s
10Tesla V100-FHHL-16GB16GB937 / 1290 MHz810 MHz約 829 GB/s748.68 GB/s
V100S 32GB
1017.25
PG500-216
1010.67
V100 32GB 平均
804.21
V100 FHHL 16GB
748.68
Quadro GV100 平均
590.74 GB/s

V100S 與 PG500 的 1107 MHz HBM 約落在 1.01 TB/s,有效值接近推算峰值的 90%;六張標準 V100 也約 89%。最醒目的是 Quadro GV100:官方峰值為 870 GB/s,但 sample 只量到約 591 GB/s。它們的價值反而在彼此之間的 NV4,而不是單卡 HBM。

功耗狀態不要混寫成規格:15:23 的觀測畫面中 GPU 0–9 被限制在 190 W;18:33 查詢時已回到板卡預設 250 W。GPU 10 的固定上限為 150 W。本文保留兩個時間點,沒有把 190 W 當成板卡原生 TDP。

實際拓樸:兩個 PIX 島、一組 NV4、一張 SYS 孤島

NUMA 0 · PIX island A
0 V1001 V1002 V1003 V1004 V100
NUMA 0 · PIX island B
5 V1006 V100S7 Quadro8 PG5009 Quadro

GPU 7 ↔ 9 另以 NV4 直連

NUMA 1 · SYS
10 V100 FHHL 16GB

經 UPI/SMP interconnect 連往 GPU 0–9;P2P read/write 均為 TNS

路徑代表 pair單向 P2P write雙向GPU write latency相對 PIX
PIX0 ↔ 113.20 GB/s25.13 GB/s1.59–1.60 µs基準
PHB0 ↔ 510.28 GB/s19.71 GB/s2.05–2.07 µs約 0.78×
NV47 ↔ 996.84–96.85 GB/s193.20–193.51 GB/s1.99–2.01 µs約 7.34×
SYS0 ↔ 10無直接 P2P無直接 P2P16.20–18.17 µs約 10× latency

PHB 不是單一固定速度:完整矩陣的單向值為 7.08–10.28 GB/s,雙向為 14.17–19.72 GB/s。GPU 10 的 sample 雖會顯示一般 memory-copy fallback 數字,但它不是 direct P2P,不能與 PIX/PHB/NV4 並排解讀。

NCCL:從 5 卡到 6 卡,第一次跨橋就掉速

先看同樣是兩張卡,路徑可以差十倍

案例GPUalgbwbusbw解讀
2 PIX0、111.40 GB/s11.40 GB/s同一 PCIe switch
2 PHB0、56.99 GB/s6.99 GB/sNCCL 預設改走 SHM
2 NV47、973.31 GB/s73.31 GB/s唯一真正高速雙卡島
2 SYS0、106.90 GB/s6.90 GB/s跨 NUMA,無 direct P2P

Scaling transition

5 GPU
11.17 GB/s busbw
0–4 全在 PIX island A
algbw 6.98
6 GPU
7.91 GB/s busbw
加入 GPU 5,第一次跨 PHB
直接重測 6.75–6.89
10 GPU
6.88 GB/s busbw
兩個五卡島組 ring
重測 6.63–6.87
11 GPU
7.60 GB/s busbw
加入 NUMA 1/SYS GPU 10
algbw 僅 4.18
5 PIX
11.17
6 V100
7.91
10 GPU
6.88
11 GPU
7.60 GB/s

5→6 卡是整台機器最重要的 transition。五張 PIX 的 ring 不必跨 PCIe Host Bridge;加上 GPU 5 後,ring 出現兩條跨島邊,NCCL 預設把這些 PHB 邊選成 SHM/direct,bus bandwidth 因而掉到約 7 GB/s 等級。

11 卡的 busbw 看似從 6.88 回升到 7.60 GB/s,不能直接說 scaling 變好。AllReduce 的 busbw 含拓樸正規化;實際 algbw 只有 4.18 GB/s,而且 GPU 10 只有 16GB、跨 NUMA、沒有 P2P。對真實訓練而言,它通常同時降低容量上限與同步效率。

NCCL transport:支援 P2P,不代表 NCCL 預設會用

nvidia-smi topo -p2p 對 GPU 0–9 全部回報 OK,但 NCCL log 顯示:PIX 與 NV4 走 P2P/direct,跨 PHB 的 ring edge 卻自動選擇 SHM/direct

Ring順序預設 SHM edge
6 GPU0 → 1 → 2 → 3 → 4 → 54→5、5→0
10 GPU0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 9 → 84→5、8→0
11 GPU0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 9 → 8 → 104→5、8→10、10→0

強制 NCCL_P2P_LEVEL=PHB 後,6 與 10 GPU 明顯改善;11 GPU 反而略退。這不是一個能全機套用的萬用環境變數。

案例預設/重測 busbw強制 PHB P2P結果
2 PHB6.997.78 GB/s+11%
6 GPU6.75–6.897.94 GB/s約 +15–18%
10 GPU6.63–6.877.87 GB/s約 +15–19%
11 GPU7.61–7.667.54 GB/s略差,保留預設

這台機器應該怎麼切

工作型態建議 GPU原因
五卡 data parallel0–4單一 PIX island,NCCL busbw 11.17 GB/s,是最乾淨的同步群組
六卡/十卡同步工作0–5/0–9可針對 job 測試 NCCL_P2P_LEVEL=PHB;不要設成整機永久值
64GB 雙卡模型平行7、9唯一 NV4 pair,實測雙向 193.5 GB/s;但 Quadro 單卡 HBM 有效頻寬較低
高 HBM bandwidth 單卡工作6 或 8本機 copy 都超過 1 TB/s
小模型/獨立推論/輔助任務1016GB、150W、NUMA 1、無 P2P;與主 ring 解耦更合理

異構裝同機的真正成本

總 VRAM 與 GPU 張數很好看,但排程單位必須是「拓樸群組」,不是「空閒卡」。只看 nvidia-smi 的 GPU-Util 或 P2P=OK,會同時漏掉 HBM 差異、NCCL transport 選擇、NUMA 邊界與最小 16GB 容量限制。

重現指令與整理資料

CUDA_DEVICE_ORDER=PCI_BUS_ID ./p2pBandwidthLatencyTest
CUDA_DEVICE_ORDER=PCI_BUS_ID CUDA_VISIBLE_DEVICES=0,1 \ ./all_reduce_perf -b 1G -e 1G -f 2 -g 2
NCCL_P2P_LEVEL=PHB CUDA_VISIBLE_DEVICES=0,1,2,3,4,5 \ ./all_reduce_perf -b 1G -e 1G -f 2 -g 6

參考資料

所有數值均來自 4028/lab217 的 2026-08-23 當日實測。單次 benchmark 不是跨機器的通用規格;韌體、power limit、CPU memory traffic 與 NCCL 版本都可能改變結果。