【问题记录】如何在Centos8上把nccl_test集合通信库跑起来?(Message Passing Interface、make MPI=1 MPI_HOME=/usr/lib64/openm)

背景

本文记录了如何在centos8上通过安装openmpi等工具,使用nccl_test仓库运行all_reduce的测试程序的例子,但是最终只解决了各种编译问题没有真正的跑起来,不过过程十分曲折,有些地方值得记录。

nccl-tests 是由 NVIDIA 开发的一个开源测试工具集,用于评估和验证 NCCL(NVIDIA Collective Communications Library)的功能和性能。NCCL 是一个高性能的通信库,专为多 GPU 和多节点环境中的并行计算优化,支持多种集体通信操作,如 All-Reduce、All-Gather、Broadcast、Reduce 等
nccl-tests 提供了多种测试工具,用于不同的集体通信操作,包括:
all_reduce_perf:测试 All-Reduce 操作的性能。
all_gather_perf:测试 All-Gather 操作的性能。
broadcast_perf:测试 Broadcast 操作的性能。
reduce_perf:测试 Reduce 操作的性能。
sendrecv_perf:测试点对点通信的性能。

细节

安装MPI(Message Passing Interface)来支持多进程通信

CentOS 8 上运行 NCCL 测试程序,即使没有 GPU,也可以通过模拟环境进行测试。

sudo yum install -y openmpi openmpi-devel

下载并编译 NCCL-tests

NCCL-tests 是用于测试 NCCL 性能的工具,支持在没有 GPU 的环境中运行

git clone https://github.com/NVIDIA/nccl-tests.git
cd nccl-tests
make MPI=1 MPI_HOME=/usr/lib64/openmpi
# MPI=1 表示启用 MPI 支持。
# MPI_HOME 是 OpenMPI 的安装路径,可能因系统而异,可通过 find / -name mpiexec 查找

解决《nvcc没有》参考后文章节
解决《nccl.h没有》参考后文章节
解决《没有mpi.h》参考后文章节
完成全量编译效果:
在这里插入图片描述

测试

报错:unrecognized argument mca
在这里插入图片描述
查看:
在这里插入图片描述
可能原因是安装了openmpi和mpich多个mpi

再查看bashrc,注释掉mpich的,然后source ~/.bashrc
在这里插入图片描述
还是不行,可能环境变量多个,然后把openmpi的放到最前面,然后source ~/.bashrc
在这里插入图片描述
还是不对,路径没写对:
在这里插入图片描述

修改为:然后source ~/.bashrc

export PATH=/usr/lib64/openmpi/bin/:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/include/openmpi-x86_64/lib
export CPATH=$CPATH:/usr/include/openmpi-x86_64/include

确认使用了正确的mpirun
在这里插入图片描述
至少通过了,但是不建议root
在这里插入图片描述
可以跑起来了,但是共享库不对,需要修改下
在这里插入图片描述

解决libmpi.so不对

在这里插入图片描述
bashrc中指定位置不对:然后source ~/.bashrc

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/openmpi/lib/

成功运行:
在这里插入图片描述
路径不对,没在nccl test目录下,切换到/过,切换到nccl-test目录:/root/workspace/nccl-tests

切换后可以跑起来了:
在这里插入图片描述

编译问题处理

make[1]:/usr/local/cuda/bin/nvcc:命令未找到,没有nvcc如何解决?

nvcc是cuda的工具包里面的东西,需要先下载cuda toolkit的工具,然后运行

访问 NVIDIA 官方网站的 CUDA Toolkit 下载页面,选择适合 CentOS 8 的版本进行下载

wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux.run
chmod a+x cuda_11.4.0_470.42.01_linux.run 
sh cuda_11.4.0_470.42.01_linux.run   --toolkit #然后在选择的时候

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
解决办法
安装的时候去掉驱动安装,只安装工具
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查看nvcc有了,然后加入:
在这里插入图片描述
修改bashrc:

vim ~/.bashrc
# 添加:
	export PATH=/usr/local/cuda/bin:$PATH
	export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

# 然后source:
source ~/.bashrc

# 校验
nvcc --version

在这里插入图片描述

在这里插入图片描述

报错:…/verifiable/verifiable.cu:4:10: 致命错误:nccl.h:没有那个文件或目录

在这里插入图片描述
安装nccl的库:

sudo dnf config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
sudo yum install libnccl libnccl-devel #安装 NCCL 库及其开发包,如果需要静态链接 NCCL,也可以安装 libnccl-static
## 验证
ls /usr/local/cuda/include/nccl.h

在这里插入图片描述
校验:成功安装
在这里插入图片描述

其他方式:

## 方法2:手动下载和安装
下载 NCCL
从 NVIDIA 官方网站下载 NCCL 的预编译包或源码包。例如:
wget https://developer.download.nvidia.com/nvidia-nccl/v2.8.4/nccl_2.8.4+cuda10.0_v2.8.4_linux_x86_64.txz
解压并安装
解压 NCCL 包并安装:
tar -xvf nccl_2.8.4+cuda10.0_v2.8.4_linux_x86_64.txz
cd nccl_2.8.4+cuda10.0_v2.8.4_linux_x86_64
sudo ./install.sh
配置环境变量
将 NCCL 的安装路径添加到环境变量中:
echo 'export NCCL_ROOT=/usr/local/nccl' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NCCL_ROOT/lib' >> ~/.bashrc
source ~/.bashrc

# 方法3:
从源码编译
克隆 NCCL 源码
git clone https://github.com/NVIDIA/nccl.git
cd nccl
编译并安装
编译 NCCL 并安装:
make -j4
sudo make install

解决没有mpi.h:报错 common.h:14:10: 致命错误:mpi.h:没有那个文件或目录

在这里插入图片描述

原因:系统中没有安装 MPI,解决办法:安装mpi库

sudo yum install mpich mpich-devel

在这里插入图片描述
确认安装:
在这里插入图片描述
还是不行,添加到环境变量中,可以看到安装了mpich和openmpi两种mpi,实际openmpi已经有了。应该是路径不对,修改bashrc的环境变量然后source生效

vim ~/.bashrc
export PATH=$PATH:/usr/include/openmpi-x86_64/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/include/openmpi-x86_64/lib
export CPATH=$CPATH:/usr/include/openmpi-x86_64/include

source ~/.bashrc 

还是不行,尝试mpich的添加:
手动添加到CPATH的环境变量中

export CPATH=$CPATH:/usr/include/openmpi-x86_64

添加后可以正常编译:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值