我们正在使用带有 NVML 自动检测功能的 Slurm 20.02,在一些带有 NVLink 的 8-GPU 节点上,Slurm 以一种令人惊讶的方式分配了 4-GPU 作业,这似乎是次优的。
在具有 8 个 Nvidia A40 GPU、4 个 NVLink 桥接器和两个 AMD EPYC 7302 CPU 的系统上,我们具有以下拓扑:
$ nvidia-smi topo -m
GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 CPU Affinity NUMA Affinity
GPU0 X NV4 SYS SYS SYS SYS SYS SYS 12-15,44-47 3
GPU1 NV4 X SYS SYS SYS SYS SYS SYS 8-11,40-43 2
GPU2 SYS SYS X NV4 SYS SYS SYS SYS 4-7,36-39 1
GPU3 SYS SYS NV4 X SYS SYS SYS SYS 0-3,32-35 0
GPU4 SYS SYS SYS SYS X NV4 SYS SYS 28-31,60-63 7
GPU5 SYS SYS SYS SYS NV4 X SYS SYS 24-27,56-59 6
GPU6 SYS SYS SYS SYS SYS SYS X NV4 20-23,52-55 5
GPU7 SYS SYS SYS SYS SYS SYS NV4 X 16-19,48-51 4
Legend:
X = Self
SYS = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
NV# = Connection traversing a bonded set of # NVLinks
我们看到 Slurm 在 [0,1,2,4]、[1,2,3,7]、[0,4,5,6] 等组中分配 4-GPU 作业(使用 nvidia-smi 编号,不次要数字,即上表中的 NUMA Affinity),具有一对 NVLinked GPU 和 2 个未链接 GPU。
我们期待看到具有多对 NVLinked GPU 的组,例如 [0,1,2,3] 或 [0,1,4,5]。
一些可能相关的规格/设置:
# NVIDIA:
Driver Version: 460.32.03
CUDA Toolkit Version: 11.1
# slurm.conf:
SelectType=select/cons_tres
SelectTypeParameters=CR_Core
AccountingStorageTRES=gres/gpu
JobAcctGatherType=jobacct_gather/linux
问题:
- 这种行为是预期的吗?
- 有没有办法强制 Slurm 分配多对 NVLinked GPU?