Optimum 文档
AMD Instinct GPU 连接性
并获得增强的文档体验
开始使用
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 加速器模块)。

这可以通过运行 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
),这可能会影响性能。下表显示了 Text Generation Inference 在特定情况下性能的差异,其中禁用 NUMA 平衡大大提高了性能。

另一种方法是使用 numactl --membind
,将使用 GPU 的进程绑定到其对应的 NUMA 节点核心。更多详情请见 此处。
Infinity Fabric
正如 MI210 机器的以下架构所示,一些 GPU 设备可以通过 Infinity Fabric 链接 连接,该链接通常比 PCIe 交换机具有更高的带宽(每个 Infinity Fabric 链接高达 100 GB/s)。
实际上,测量单向复制峰值带宽,我们看到通过 Infinity Fabric 链接的 MI210 GPU 的通信速度比通过 PCIe 交换机快约 1.7 倍。
