Optimum 文件

AMD Instinct GPU 連線

您正在檢視的是需要從原始碼安裝。如果您想進行常規 pip 安裝,請檢視最新的穩定版本 (v1.27.0)。
Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

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 加速器模組)。

4xMI250 machine topology

4xMI250 機器拓撲

這可以透過執行 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 核心具有特權連線。

4xMI250 machine topology

4xMI250 機器拓撲

這可以透過使用 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 效能的差異。

Text Generation Inference latency comparison without/with NUMA balancing

另一種方法是使用 numactl --membind,將使用 GPU 的程序繫結到其對應的 NUMA 節點核心。更多詳情請參見此處

Infinity Fabric

正如 MI210 機器的以下架構所示,某些 GPU 裝置可能透過 Infinity Fabric 連結連線,該連結通常比 PCIe 交換機具有更高的頻寬(每個 Infinity Fabric 連結高達 100 GB/s)。

事實上,透過測量單向複製峰值頻寬,我們發現透過 Infinity Fabric 連結的 MI210 GPU 的通訊速度比透過 PCIe 交換機快約 1.7 倍。

8xMI210 machine topology

8xMI210 機器拓撲

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.