NV-Link 测试(可用性与速率,PCIE+SXM)
1. 简介
-
NV-Link 是 NVIDIA 开发的一种多卡高速互连技术,主要用于在 GPU 与 GPU之间进行的数据通信。
-
它最初于 2016 年随 Tesla P100 GPU 推出, 相比传统的 PCIe(如 PCIe 3.0、4.0),NVLink 提供更低延迟、更高效率的通信。
-
多张 GPU 并行训练模型时,NVLink 可以显著提高模型参数同步效率(如 Reduce , Broadcast )。
另外SMX结构服务器,即DGX,是NVSwitch + NVLink 架构,可实现 8~16 张 GPU 全互联结构,大幅提升大模型训练/推理时的内存访问效率。
2.对比PCIe
PCIe 4.0以上延迟较小,但其支持的主板和cpu也较贵。
项目 | NVLink | PCIe 4.0 | PCIe 3.0 |
---|---|---|---|
单连接带宽 | ~25–50 GB/s(双向) | ~32 GB/s(x16,双向) | ~16 GB/s(x16,双向) |
可扩展性 | 多连接聚合(2–6 个 NVLink) | 固定插槽数 | 固定插槽数 |
延迟 | 更低 | 相对较低 | 更高 |
拓扑结构 | 可构建全互联(如 NVSwitch) | 星形拓扑(以 CPU 为中心) | 星形拓扑(以 CPU 为中心) |
GPU间通信效率 | 高效支持 P2P 与 AllReduce | 有限,需通过 CPU 或交换芯片 | 较差,延迟和瓶颈更明显 |
3.测试
本案例在华南X99平台(f8d p, E5-2680V4)下测试 Nvlink2.0的2080ti-22g双卡互联,给出三种测试方式:
3.1 命令行测试:
最基本的操作即nvida命令:
nvdia-smi nvlink -s
注意:这个结果只能检测到nvlink,实际是否起作用,需要在代码中测试。
- 测试结果
3.2 cupy包测试
需要安装cupy,其提供了cuda.runtime.deviceCanAccessPeer(i, j)方法,可实现双卡的交互访问
代码如下:
def check_nvlink_with_cupy():num_gpus = torch.cuda.device_count()print(f"Detected {num_gpus} CUDA devices"