Optimum 文档

AMD Instinct GPU 连接性

您正在查看 main 版本,该版本需要从源代码安装。如果您想要常规 pip 安装,请查看最新的稳定版本 (v1.24.0)。
Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

AMD Instinct GPU 连接性

当在多 GPU 设置中使用带有 AMD Instinct MI210 或 MI250 GPU 的 Hugging Face 库,并且使用了 collective 操作时,训练和推理性能可能会因节点上一起使用的设备而异。一些用例例如是张量并行、流水线并行或数据并行。

双 Die 拓扑

在单节点上通过 torchrun 在 AMD Instinct 机器上使用多个设备?我们建议使用 amdrun --ngpus <num_gpus> <script> <script_args> 来自动调度到最佳的 num_gpus 以获得最佳性能。

让我们以 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,图形计算 Die)实际上对应于一个 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),这可能会影响性能。下表显示了 Text Generation Inference 在特定情况下性能的差异,其中禁用 NUMA 平衡大大提高了性能。

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 上更新