InfiniBand(IB)快速上手
什么是IB:
InfiniBand(直译为“无限带宽”技术,缩写为IB)是一个用于高性能计算的计算机网络通信标准,它具有极高的吞吐量和极低的延迟,用于计算机与计算机之间的数据互连。InfiniBand也用作服务器与存储系统之间的直接或交换互连,以及存储系统之间的互连。
1、IB是一类特殊的网卡,硬件上包括网卡,连接线,交换机都是由nvidia收购的mellanox定制的
2、IB从字面理解就知道是超高带宽的连接技术,属于一种RDMA技术中的一种
3、IB常用在智算场景,用于GPU间夸节点交换数据,可以将数据直接发送到IB卡;也可以作为高速存储的通道
IB硬件
IB卡:
服务器(已满配8张200Gb IB卡为例):
从服务器上查询IB卡信息:
从查询信息上也可以看出IB卡是Mellanox网卡一种,一张IB卡的性能有几种规格100Gb/200Gb/400Gb,本文主要以200Gb规格为例
IB交换机QM8790:
QM8790有40个接口,每个接口可以支持200Gb带宽,交换机整机交换量为16Tb,这里注意一个细节,交换加整机交换量是 40口*200Gb的两倍,完全可以支持每个接口满载还有富余。
IB的组网:
IB组网以SU为单元,一个SU内能最多能接入20台插有8张IB卡的服务器;再以SU为单元进行扩展,最多可以支持140台插有8张IB卡的服务器组网;
从图中可以看出,一个SU内的一台服务器上的8张IB卡会分别接到8个交换机的下行口。这种接线结构是经过导轨优化后最优的接线方式。从各级交换机的数量*交换带宽,也能看出完全可以满足140台服务器的交换量
IB驱动安装:
IB驱动安装要先于GPU驱动和Cuda安装,否则会影响性能
下载IB驱动,根据自己的系统类型到以下链接选择下载驱动:
Linux InfiniBand Drivers
可以选择5.8的LTS版本
驱动下载后进行解压,执行解压目录下的安装命令:./mlnxofedinstall --all
安装完重启机器
重启后执行 /etc/init.d/openibd restart
IB驱动安装后在linux系统上除了用ifconfig命令可以看到网卡,也可以用ibdev2netdev命令看到网卡和IB卡名称间的映射关系
最后通过命令检查IB卡状态:ibstat
IB常用命令:
命令 | 说明 | 命令格式 |
ibstat | 端口信息和链路运行状态 | ibstat |
ibstatu | 跟ibstat类似,信息更精简 | ibstatu |
ibdev2netdev | 查看网卡和IB卡名映射关系 | ibdev2netdev |
iblinkinfo | 查看IB网络拓扑信息 | iblinkinfo –C mlx1_0 iblinkinfo –C mlx1_0 -S <SWITCH GUID> |
ibping | 检测联通新 | ibping -C mlx1_0 -S ibping –C mlx1_0 < server LID> |
ib_write_bw | 检测联通性,简单测带宽 | b_write_bw -d mlx1_0 -a -F #server端 ib_write_bw -d mlx1_0 -i 1 <ip> -n 1000 -a -F #client端 |
ibdiagnet | 诊断 | ibdiagnet |
sharp_hello | 验证sharp功能是否正常 | sharp_hello -d mlx1_0 |
IB性能压测:
IB性能压测建议使用nvidia提供的nccl_test工具
nccl_test可以完成单节点内GPU卡检测测试,如果要连带测试IB性能要使用夸节点测试,依赖mpirun命令,要确保各测试节点都安装了nccl_test 和mpi_run测试命令可以参考一下:
#主节点
export LD_LIBRARY_PATH=/usr/lib:/usr/local/mpi/lib:/nccl-test/build/lib:/usr/local/cuda-11.7
mpirun -np 2 -H ip1,ip2,ip3...... -mca plm_rsh_args '-p 31000' -mca btl_openib_allow_ib true -mca orte_base_help_aggregate 0 -x NCCL_DEBUG=INFO -x NCCL_SOCKET_IFNAME=eth0,ib0,ib1 /nccl-tests/build/all_reduce_perf -b 128 -e 8G -f 2 -g 6#ip1,ip2,ip3 代表要加入测试的各节点ip
#-p 31000 代表mpirun协商的端口
#NCCL_DEBUG=INFO 环境变量,打开NCCL调试信息价
#NCCL_SOCKET_IFNAME=eth0,ib0,ib1 nccl_test能用的网卡和IB卡信息
#/nccl-tests/build/all_reduce_perf -b 128 -e 8G -f 2 -g 8 最终执行的测试命令#-b:从128B包长起步测试
#-e:到8GB包长结束测试
#-f:每次测试包长为上一次值*2
#-g:代表GPU数据这里是8
ib_write_bw代码实现:
ib最直接的使用代码可以参考以下链接
GitHub - linux-rdma/perftest: Infiniband Verbs Performance Tests
从代码中可以看出使用了很多rdma的接口,代码这块我们可以再开一篇文章单独介绍
在Pytorch中使用IB卡:
可以用一个简单的Pytorch DDP多机例子验证:
下载工程:https://github.com/tingshua-yts/BetterDL.git
先安装好pytorch工程,也可以考虑直接用镜像透传gpu,测试用例需要两台1卡GPU机器,或者两个带1张GPU卡的容器
docker run --gpus all --rm -it --net host nvcr.io/nvidia/pytorch:21.03-py3 /bin/bash
将代码BetterDL拷贝到两台机器或者容器上
cd到目录:BetterDL/test/pytorch/DDP
在机器1上对脚本稍作修改后执行:run_node0_plain.sh
export NCCL_DEBUG=INFO #这个参数帮助打出NCCL信息,能看到是否识别到IB卡
export MASTER_PORT=1234
export MASTER_ADDR=192.168.9.17 #这个IP根据实际情况给出机器1的IP
export WORLD_SIZE=2 #两个实例
export LOCAL_WORLD_SIZE=1 #本机1个实例,占用一张GPU卡
export RANK=0 #本机实例编号,根据多机总实例数进行编号
export LOCAL_RANK=0 #本机内部实例编号
export LOGLEVEL="DEBUG"
python trian_multi_node.py
在机器2上对脚本稍作修改后执行:run_node1_plain.sh
export NCCL_DEBUG=INFO
export MASTER_PORT=1234
export MASTER_ADDR=192.168.9.17 #修改为机器1的IP协商用
export WORLD_SIZE=2 #共2个实例
export LOCAL_WORLD_SIZE=1 #本机1个实例
export RANK=1 #本机实例编号,根据多机总实例数进行编号
export LOCAL_RANK=0 #本机第0个实例
export LOGLEVEL="DEBUG"
python trian_multi_node.py
程序启动后nccl输出以下日志,代表nccl已识别并使用了IB卡
相关文章:

InfiniBand(IB)快速上手
什么是IB: InfiniBand(直译为“无限带宽”技术,缩写为IB)是一个用于高性能计算的计算机网络通信标准,它具有极高的吞吐量和极低的延迟,用于计算机与计算机之间的数据互连。InfiniBand也用作服务器与存储系…...

D74【 python 接口自动化学习】- python 基础之HTTP
day74 http基础定义 学习日期:20241120 学习目标:http定义及实战 -- http基础介绍 学习笔记: HTTP定义 HTTP 是一个协议(服务器传输超文本到浏览器的传送协议),是基于 TCP/IP 通信协议来传递数据&…...

移动光猫[HS8545M5-10]获取超密
移动光猫[HS8545M5-10]获取超级密码 1、缘由2、前期准备2.1、确保本地开通telnet客户端功能2.2、准备好相关软件 3、开始查找超密 1、缘由 最近想折腾一下ipv6ddns打通内外网,查询资料说是需要将光猫桥接到外网;但是使用光猫后边的用户名密码根本就找不到…...
原生JS和CSS,HTML实现开屏弹窗
开屏弹窗常应用于打开游戏,或者打开网站的时候,跳出来在正中间,来显示一些信息,并可以设置今日不再显示 CSS代码如下 <style>#box {width: 100vw;height: 100vh;background-color: rgba(0, 0, 0, 0.2);position: relative…...

vue--制作购物车
🤔如何制作出下列效果呢?👇 😶🌫️首先: 设置css样式: <style>body {font-family: Arial, sans-serif;}.cart-item {width: 50%;margin-bottom: 15px;padding: 10px;border: 2px solid gray;borde…...

深度测评腾讯云 HAI 智算服务:高性能 AI 计算的新标杆
本文 一、引言二、产品功能深度解析2.1 多样化的 GPU 配置选择2.2 预配置开发环境示例: 2.3 实时性能监控 三、核心技术特点与优势3.1 云端弹性扩展3.2 高性能计算架构 四、实际测试与代码案例4.1 NLP 案例:使用 BERT 进行情感分类数据集:IMD…...
MQ重复消费与消息顺序
如何避免消息重复消费 RocketMQ:给每个消息分配了一个MessageID。这个MessageID就可以作为消费者判断幂等的依据。这种方式不太建议,原因是在高并发场景下这个MessageID不保证全局唯一性。 最好由业务方创建一个与业务相关的全局唯一的ID来区分消息&am…...

应用商店双弹窗“APP在向用户申请权限时未同步告知用户申请此权限的理由”驳回uni-app应用上线的解决方法
目录 问题分析 解决方法 下载插件包:x-perm-apply-instr 将插件包导入进你项目中的uni_modules文件夹 在项目中的main.js文件中添加以下代码 完成 其它注意事项 addPermisionInterceptor 添加 uniApi 调用拦截 removePermisionInterceptor 移除 uniApi 调用…...
第 32 章 - Go语言 部署与运维
在Go语言的应用开发中,部署与运维是一个非常重要的环节。它不仅关系到应用能否顺利上线,还直接影响到应用的性能、安全性和可维护性。以下是根据您的需求整理的关于Go语言应用的打包和发布、容器化部署、监控和日志管理的相关内容。 1. 应用的打包和发布…...

噪杂环境离线语音通断器效果展示
介于之前的离线语音通断器模块的使用环境大部分为噪音比较小的环境中,部分客户对环境提出了更高的要求,能在噪杂、室外或者有一定的噪音的车内使用的模块开发需求被提高到了一个新的层次。最近找到某些能支持室外噪杂环境使用的芯片和模组,打…...
【django】扩展
1. Promise 1.1 对象和状态 是什么?是前端开发时js中的一个对象(包裹)。【对象】【异步请求】# 对象中有一个状态的值,status # 创建对象,不赋值,statuspendding let v1 new Promise(function(resolve, …...

逆向破解识别基础
找main函数: (使用OllyDbg软件) 方法一: 因为main函数需要三个参数,所以遇到三个参数加一个调用,那么可能是main函数。 方法二: 如果main函数中有字符串或者调用函数等一些唯一标识&#x…...
MFC 下拉框显示问题和控件自适应窗口大小
在mfc开发过程中,遇到了下拉框的两个问题,现在记录一下 1、把下拉框点开显示不全我放进去的多条文本 解决办法:把鼠标放到下拉框的倒三角去点一下,鼠标就会变成双向箭头,或者先选中一下下拉框再把鼠标移动到倒三角上去…...

Docker 的存储驱动及其优缺点
Docker 的存储驱动是容器文件系统的关键组成部分,决定了容器镜像和数据的存储方式。以下是常见的存储驱动及其优缺点: 1. OverlayFS/Overlay2 简介: Overlay 是现代 Linux 文件系统中一种高效的联合文件系统,Overlay2 是其改进版本࿰…...
单片机系统的性能指标有哪些?
单片机系统的性能指标涵盖了多个方面,这些指标共同决定了系统的整体性能。以下是单片机系统中常见的性能指标: 1. 处理器性能指标 1.1 时钟频率(Clock Frequency) 定义:处理器内核工作的时钟频率,通常以…...
波点音乐自动点击
波点音乐 import uiautomator2 as u2 import time import sys import os# 动态点击时间,打印剩余时间 def dynamic_sleep(seconds):wait_time secondsfor i in range(wait_time):print(f"Waiting... {wait_time - i} seconds remaining")sys.stdout.flu…...
HTTP 消息结构
HTTP 消息结构 1. 引言 超文本传输协议(HTTP)是互联网上应用最广泛的协议之一,它定义了客户端和服务器之间交换数据的格式和规则。HTTP消息是客户端和服务器之间通信的基本单位,包括请求消息和响应消息两种类型。本文将详细介绍HTTP消息的结构,包括其组成部分和格式。 …...

ESP32学习笔记_Bluetooth(1)——蓝牙技术与 BLE 通信机制简介
摘要(From AI): 这篇笔记详细讲解了蓝牙技术的分类、核心架构和通信流程,重点介绍了低功耗蓝牙(BLE)的协议栈、角色划分及连接机制,结合拓扑示例清晰阐述了蓝牙网络配置和操作过程 前言:本文档是本人在《ESP32-C3 物联…...

C0034.在Ubuntu中安装的Qt路径
Qt安装路径查询 在终端输入qmake -v如上中/usr/lib/x86_64-linux-gnu就是Qt的安装目录;...

jdbc学习——SQL注入
SQL注入介绍 SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。 用户登录的本质:执行下面的sql语句 select * from tb_user where username zhangsan and password 123; 发生sql注入的本质 解决SQL注入的方…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...

react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)
之前都是使用react-pdf来渲染pdf文件,这次有个需求是要兼容xp环境,xp上chrome最高支持到49,虽然说iframe或者embed都可以实现预览pdf,但为了后续的定制化需求,还是需要使用js库来渲染。 chrome 49测试环境 能用的测试…...

【笔记】结合 Conda任意创建和配置不同 Python 版本的双轨隔离的 Poetry 虚拟环境
如何结合 Conda 任意创建和配置不同 Python 版本的双轨隔离的Poetry 虚拟环境? 在 Python 开发中,为不同项目配置独立且适配的虚拟环境至关重要。结合 Conda 和 Poetry 工具,能高效创建不同 Python 版本的 Poetry 虚拟环境,接下来…...
【学习记录】使用 Kali Linux 与 Hashcat 进行 WiFi 安全分析:合法的安全测试指南
文章目录 📌 前言🧰 一、前期准备✅ 安装 Kali Linux✅ 获取支持监听模式的无线网卡 🛠 二、使用 Kali Linux 进行 WiFi 安全测试步骤 1:插入无线网卡并确认识别步骤 2:开启监听模式步骤 3:扫描附近的 WiFi…...