同一台、同一世代,卻不是同一種 GPU
CUDA P2P、NVLink 與 NCCL AllReduce 實測|2026-08-23
先講結論
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。
| 項目 | 版本/設定 | 備註 |
|---|---|---|
| Host | lab217(SSH alias: 4028) | 雙 NUMA,GPU 0–9 在 NUMA 0;GPU 10 在 NUMA 1 |
| Driver | 580.173.02 | nvidia-smi 顯示 CUDA 13.0 相容上限 |
| CUDA Samples | 12.0.140 / sm_70 | p2pBandwidthLatencyTest |
| NCCL | 2.23.4 / CUDA 12.0 / sm_70 | 搭配 nccl-tests 2.13.11 |
| AllReduce | 1 GiB、float sum、out-of-place | 另做重複單點與 transport log |
sm_70 code object 的 CUDA 12 工具鏈,才是實際執行環境。五種 GV100:時脈與單卡 HBM 實測
下表的「應用核心」與「記憶體時脈」是 4028 由 NVML 回報的固定 applications clock;「本機 copy」取自 CUDA sample 對角線,代表 device-local copy 的有效頻寬,不等同於廠商標示的理論峰值。
| GPU | 板卡 | HBM2 | 應用/回報最高核心 | HBM 時脈 | 理論/推算頻寬 | 本機 copy 實測 |
|---|---|---|---|---|---|---|
| 0–5 | Tesla V100-PCIE-32GB ×6 | 32GB | 1230 / 1380 MHz | 877 MHz | 900 GB/s | 804.21 GB/s(平均) |
| 6 | Tesla V100S-PCIE-32GB | 32GB | 1245 / 1597 MHz | 1107 MHz | 約 1134 GB/s | 1017.25 GB/s |
| 7、9 | Quadro GV100 ×2 | 32GB | 1132 / 1912 MHz | 850 MHz | 870 GB/s | 590.74 GB/s(平均) |
| 8 | Tesla PG500-216 | 32GB | 1260 / 1380 MHz | 1107 MHz | 約 1134 GB/s | 1010.67 GB/s |
| 10 | Tesla V100-FHHL-16GB | 16GB | 937 / 1290 MHz | 810 MHz | 約 829 GB/s | 748.68 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。
實際拓樸:兩個 PIX 島、一組 NV4、一張 SYS 孤島
GPU 7 ↔ 9 另以 NV4 直連
經 UPI/SMP interconnect 連往 GPU 0–9;P2P read/write 均為 TNS
| 路徑 | 代表 pair | 單向 P2P write | 雙向 | GPU write latency | 相對 PIX |
|---|---|---|---|---|---|
| PIX | 0 ↔ 1 | 13.20 GB/s | 25.13 GB/s | 1.59–1.60 µs | 基準 |
| PHB | 0 ↔ 5 | 10.28 GB/s | 19.71 GB/s | 2.05–2.07 µs | 約 0.78× |
| NV4 | 7 ↔ 9 | 96.84–96.85 GB/s | 193.20–193.51 GB/s | 1.99–2.01 µs | 約 7.34× |
| SYS | 0 ↔ 10 | 無直接 P2P | 無直接 P2P | 16.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 卡,第一次跨橋就掉速
先看同樣是兩張卡,路徑可以差十倍
| 案例 | GPU | algbw | busbw | 解讀 |
|---|---|---|---|---|
| 2 PIX | 0、1 | 11.40 GB/s | 11.40 GB/s | 同一 PCIe switch |
| 2 PHB | 0、5 | 6.99 GB/s | 6.99 GB/s | NCCL 預設改走 SHM |
| 2 NV4 | 7、9 | 73.31 GB/s | 73.31 GB/s | 唯一真正高速雙卡島 |
| 2 SYS | 0、10 | 6.90 GB/s | 6.90 GB/s | 跨 NUMA,無 direct P2P |
Scaling transition
algbw 6.98
直接重測 6.75–6.89
重測 6.63–6.87
algbw 僅 4.18
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 GPU | 0 → 1 → 2 → 3 → 4 → 5 | 4→5、5→0 |
| 10 GPU | 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 9 → 8 | 4→5、8→0 |
| 11 GPU | 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 9 → 8 → 10 | 4→5、8→10、10→0 |
強制 NCCL_P2P_LEVEL=PHB 後,6 與 10 GPU 明顯改善;11 GPU 反而略退。這不是一個能全機套用的萬用環境變數。
| 案例 | 預設/重測 busbw | 強制 PHB P2P | 結果 |
|---|---|---|---|
| 2 PHB | 6.99 | 7.78 GB/s | +11% |
| 6 GPU | 6.75–6.89 | 7.94 GB/s | 約 +15–18% |
| 10 GPU | 6.63–6.87 | 7.87 GB/s | 約 +15–19% |
| 11 GPU | 7.61–7.66 | 7.54 GB/s | 略差,保留預設 |
這台機器應該怎麼切
| 工作型態 | 建議 GPU | 原因 |
|---|---|---|
| 五卡 data parallel | 0–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 |
| 小模型/獨立推論/輔助任務 | 10 | 16GB、150W、NUMA 1、無 P2P;與主 ring 解耦更合理 |
異構裝同機的真正成本
總 VRAM 與 GPU 張數很好看,但排程單位必須是「拓樸群組」,不是「空閒卡」。只看 nvidia-smi 的 GPU-Util 或 P2P=OK,會同時漏掉 HBM 差異、NCCL transport 選擇、NUMA 邊界與最小 16GB 容量限制。
重現指令與整理資料
參考資料
- NVIDIA Tesla V100 官方產品資料
- NVIDIA Quadro GV100 Data Sheet
- NVIDIA CUDA Samples: p2pBandwidthLatencyTest
- NVIDIA nccl-tests
- NCCL Environment Variables 官方文件
所有數值均來自 4028/lab217 的 2026-08-23 當日實測。單次 benchmark 不是跨機器的通用規格;韌體、power limit、CPU memory traffic 與 NCCL 版本都可能改變結果。
王培儒