Optimum 文件
AMD Instinct GPU 連線
並獲得增強的文件體驗
開始使用
AMD Instinct GPU 連線
在多 GPU 設定中,當使用 Hugging Face 庫與 AMD Instinct MI210 或 MI250 GPU 並使用集體操作時,訓練和推理效能可能會因節點上一起使用的裝置而異。一些用例包括張量並行、管道並行或資料並行。
雙晶片拓撲
在單節點上透過 torchrun
使用 AMD Instinct 機器上的多個裝置?我們建議改用 amdrun --ngpus <num_gpus> <script> <script_args>
,以便自動排程到最佳數量的可用 GPU 以獲得最大效能。
以 MI250 機器為例。如 rocm-smi
所示,有 8 個裝置可用
========================= ROCm System Management Interface =========================
=================================== Concise Info ===================================
GPU Temp (DieEdge) AvgPwr SCLK MCLK Fan Perf PwrCap VRAM% GPU%
0 35.0c 90.0W 800Mhz 1600Mhz 0% auto 560.0W 0% 0%
1 34.0c N/A 800Mhz 1600Mhz 0% auto 0.0W 0% 0%
2 31.0c 95.0W 800Mhz 1600Mhz 0% auto 560.0W 0% 0%
3 37.0c N/A 800Mhz 1600Mhz 0% auto 0.0W 0% 0%
4 35.0c 99.0W 800Mhz 1600Mhz 0% auto 560.0W 0% 0%
5 31.0c N/A 800Mhz 1600Mhz 0% auto 0.0W 0% 0%
6 38.0c 94.0W 800Mhz 1600Mhz 0% auto 560.0W 0% 0%
7 39.0c N/A 800Mhz 1600Mhz 0% auto 0.0W 0% 0%
====================================================================================
然而,正如機器架構描述中所述,一些裝置實際上具有特權連線,而 rocm-smi
中的兩個裝置(兩個 GCD,圖形計算晶片)實際上對應一個 MI250(一個 OAM,OCP 加速器模組)。

這可以透過執行 rocm-smi --shownodesbw
進行檢查:某些裝置 <-> 裝置連結具有更高的最大頻寬。例如,從下表中我們可以得出結論
- 如果使用兩個裝置,應優先使用
CUDA_VISIBLE_DEVICES="0,1"
、"2,3"
、"4,5"
或"6,7"
。 - 如果使用三個裝置,
CUDA_VISIBLE_DEVICES="0,1,6"
是一個不錯的選擇。 - 如果使用四個裝置,
CUDA_VISIBLE_DEVICES="0,1,6,7"
或"2,3,4,5"
是一個不錯的選擇。
========================= ROCm System Management Interface =========================
==================================== Bandwidth =====================================
GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7
GPU0 N/A 50000-200000 50000-50000 0-0 0-0 0-0 50000-100000 0-0
GPU1 50000-200000 N/A 0-0 50000-50000 0-0 50000-50000 0-0 0-0
GPU2 50000-50000 0-0 N/A 50000-200000 50000-100000 0-0 0-0 0-0
GPU3 0-0 50000-50000 50000-200000 N/A 0-0 0-0 0-0 50000-50000
GPU4 0-0 0-0 50000-100000 0-0 N/A 50000-200000 50000-50000 0-0
GPU5 0-0 50000-50000 0-0 0-0 50000-200000 N/A 0-0 50000-50000
GPU6 50000-100000 0-0 0-0 0-0 50000-50000 0-0 N/A 50000-200000
GPU7 0-0 0-0 0-0 50000-50000 0-0 50000-50000 50000-200000 N/A
Format: min-max; Units: mps
"0-0" min-max bandwidth indicates devices are not connected directly
此表僅提供理論最小/最大頻寬。驗證哪些裝置可以一起使用的好方法是在您的裝置上執行 rocm_bandwidth_test。
NUMA 節點
在某些 AMD 機器上,如下圖所示,某些裝置可能與某些 CPU 核心具有特權連線。

這可以透過使用 rocm-smi --showtoponuma
來檢查,它會顯示 NUMA 拓撲
==================================== Numa Nodes ====================================
GPU[0] : (Topology) Numa Node: 0
GPU[0] : (Topology) Numa Affinity: 0
GPU[1] : (Topology) Numa Node: 0
GPU[1] : (Topology) Numa Affinity: 0
GPU[2] : (Topology) Numa Node: 0
GPU[2] : (Topology) Numa Affinity: 0
GPU[3] : (Topology) Numa Node: 0
GPU[3] : (Topology) Numa Affinity: 0
GPU[4] : (Topology) Numa Node: 1
GPU[4] : (Topology) Numa Affinity: 1
GPU[5] : (Topology) Numa Node: 1
GPU[5] : (Topology) Numa Affinity: 1
GPU[6] : (Topology) Numa Node: 1
GPU[6] : (Topology) Numa Affinity: 1
GPU[7] : (Topology) Numa Node: 1
GPU[7] : (Topology) Numa Affinity: 1
並且可以使用 rocm_bandwidth_test 檢查頻寬差異(已刪除)
Bidirectional copy peak bandwidth GB/s
D/D cpu0 cpu1
cpu0 N/A N/A
cpu1 N/A N/A
0 47.763 38.101
1 47.796 38.101
2 47.732 36.429
3 47.709 36.330
4 36.705 47.468
5 36.725 47.396
6 35.605 47.294
7 35.377 47.233
在對最佳效能進行基準測試時,我們建議在不啟用/啟用 NUMA 平衡(位於 /proc/sys/kernel/numa_balancing
)的情況下進行測試,這可能會影響效能。下表顯示了在特定情況下,停用 NUMA 平衡顯著提高 Text Generation Inference 效能的差異。

另一種方法是使用 numactl --membind
,將使用 GPU 的程序繫結到其對應的 NUMA 節點核心。更多詳情請參見此處。
Infinity Fabric
正如 MI210 機器的以下架構所示,某些 GPU 裝置可能透過 Infinity Fabric 連結連線,該連結通常比 PCIe 交換機具有更高的頻寬(每個 Infinity Fabric 連結高達 100 GB/s)。
事實上,透過測量單向複製峰值頻寬,我們發現透過 Infinity Fabric 連結的 MI210 GPU 的通訊速度比透過 PCIe 交換機快約 1.7 倍。
