Optimum 文档

AMD Instinct GPU 连接性

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

并获取增强的文档体验

开始使用

AMD Instinct GPU 连接性

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

双芯片拓扑

在单个节点上使用 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,图形计算芯片)实际上对应于一个 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

在为获得最佳性能进行基准测试时,我们建议测试在 /proc/sys/kernel/numa_balancing 处禁用/启用 NUMA 平衡,这可能会影响性能。下表显示了特定情况下 文本生成推理 的性能差异,其中禁用 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 上