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 倍。
