本文最后更新于 2024-11-14 13:33

一 概述

本文档将对GPU的卡间带宽进行测试方法的说明,使用cuda-sample的程式,并对结果进行解释

二 准备

在测试之前,需要正确安装好GPU驱动和CUDA

如果是Nvlink的机器,除了安装常规的GPU驱动,还需要安装nvidia-fabricmanager服务,此部分可以参考:https://docs.aheadai.cn/193.html

三 安装

前往官网下载NVIDIA官方的CUDA sample程序包,官网地址:https://github.com/NVIDIA/cuda-samples/

也可以到AheadAI的公共资源站上下载:

注意:CUDA sample的包版本不宜过高,建议和CUDA版本匹配

11.0:https://mirrors.aheadai.cn/pkgs/cuda-samples-11.0.tar.gz
11.2:https://mirrors.aheadai.cn/pkgs/cuda-samples-11.2.tar.gz
11.5:https://mirrors.aheadai.cn/pkgs/cuda-samples-11.5.tar.gz
11.6:https://mirrors.aheadai.cn/pkgs/cuda-samples-11.6.tar.gz
11.8:https://mirrors.aheadai.cn/pkgs/cuda-samples-11.8.tar.gz
12.0:https://mirrors.aheadai.cn/pkgs/cuda-samples-12.0.tar.gz
12.1:https://mirrors.aheadai.cn/pkgs/cuda-samples-12.1.tar.gz
12.2:https://mirrors.aheadai.cn/pkgs/cuda-samples-12.2.tar.gz
12.3:https://mirrors.aheadai.cn/pkgs/cuda-samples-12.3.tar.gz
12.4:https://mirrors.aheadai.cn/pkgs/cuda-samples-12.4.tar.gz
12.5:https://mirrors.aheadai.cn/pkgs/cuda-samples-12.5.tar.gz

下载cuda-sample程序包,并上传到服务器上

解压后,找到bandwidthTest文件夹:

find . -name "p2p*"

一般都在Domain_Specific这个父级目录的下面

进入后,如果报错:

make: /usr/local/cuda/bin/nvcc: Command not found

则进入Makefile文件,将 CUDA_PATH 修改为你实际的CUDA地址:

image-20241111163507520

保存退出后,执行make,这个时候就可以看到编译得到的p2pBandwidthLatencyTest这个可执行文件了

image-20241111204105521

四 测试

直接执行编译得到的p2pBandwidthLatencyTest文件,即可开始测试:

p2p的结果查看起来比较复杂,在解释测试结果之前,需要先对卡间通信的几种方式进行介绍,执行nvidia-smi topo -m命令,可以查看服务器的GPU拓扑结构

image-20241111204306566

首先,介绍以下一下P2P这个概念:

理论上,计算机的一切操作都需要通过CPU执行指令,包括IO操作和其他通信操作,虽然这样可以保证安全,但同时也降低了通信效率。而P2P可以使得,当两张GPU都插在由同一颗CPU控制的PCIe槽上时,无需再经过CPU,且可以进行双向通信,提高通信效率

注意:一些服务器厂商在出厂设备时,可能会在BIOS中默认打开一个ACS设置,该设置是一种安全策略,要求所有通信必须都通过CPU,如果要开启P2P,则必须关闭ACS,否则卡间通信的测试值会很低

普遍来看,两张GPU的通信大概有三种方式:

  1. 两张GPU插在由同一颗CPU控制的PCIe槽上,那么此时这两张GPU可以直接通过PCIe槽通信(绕过CPU)
  2. 两张GPU插在由不同CPU控制的PCIe槽上,那么此时这两张GPU的通信需要通过CPU进行一次转发(无法绕过CPU)
  3. 两张GPU通过NVswitch直接相连,不通过PCIe进行通信(GPU不是插在PCIe槽上的,而是直接插在NVswitch的板子上

如果是方式1,那么两张GPU之间的通信速率大概是50GB/s(PCIe版本为4.0 X16)

如果是方式2,两张GPU之间的通信速率大概是35GB/s(PCIe版本为4.0 X16)

如果是方式3,两张GPU之间的通信速率大概是550GB/s(SXM4版本)

本文系作者 @ admin 原创发布在 文档中心 | AheadAI ,未经许可,禁止转载。