nccl-test多机多卡测试

ssh免密登录

ubuntu默认安装有SSH client,还需要安装 SSH server

sudo apt install openssh-server
  1. 本机生成公私钥
cd ~/.ssh
ssh-keygen -t rsa

在.ssh/目录下,会生成两个文件:id_rsa和id_rsa.pub

注意:正确配置.ssh目录以及其下文件权限

sudo chmod 700 .ssh/
sudo chmod 600 .ssh/authorized_keys
  1. 上传公钥到目标机器
ssh-copy-id star@192.168.0.100

注意:@前是用户名,后是ip

  1. 测试免密登录
ssh star@192.168.0.100

几台机器都需要设置,一定要确保可以互相免密登录!

安装 NCCL(Ubuntu)

在 Ubuntu 上安装 NCCL 需要先将包含 NCCL 软件包的仓库添加到 APT 系统中,然后通过 APT 安装 NCCL 软件包。有两个可用的仓库:本地仓库和网络仓库。建议选择后者以便在发布新版本时轻松获取升级。

  1. 安装仓库。
  • 对于本地 NCCL 仓库:
sudo dpkg -i nccl-repo-<version>.deb

注意:本地仓库安装将提示您安装它嵌入的本地密钥,并用该密钥签署软件包。请确保按照说明安装本地密钥,否则安装阶段将失败。

  • 对于网络仓库
wget https://developer.download.nvidia.com/compute/cuda/repos/<distro>/<architecture>/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
  1. 更新 APT 数据库
sudo apt update
  1. 使用 APT 安装 libnccl2 软件包。此外,如果您需要编译带有 NCCL 的应用程序,可以安装 libnccl-dev 软件包:

如果您使用网络仓库,以下命令将升级 CUDA 到最新版本:

sudo apt install libnccl2 libnccl-dev

如果您希望保留旧版本的 CUDA,请指定特定版本:

sudo apt install libnccl2=2.8.4-1+cuda11.1 libnccl-dev=2.8.4-1+cuda11.1

安装MPI(Ubuntu)

采用源码编译安装

  1. 下载OpenMPI源码

前往OpenMPI官方网站下载或者使用wget:

wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.4.tar.gz
  1. 解压
tar -zxvf openmpi-4.1.4.tar.gz
  1. 编译和安装
./configure --prefix=/usr/local/openmpi
sudo make 
sudo make install
  1. 配置环境变量

/etc/profile中添加

export PATH=/usr/local/openmpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/openmpi/lib:$LD_LIBRARY_PATH

注意:需要重启生效

  1. 验证

运行以下命令来验证OpenMPI是否正确安装:

mpicc --version
mpirun --version

如果命令输出相应的版本信息,说明OpenMPI已经成功安装并配置好了

NCCL 测试

这些测试检查 NCCL 操作的性能和正确性。

  1. 构建

要构建这些测试,只需输入 make

如果 CUDA 没有安装在 /usr/local/cuda,可以指定 CUDA_HOME。类似地,如果 NCCL 没有安装在 /usr,可以指定 NCCL_HOME

make CUDA_HOME=/path/to/cuda Nncc

NCCL 测试依赖 MPI 来在多个进程(因此多个节点)上工作。如果你想用 MPI 支持来编译测试,需要设置 MPI=1 并将 MPI_HOME 设置为 MPI 安装的路径。

make MPI=1 MPI_HOME=/path/to/mpi CUDA_HOME=/path/to/cuda NCCL_HOME=/path/to/nccl
  1. 使用方法

NCCL 测试可以在多个进程、多个线程和每个线程的多个 CUDA 设备上运行。进程的数量由 MPI 管理,因此不作为参数传递给测试。

  1. 示例

在 8 个 GPU 上运行(-g 8),从 8 字节到 128M 字节:

./build/all_reduce_perf -b 8 -e 128M -f 2 -g 8

在 4个进程上(2个节点)使用 MPI 运行,每个进程 1个 GPU,总共 4 个 GPU:

mpirun -np 4 -H 192.168.0.111:2,192.168.0.100:2 ./build/all_reduce_perf -b 8 -e 128M -f 2 -g 1
  • 参数说明

所有测试都支持相同的参数集

  • GPU 数量
    • -t, --nthreads <num threads> 每个进程的线程数。默认:1。
    • -g, --ngpus <GPUs per thread> 每个线程的 GPU 数。默认:1。
  • 扫描的大小
    • -b, --minbytes <min size in bytes> 开始的最小大小。默认:32M。
    • -e, --maxbytes <max size in bytes> 结束的最大大小。默认:32M。
    • 增量可以是固定的也可以是乘数因子。只应使用其中之一。
    • -i, --stepbytes <increment size> 固定增量大小。默认:1M。
    • -f, --stepfactor <increment factor> 增量的乘数因子。默认:禁用。
  • NCCL 操作参数
    • -o, --op <sum/prod/min/max/avg/all> 指定要执行的归约操作。仅与 Allreduce、Reduce 或 ReduceScatter 之类的归约操作相关。默认:Sum。
    • -d, --datatype <nccltype/all> 指定要使用的数据类型。默认:Float。
    • -r, --root <root/all> 指定要使用的 root。仅用于有 root 的操作,如广播或归约。默认:0。
  • 性能
    • -n, --iters <iteration count> 迭代次数。默认:20。
    • -w, --warmup_iters <warmup iteration count> 热身迭代次数(不计时)。默认:5。
    • -m, --agg_iters <aggregation count> 每次迭代要聚合的操作次数。默认:1。
    • -a, --average <0/1/2/3> 将性能报告为所有 ranks 的平均值(仅 MPI=1 时)。<0=Rank0,1=Avg,2=Min,3=Max>。默认:1。
  • 测试操作
    • -p, --parallel_init <0/1> 使用线程并行初始化 NCCL。默认:0。
    • -c, --check <check iteration count> 执行计数迭代,检查每次迭代的结果正确性。这在大量 GPU 上可能会很慢。默认:1。
    • -z, --blocking <0/1> 使 NCCL 集体操作阻塞,即让 CPU 在每次集体操作后等待并同步。默认:0。
    • -G, --cudagraph <num graph launches> 将迭代捕获为 CUDA 图并指定重放次数。默认:0。

多机运行常见问题

问题1:

bash: orted: 未找到命令
--------------------------------------------------------------------------
ORTE was unable to reliably start one or more daemons.
This usually is caused by:* not finding the required libraries and/or binaries onone or more nodes. Please check your PATH and LD_LIBRARY_PATHsettings, or configure OMPI with --enable-orterun-prefix-by-default* lack of authority to execute on one or more specified nodes.Please verify your allocation and authorities.* the inability to write startup files into /tmp (--tmpdir/orte_tmpdir_base).Please check with your sys admin to determine the correct location to use.*  compilation of the orted with dynamic libraries when static are required(e.g., on Cray). Please check your configure cmd line and consider usingone of the contrib/platform definitions for your system type.* an inability to create a connection back to mpirun due to alack of common network interfaces and/or no route found betweenthem. Please check network connectivity (including firewallsand network routing requirements).
--------------------------------------------------------------------------

方法:添加参数 --prefix

mpirun -np 4 -H 192.168.0.111:2,192.168.0.100:2 --prefix /usr/local/openmpi ./build/all_reduce_perf -b 8 -e 128M -f 2 -g 1

问题2:

--------------------------------------------------------------------------
A compressed message was received by the Open MPI run time system
(PMIx) that could not be decompressed.  This means that Open MPI has
compression support enabled on one node and not enabled on another.
This is an unsupported configuration.Compression support is enabled when both of the following conditions
are met:1. The Open MPI run time system (PMIx) is built with compressionsupport.
2. The necessary compression libraries (e.g., libz) can be found atrun time.You should check that both of these conditions are true on both the
node where mpirun is invoked and all the nodes where MPI processes
will be launched.  The node listed below does not have both conditions
met:node without compression support:  wenji-UbuntuNOTE: There may also be other nodes without compression support.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
ORTE was unable to reliably start one or more daemons.
This usually is caused by:* not finding the required libraries and/or binaries onone or more nodes. Please check your PATH and LD_LIBRARY_PATHsettings, or configure OMPI with --enable-orterun-prefix-by-default* lack of authority to execute on one or more specified nodes.Please verify your allocation and authorities.* the inability to write startup files into /tmp (--tmpdir/orte_tmpdir_base).Please check with your sys admin to determine the correct location to use.*  compilation of the orted with dynamic libraries when static are required(e.g., on Cray). Please check your configure cmd line and consider usingone of the contrib/platform definitions for your system type.* an inability to create a connection back to mpirun due to alack of common network interfaces and/or no route found betweenthem. Please check network connectivity (including firewallsand network routing requirements).
--------------------------------------------------------------------------

方法:安装zlib

sudo apt install zlib1g

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

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

相关文章

linux下Java11无jre文件夹的问题

项目升级需要更高级的Java版本&#xff0c;于是下载了jdk-11.0.22_linux-x64_bin.tar.gz&#xff0c;解压后jdk-11.0.22下没有jre&#xff0c;导致eclipse下“build path”无法加载jre。 Java11以上版本不在提供jre&#xff0c;Java11安装后&#xff0c;需要如下处理&#xff1…

贝叶斯优化算法(Bayesian Optimization)及其Python 和 MATLAB 实现

贝叶斯优化算法&#xff08;Bayesian Optimization&#xff09;是一种基于贝叶斯统计理论的优化方法&#xff0c;通常用于在复杂搜索空间中寻找最优解。该算法能够有效地在未知黑盒函数上进行优化&#xff0c;并在相对较少的迭代次数内找到较优解&#xff0c;因此在许多领域如超…

ElementUI中的el-table解决宽度问题 - 根据内容自动撑开

在使用element-ui中&#xff0c;会发现表格组件el-table在未指定宽度情况下&#xff0c;会自动计算并给表格宽度赋值。但实际开发中&#xff0c;有时需要根据内容实际长度自动撑开显示&#xff0c;由内容的多少而决定表格的宽度&#xff0c;而不是默认宽度为100%。在默认情况下…

监控平台zabbix对接grafana

目录 1.安装grafana并启动 2.浏览器访问 3.导入zabbix数据&#xff0c;对接grafana 4.如何导入模板 5.使用zabbix监控nginx并发量连接数 5.1 修改nginx配置 5.2 编写监控数据脚本 5.3 设置键值 5.4 在zabbix web端完成自定义监控项 5.5 连接到grafana 以上一篇博客&l…

使用CubeIDE调试项目现stm32 no source available for “main() at 0x800337c:

使用CubeIDE调试项目现stm32 no source available for "main() at 0x800337c&#xff1a; 问题描述 使用CubeIDE编译工程代码和下载都没有任何问题&#xff0c;点击Debug调试工程时&#xff0c;出现stm32 no source available for "main() at 0x800337c 原因分析&a…

聊聊C++20的三向比较运算符 `<=>`

C20标准引入了许多新特性&#xff0c;其中之一是三向比较运算符 <>&#xff0c;也被称为太空船运算符。这个新运算符为C程序员提供了一种全新的比较对象的方式&#xff0c;它能有效简化比较逻辑&#xff0c;避免编写多个比较运算符重载的情况。 为什么需要三向比较运算符…

VirtualBox Ubuntu Sever配置双网卡

Ubuntu 版本&#xff1a;Ubuntu Server 2404 vitrualBox 网卡配置&#xff1a; 如上配置后&#xff0c;ifconfig 只能看到 网卡1 应用了。要应用 网卡2 需要更改文件 /etc/netplan/50-cloud-init.yaml&#xff08;不同的ubuntu版本这个文件名可能不同&#xff09; 首先 ifcon…

6.BeanFactory处理器Bean处理器

BeanFactoryPostProcessor BeanFactoryProcessor是Bean工厂处理器&#xff0c;对beanFactory的进行扩展&#xff0c;可以解析Configuration Bean注解。 主要功能是对BeanFactory的补充。 //获取所有bean工厂的处理器<Bean名字&#xff0c;bean工厂处理器>Map<Strin…

Simulink中的S函数深入解析

Simulink中的S函数深入解析 在Simulink环境中&#xff0c;S函数&#xff08;Simulink Functions&#xff09;扮演着至关重要的角色&#xff0c;它们允许用户将自定义算法和行为集成到Simulink模型中。本文将详细探讨S函数的定义、应用和编写方法&#xff0c;以及在模型中如何利…

Android设备信息(DevInfo)

软件介绍 设备信息&#xff08;DevInfo&#xff09;一款评分非常不错的手机硬件及各种信息检测应用&#xff0c;安卓设备硬件检测工具。可以全面查看手机的各种信息、包括&#xff1a;Android系统版本的详细信息、芯片CPU处理器的详细信息、全球卫星定位、测试功能、硬件温度、…

Python爬虫技术及其原理探秘

导言 随着互联网的发展&#xff0c;大量的数据被存储在网络上&#xff0c;而我们需要从中获取有用的信息。Python作为一种功能强大且易于学习的编程语言&#xff0c;被广泛用于网络爬虫的开发。本文将详细介绍Python爬虫所需的技术及其原理&#xff0c;并提供相关的代码案例。…

c++高阶-1-模板

文章目录 模板一、模板基本语法二、函数模板1.基本语法2.函数模板注意事项3.普通函数和函数模板区别4.普通函数和函数模板调用规则 三、类模板1.基本语法2.类模板和函数模板的区别3.类模板中成员函数调用时机4.类模板对象做函数参数5.类模板与继承6.成员函数的类外实现 模板 一…

Ansys Zemax|场曲跟畸变图的前世今生

实现 OpticStudio通过在X和Y方向&#xff08;弧矢和子午方向&#xff09;的傍轴光线追踪确定近轴图像平面的Z坐标&#xff0c;并测量该近轴焦平面与系统图像平面的Z坐标之间的距离。 切向数据是沿Z轴从图像平面到近轴图像平面在切向&#xff08;YZ&#xff09;平面测量的距离…

Qt Creator配置以及使用Git

Qt Creator配置以及使用Git 引言一、Qt Creator配置git二、Qt Creator使用git2.1 创建git仓库 or git项目导入Qt2.2 配置远端&#xff0c;拉代码 or 上传代码2.3 查看更改2.4 更多细节可参考官方文档 三、参考的博客以及文档 引言 Qt Creator配置Git之后&#xff0c;可以看作是…

【AIGC】DiffuToon:稳定的视频卡通化技术方案

论文&#xff1a;https://arxiv.org/pdf/2401.16224 github&#xff1a;https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/Diffutoon 网络结构 两个主要分支&#xff1a;主要的卡通化管线和编辑分支 重要技术 使用了fastblend(无需模型的视频帧之间的平滑…

动态规划解决0/1背包问题详解

一、引言 在日常生活中,我们经常面临各种选择和决策。有些决策涉及到资源的有限性和选择的最优性,这就需要我们运用一些算法来帮助我们做出最佳的选择。0/1背包问题就是这样一个经典的优化问题,它要求我们在给定的背包容量和物品集合中,选择出总价值最大的物品组合。本文将…

不同操作系统下的换行符

1. 关键字2. 换行符的比较3. ASCII码4. 修改换行符 4.1. VSCode 5. 参考文档 1. 关键字 CR LF CRLF 换行符 2. 换行符的比较 英文全称英文缩写中文含义转义字符ASCII码值操作系统Carriage ReturnCR回车\r13MacIntosh&#xff08;早期的Mac&#xff09;LinefeedLF换行/新行\…

C++程序演示如何使用类和对象进行简单的面向对象编程。

下面是一个简单的C程序示例&#xff0c;展示了如何使用类和对象进行面向对象编程。这个示例定义了一个名为Person的类&#xff0c;它包含私有成员变量&#xff08;姓名和年龄&#xff09;以及公共成员函数&#xff08;用于设置和获取这些成员变量的值&#xff09;。然后&#x…

【C语言】指针经典例题

题1&#xff1a; #include <stdio.h>int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));return 0; } //程序的结果是什么&#xff1f; 解答如下&#xff1a; 题2&#xff1a; #include <std…

提取含日期字符串并格式化输出

背景 OCR识别的字符串中&#xff0c;日期类型存在字符串中&#xff0c;需要提取出来&#xff0c;并格式化 环境以及依赖package NStudyPy0.0.12 NStudyPy 工具包 , 一个有用的工具包&#xff0c;可以简化开发流程&#xff0c;详细介绍可以参考 NStudyPy 本教程使用 python 3.10…