Hello @maciej.falkiewicz
You are right, this is why I pasted the output in the post:)
I was trying to understand the output, but yes, this makes sense, only two GPUs can be connected through NVLink, but each GPU is connected through PCI or other, probably with less BW.
Yes sure.
(baobab)-[root@gpu048 ~]$ nvidia-smi topo -m
GPU0 GPU1 GPU2 GPU3 GPU4 GPU5 GPU6 GPU7 NIC0 NIC1 CPU Affinity NUMA Affinity GPU NUMA ID
GPU0 X NV4 NODE NODE SYS SYS SYS SYS SYS SYS 0-63 0 N/A
GPU1 NV4 X NODE NODE SYS SYS SYS SYS SYS SYS 0-63 0 N/A
GPU2 NODE NODE X NV4 SYS SYS SYS SYS SYS SYS 0-63 0 N/A
GPU3 NODE NODE NV4 X SYS SYS SYS SYS SYS SYS 0-63 0 N/A
GPU4 SYS SYS SYS SYS X NV4 NODE NODE NODE NODE 64-127 1 N/A
GPU5 SYS SYS SYS SYS NV4 X NODE NODE NODE NODE 64-127 1 N/A
GPU6 SYS SYS SYS SYS NODE NODE X NV4 PHB PHB 64-127 1 N/A
GPU7 SYS SYS SYS SYS NODE NODE NV4 X NODE NODE 64-127 1 N/A
NIC0 SYS SYS SYS SYS NODE NODE PHB NODE X PIX
NIC1 SYS SYS SYS SYS NODE NODE PHB NODE PIX X
Legend:
X = Self
SYS = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
PHB = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
PXB = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)
PIX = Connection traversing at most a single PCIe bridge
NV# = Connection traversing a bonded set of # NVLinks
NIC Legend:
NIC0: mlx5_0
NIC1: mlx5_1
I’ve enabled a feature on gpu048: we are now discovering the GPUs instead of hard code their spec. The advantage is that this adds two extra flags: Cores and Links. See ref.
This is how slurm sees the GPUs now:
(baobab)-[root@gpu048 ~]$ slurmd -G
slurmd: gpu/nvml: _get_system_gpu_list_nvml: 8 GPU system device(s) detected
slurmd: Gres Name=gpu Type=nvidia_rtx_a6000 Count=1 Index=0 ID=7696487 File=/dev/nvidia0 Cores=0-63 CoreCnt=128 Links=-1,4,0,0,0,0,0,0 Flags=HAS_FILE,HAS_TYPE,ENV_NVML
slurmd: Gres Name=gpu Type=nvidia_rtx_a6000 Count=1 Index=1 ID=7696487 File=/dev/nvidia1 Cores=0-63 CoreCnt=128 Links=4,-1,0,0,0,0,0,0 Flags=HAS_FILE,HAS_TYPE,ENV_NVML
slurmd: Gres Name=gpu Type=nvidia_rtx_a6000 Count=1 Index=2 ID=7696487 File=/dev/nvidia2 Cores=0-63 CoreCnt=128 Links=0,0,-1,4,0,0,0,0 Flags=HAS_FILE,HAS_TYPE,ENV_NVML
slurmd: Gres Name=gpu Type=nvidia_rtx_a6000 Count=1 Index=3 ID=7696487 File=/dev/nvidia3 Cores=0-63 CoreCnt=128 Links=0,0,4,-1,0,0,0,0 Flags=HAS_FILE,HAS_TYPE,ENV_NVML
slurmd: Gres Name=gpu Type=nvidia_rtx_a6000 Count=1 Index=4 ID=7696487 File=/dev/nvidia4 Cores=64-127 CoreCnt=128 Links=0,0,0,0,-1,4,0,0 Flags=HAS_FILE,HAS_TYPE,ENV_NVML
slurmd: Gres Name=gpu Type=nvidia_rtx_a6000 Count=1 Index=5 ID=7696487 File=/dev/nvidia5 Cores=64-127 CoreCnt=128 Links=0,0,0,0,4,-1,0,0 Flags=HAS_FILE,HAS_TYPE,ENV_NVML
slurmd: Gres Name=gpu Type=nvidia_rtx_a6000 Count=1 Index=6 ID=7696487 File=/dev/nvidia6 Cores=64-127 CoreCnt=128 Links=0,0,0,0,0,0,-1,4 Flags=HAS_FILE,HAS_TYPE,ENV_NVML
slurmd: Gres Name=gpu Type=nvidia_rtx_a6000 Count=1 Index=7 ID=7696487 File=/dev/nvidia7 Cores=64-127 CoreCnt=128 Links=0,0,0,0,0,0,4,-1 Flags=HAS_FILE,HAS_TYPE,ENV_NVML
slurmd: Gres Name=VramPerGpu Type=(null) Count=51539607552 ID=3033812246 Links=(null) Flags=CountOnly
What I understand: when you request two GPU, Slurm will try to allocate two GPUs connected together.
HTH
Best
Yann