2. 多机多卡运行nccl-tests对比分析

系列文章

第2章 多机多卡nccl-tests 对比分析


目录

  • 系列文章
  • 前言
  • 一、本地环境
    • 1. 网卡接口
    • 2. RDMA
    • 3. TOPO信息
      • pcie信息
      • nvidia-smi topo -m
  • 二、nccl-test对比分析
    • 1. 相关环境变量
    • 2. 不同情况的对比
    • 3. 总结与分析


前言

NCCL(NVIDIA Collective Communications Library)是NVIDIA提供的一套用于GPU加速的通信库,主要用于在多个GPU之间进行数据传输和通信。它被设计为在异构计算环境中(包括NVIDIA GPU和CPU)高效地执行数据并行和模型并行。

NCCL是深度学习训练中的一个关键组件,因为它能够有效地在多个GPU之间传输数据,这对于加速神经网络的训练非常重要。在现代的深度学习框架中,如TensorFlow、PyTorch和Keras,NCCL通常作为后端通信库,与框架的API紧密集成,为用户提供一个简单易用的编程接口。

这里通过使用不同的网络配置,在双机进行了nccl-test测试,获得了不同的结果,并尝试进行简单分析。


一、本地环境

有2台机器,配置完全相同

1. 网卡接口

ifconfig的结果:

  • eno2为普通千兆以太网接口,最大带宽1Gbps;
  • ens9f0np0 和ens9f1np1为Mellanox 100G网卡的两个接口

在这里插入图片描述

2. RDMA

在这里插入图片描述

jxh@nccl4:~$ lspci |grep Mellanox //查看服务器中 mellaox 网卡信息
b1:00.0 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]
b1:00.1 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5]jxh@nccl4:~$ ibdev2netdev //查看以太网设备与IB设备关联信息
mlx5_0 port 1 ==> ens9f0np0 (Up)
mlx5_1 port 1 ==> ens9f1np1 (Up)jxh@nccl4:~$ ibv_devices //查看RDMA设备device                 node GUID------              ----------------mlx5_0              08c0eb030024721amlx5_1              08c0eb030024721b

3. TOPO信息

pcie信息

可以通过nccl传入环境变量NCCL_TOPO_DUMP_FILE=./dump-topo.xml \来转储nccl搜索到的本机topo

设置NCCL_IB_DISABLE=1时本机信息如下:


<system version="1"><cpu numaid="1" affinity="ffff,fffff000,000000ff,fffffff0,00000000" arch="x86_64" vendor="GenuineIntel" familyid="6" modelid="106"><pci busid="0000:ca:00.0" class="0x060400" vendor="0x11f8" device="0x4000" subsystem_vendor="0x11f8" subsystem_device="0xbeef" link_speed="16.0 GT/s PCIe" link_width="16"><pci busid="0000:cd:00.0" class="0x030000" vendor="0x10de" device="0x2684" subsystem_vendor="0x7377" subsystem_device="0x0000" link_speed="16.0 GT/s PCIe" link_width="16"><gpu dev="0" sm="89" rank="0" gdr="0"/></pci><pci busid="0000:cf:00.0" class="0x030000" vendor="0x10de" device="0x2684" subsystem_vendor="0x7377" subsystem_device="0x0000" link_speed="16.0 GT/s PCIe" link_width="16"><gpu dev="1" sm="89" rank="1" gdr="0"/></pci></pci><pci busid="0000:b1:00.0" class="0x020000" vendor="0x15b3" device="0x1017" subsystem_vendor="0x15b3" subsystem_device="0x0007" link_speed="8.0 GT/s PCIe" link_width="8"><nic><net name="ens9f0np0" dev="1" speed="100000" port="0" latency="0.000000" guid="0x1" maxconn="65536" gdr="0"/></nic></pci><pci busid="0000:b1:00.1" class="0x020000" vendor="0x15b3" device="0x1017" subsystem_vendor="0x15b3" subsystem_device="0x0007" link_speed="8.0 GT/s PCIe" link_width="8"><nic><net name="ens9f1np1" dev="2" speed="100000" port="0" latency="0.000000" guid="0x2" maxconn="65536" gdr="0"/></nic></pci></cpu><cpu numaid="0" affinity="0000,00000fff,ffffff00,0000000f,ffffffff" arch="x86_64" vendor="GenuineIntel" familyid="6" modelid="106"><pci busid="0000:65:00.1" class="0x020000" vendor="0x8086" device="0x1521" subsystem_vendor="0xffff" subsystem_device="0x0000" link_speed="5.0 GT/s PCIe" link_width="4"><nic><net name="eno2" dev="0" speed="1000" port="0" latency="0.000000" guid="0x0" maxconn="65536" gdr="0"/></nic></pci></cpu>
</system>

正如以上topo显示:

  • 有两张4090,均为Pcie 4.0 *16
  • 一个100G网卡上的两个接口 均为 Pcie3.0 * 8

不设置NCCL_IB_DISABLE=1时本机信息如下:

<system version="1"><cpu numaid="1" affinity="ffff,fffff000,000000ff,fffffff0,00000000" arch="x86_64" vendor="GenuineIntel" familyid="6" modelid="106"><pci busid="0000:ca:00.0" class="0x060400" vendor="0x11f8" device="0x4000" subsystem_vendor="0x11f8" subsystem_device="0xbeef" link_speed="16.0 GT/s PCIe" link_width="16"><pci busid="0000:cd:00.0" class="0x030000" vendor="0x10de" device="0x2684" subsystem_vendor="0x7377" subsystem_device="0x0000" link_speed="16.0 GT/s PCIe" link_width="16"><gpu dev="0" sm="89" rank="0" gdr="0"/></pci><pci busid="0000:cf:00.0" class="0x030000" vendor="0x10de" device="0x2684" subsystem_vendor="0x7377" subsystem_device="0x0000" link_speed="16.0 GT/s PCIe" link_width="16"><gpu dev="1" sm="89" rank="1" gdr="0"/></pci></pci><pci busid="0000:b1:00.0" class="0x020000" vendor="0x15b3" device="0x1017" subsystem_vendor="0x15b3" subsystem_device="0x0007" link_speed="8.0 GT/s PCIe" link_width="8"><nic><net name="mlx5_0" dev="0" speed="100000" port="1" latency="0.000000" guid="0x1a72240003ebc008" maxconn="131072" gdr="0"/></nic></pci></cpu>
</system>

对比之前的topo 删除了eno2,enf9f0np0等,取而代之的是mlx5_0,这是因为nccl会自动使用速度快的。

nvidia-smi topo -m

在这里插入图片描述

二、nccl-test对比分析

1. 相关环境变量

以下为nccl用户手册的介绍:

  • NCCL_SOCKET_IFNAME
  • NCCL_IB_DISABLE

NCCL_SOCKET_IFNAME 变量指定用于通信的IP接口。
NCCL_IB_DISABLE 变量禁用NCCL使用的IB/RoCE传输。相反,NCCL将回退到使用IP套接字,默认值为0。

以下就是对这两个环境变量进行控制来做的对比分析

2. 不同情况的对比

  1. IB disable=1,指定eno2——>实际使用eno2进行socket通信。
    顺便,这里的算法带宽algbw就是总的数据量除以时间。这里最大0.12GB/s=0.12*8=0.96Gbps≈1Gbps,已经非常接近千兆以太网支持的最大带宽了。在这里插入图片描述
  2. IB disable=1,指定ens9f0np0——>实际使用ens9f0np0(100G网卡接口)进行socket通信。
    这里最大算法带宽1.97GB/s=1.97*8=15.76Gbps<100Gbps,距离100G仍有差距。
    在这里插入图片描述
  3. IB disable=1,不指定网卡——>结果和情况2相同
  4. IB disable=1,指定eno2——>实际使用mlx5_0进行RoCE通信。
    这里最大算法带宽5.81GB/s=5.81*8=46.48Gbps,已经接近100G的一半。
    4
  5. IB disable=1,指定ens9f0np0——>结果和情况4相同
  6. 不设置IB disable,不指定用于socket通信的网卡——>结果和情况4相同,使用mlx5_0 RoCE,最大算法带宽5.81GB/s=5.81*8=46.48Gbps,即默认情况下nccl会选择最优的情况,在这里插入图片描述

这里有一个疑问,因为这台机子的mellanox网卡连接的是Pcie 3.0 *8 ,根据这个issue
Why { “16 GT/s”,120 } paired in kvDictPciGen?#1206
nccl中的带宽最大应该为6GB/s,而5.81已经比较接近,那这里限制带宽的因素是pcie嘛?


3. 总结与分析

将以上6种情况整理成表格:

序号IB_disableSOCKET_IFNAME最大算法带宽实际情况
11eno20.12 GB/suse eno2(1G)
21ens9f0np01.97 GB/suse 100G网卡
31不指定网卡1.97 GB/suse 100G网卡
40eno25.81 GB/suse RoCE
50ens9f0np05.81 GB/suse RoCE
6不设置(默认为0)不指定网卡5.81 GB/suse RoCE
  • 根据表格1-3条,禁用ib的情况下,除非明确指定eno2(千兆以太网接口,最大1Gbps),否则会自动使用速度快的ens9f0np0(100G网卡接口),根据第一个xml文件,也可以看到两者有着100倍的差距。
<net name="eno2" dev="0" speed="1000"
<net name="ens9f0np0" dev="1" speed="100000" 
  • 根据表格4-6条,未明确禁用ib的情况下,无论指定哪一个socket ifname,结果都相同且是使用RoCE通信,这是因为nccl会自动使用带宽大的,即IB的优先级高于socket,在nccl info信息中也可以看到,nccl会先搜索ib设备,如果没找到或者用户显式禁用,才会回退到套接字,
  • 对应以上情况就是
    mlx_5(IB/RoCE) > ens9f0np0(socket) > eno2(socket)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/828197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javaWeb项目-房屋房租租赁系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、JSP技术 JSP(Jav…

实战技巧:Android 14适配从挂号到出院

公众号「稀有猿诉」 原文链接 实战技巧&#xff1a;Android 14适配从挂号到出院 啥&#xff1f;这都4202年了&#xff0c;你的应用还没有升级到targetSDK 34&#xff1f;莫慌&#xff0c;本文就带着你全面的了解升级targetSDK 34的方法以及避坑指南。 注意&#xff0c;A…

毫米波雷达模块在高精度人体姿态识别的应用

人体姿态识别是计算机视觉领域中的重要问题之一&#xff0c;具有广泛的应用前景&#xff0c;如智能安防、虚拟现实、医疗辅助等。毫米波雷达技术作为一种无需直接接触目标就能实现高精度探测的感知技术&#xff0c;在人体姿态识别领域具有独特的优势。本文将探讨毫米波雷达模块…

Linux系统IO

Linux系统中的IO函数主要包括两大类&#xff1a;标准C库中的函数和Linux系统调用。这些函数可以用于文件操作、网络通信、设备控制等多种IO任务。以下是Linux系统中常用的IO函数和系统调用的概述&#xff1a; 标准C库IO函数 这些函数是高级的、封装好的&#xff0c;并且与操作…

二叉搜索树的众数(力扣501)

题目如下&#xff1a; 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果树中有不止一个众数&#xff0c;可以按 任意顺序 返回。 假定 BS…

Modbus转Profinet网关接电表与工控机通讯

Modbus转Profinet网关&#xff08;XD-MDPN100/300&#xff09;的主要功能是实现Modbus协议和Profinet协议之间的转换和通信。Modbus转Profinet网关集成了Modbus和Profinet两种协议&#xff0c;支持Modbus RTU主站/从站&#xff0c;并可以与RS485接口的设备&#xff0c;如变频器…

德国激荡50年的荆棘之路

财通证券表示&#xff0c;过去50年见证了德国如何走出财政泥沼、以保守的货币政策稳步前行&#xff0c;见证了“专精特新”带来的全球竞争力&#xff0c;也见证了产业转型缓慢导致的增长动能缺失。 过去50年&#xff0c;德国经济经历了一段跌宕起伏的发展史&#xff0c;这辆曾…

面向对象三大特征(python)

目录 1. 封装 为什么使用封装&#xff1f; 如何实现封装&#xff1f; 一个简单的封装示例 二.继承 为什么使用继承&#xff1f; 如何实现继承&#xff1f; 一个简单的继承示例 使用继承的好处 三.多态 为什么使用多态&#xff1f; 如何实现多态&#xff1f; 一个简…

【基于YOLOv8的森林烟雾火焰检测 附源码 数据集】

基于YOLOv8的森林烟雾火焰检测 附源码 数据集 在森林火灾的早期预防和控制中&#xff0c;森林烟雾火焰检测技术发挥着至关重要的作用。本技术通过先进的传感器和图像识别系统&#xff0c;实时监测森林区域中的烟雾和火焰异常&#xff0c;快速响应可能的火灾发生。森林烟雾火焰…

在ubuntu上搭建nexus私有仓库(指定版本以及jdk!)

前言 本来以为搭建一个nexus随随便便就好了&#xff0c;但是遇到了最新版本根本没办法在jdk17下面正常运行—起码我调了一下不知道怎么运行&#xff0c;我才知道。。。不升级版本其实是很有道理的。 这一篇是最新版本的尝试&#xff1a; 在ubuntu上搭建nexus私有仓库[失败草稿…

升级 jQuery:努力打造健康的 Web 生态

jQuery 对 Web 的影响始终是显而易见的。当 jQuery 在 2006 年首次推出时&#xff0c;几乎立即成为 Web 开发人员的基本工具。它简化了 JavaScript 编程&#xff0c;使操作 HTML 文档、处理事件、执行动画等变得更加容易。从那时起&#xff0c;它在 Web 标准和浏览器功能的演变…

从0开始用C写贪吃蛇(基于链表)

目录 1. 游戏背景 2. 游戏效果演示​编辑​编辑​编辑 3. 实现目标 4. 技术要点 5. 控制台程序 5.1 设置控制台窗口的长宽和名字 5.2 控制台屏幕上的坐标COORD 6.Win32 API 6.1 GetStdHandle 6.2 GetConsoleCursorInfo 6.3 CONSOLE_CURSOR_INFO 6.4 SetConsole…

Docker 网络与资源控制

一 Docker 网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&#xff0c;Docker启动一个容器时会根 据Docker网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c;同时Docker网桥是每个容器的默 认网关。因为在同…

带头循环双向链表专题

1. 双向链表的结构 带头链表⾥的头节点&#xff0c;实际为“哨兵位”&#xff0c;哨兵位节点不存储任何有效元素&#xff0c;只是站在这⾥“放哨 的” “哨兵位”存在的意义&#xff1a; 遍历循环链表避免死循环。 2. 双向链表的实现 2.1双向链表结构 typedef int DataTyp…

最新AI创作系统ChatGPT网站源码Midjourney-AI绘画系统,Suno-v3-AI音乐生成大模型。

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…

Ubuntu终端自动补全

文章目录 前言配置安装zsh安装 oh-my-zsh安装自动补全插件zsh-autosuggestions 参考 前言 Oh My Zsh 是一个针对命令行 shell 的开源框架&#xff0c;主要用于增强和美化命令行环境。它建立在 Zsh&#xff08;一种强大的 shell 替代品&#xff09;之上&#xff0c;提供了丰富的…

Kubernetes Kubelet 的 Cgroups 资源限制机制分析

前言 容器技术的两大技术基石&#xff0c;想必大家都有所了解&#xff0c;即 namespace 和 cgroups。但你知道 cgroups 是如何在 kubernetes 中发挥作用的吗&#xff1f;kubelet 都设置了哪些 cgroups 参数来实现对容器的资源限制的呢&#xff1f;本文就来扒一扒 Kubernetes k…

STC8H8K64U I2C主机模式相关寄存器

STC8H8K64U I2C主机模式相关寄存器 STC8H8K64U-TSSOP20 I2CCFG I2C配置寄存器 I2CMSCR I2C主机控制寄存器 I2CMSST I2C主机状态寄存器 I2CMSAUX I2C主机辅助控制寄存器 I2CTXD I2C数据发送寄存器 I2CRXD I2C数据接收寄存器 I2CCFG I2C配置寄存器 B7ENI2C ENI2C&#xff1a…

基于Spring Boot的家具销售电商平台设计与实现

基于Spring Boot的家具销售电商平台设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 系统功能界面图&#xff0c;在系统首页可以查看首页…