NCCL,NCCL-tests下载安装教程,测试和错误解决

按理这一期该录个实操视频的,可惜缺卡,哈哈哈,等赚钱了买卡补录。

NCCL源码解读的视频可以看这:

NCCL集合通信源码解读、案例、任务调度、拓扑_哔哩哔哩_bilibili

一、NCCL源码下载

以下两种方式,选一种即可

1.1 github下载压缩包并解压

1.1.1 登录如下网址,完成ZIP压缩包下载
https://github.com/NVIDIA/nccl

GitHub - NVIDIA/nccl: Optimized primitives for collective multi-GPU communication

1.1.2 安装包解压缩
 unzip nccl.zip

 得到如下图的文件夹

1.2 git克隆代码

git clone https://github.com/NVIDIA/nccl.git

 二、编译源码

进入nccl源码目录,编译源码

$ cd nccl
$ make -j src.build

 得到如下结果,说明编译成果啦!

注:编译源码错误解决

编译的时候遇到如下错误

Compiling       build/obj/device/gensrc/reduce_sumpostdiv_i8.cu
Compiling       build/obj/device/gensrc/reduce_sumpostdiv_u32.cu
Compiling       build/obj/device/gensrc/reduce_sum_u8.cu
Compiling       build/obj/device/gensrc/reduce_sumpostdiv_u8.cu
Compiling       build/obj/device/gensrc/reduce_sumpostdiv_i32.cu
Killed
Killed
Killed
Killed
Killed
make[2]: *** [/data/NCCL_my/nccl-2.19/build/obj/device/gensrc/rules.mk:10: /data/NCCL_my/nccl-2.19/build/obj/device/genobj/all_reduce_minmax_f16.cu.o] Error 137
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [/data/NCCL_my/nccl-2.19/build/obj/device/gensrc/rules.mk:49: /data/NCCL_my/nccl-2.19/build/obj/device/genobj/all_reduce_premulsum_u64.cu.o] Error 137
make[2]: *** [/data/NCCL_my/nccl-2.19/build/obj/device/gensrc/rules.mk:133: /data/NCCL_my/nccl-2.19/build/obj/device/genobj/reduce_minmax_u64.cu.o] Error 137
Killed
Killed
make[2]: *** [/data/NCCL_my/nccl-2.19/build/obj/device/gensrc/rules.mk:136: /data/NCCL_my/nccl-2.19/build/obj/device/genobj/reduce_minmax_u8.cu.o] Error 137
make[2]: *** [/data/NCCL_my/nccl-2.19/build/obj/device/gensrc/rules.mk:175: /data/NCCL_my/nccl-2.19/build/obj/device/genobj/reduce_prod_u64.cu.o] Error 137
Killed
make[2]: *** [/data/NCCL_my/nccl-2.19/build/obj/device/gensrc/rules.mk:82: /data/NCCL_my/nccl-2.19/build/obj/device/genobj/all_reduce_sum_f32.cu.o] Error 137
make[2]: *** [/data/NCCL_my/nccl-2.19/build/obj/device/gensrc/rules.mk:16: /data/NCCL_my/nccl-2.19/build/obj/device/genobj/all_reduce_minmax_f64.cu.o] Error 137

将编译命令改成如下命令,成果啦!(据说是并行编译,资源不足导致的,-j我只尝试加个4,成功了,我就没管了,说不定8也可以而且更快,大家自己试试。)

 make -j 4 src.build

三、NCCL包构建

安装NCCL运行如下命令

$ # Install tools to create debian packages
$ sudo apt install build-essential devscripts debhelper fakeroot
$ # Build NCCL deb package
$ make pkg.debian.build
$ ls build/pkg/deb/

 出现如下提示,恭喜恭喜!

四、NCCL安装

sudo dpkg -i build/pkg/deb/libnccl2_2.19.3-1+cuda12.4_amd64.deb
sudo dpkg -i build/pkg/deb/libnccl-dev_2.19.3-1+cuda12.4_amd64.deb 

五、NCCL-tests安装

5.1 下载NCCL-tests

  GitHub - NVIDIA/nccl-tests: NCCL Tests

到Github上下载zip包并解压缩,或者

git clone https://github.com/NVIDIA/nccl-tests.git

5.2 安装NCCL-tests

进入NCCL目录,并make

cd nccl-tests-master
make

 哈哈哈,NCCL-tests安装成功啦。

注:

如果 CUDA 未安装在 /usr/local/cuda 中,您可以指定 CUDA_HOME。同样,如果 NCCL 未安装在 /usr 中,则可以指定 NCCL_HOME。

make CUDA_HOME=/path/to/cuda NCCL_HOME=/path/to/nccl

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

六、NCCL测试

输入如下命令测试NCCL和NCCL-test有没有安装好。

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

 参数说明 

        -b 集合通信起始(最小)数据量大小

        -e 集合通信结束(最大)数据量大小

        -f 乘法因子(数据量按几倍增加)

        -g 参与通信的GPU数量

哈哈哈,能跑,安装成功啦。可以使用NCCL和进行NCCL性能测试啦。

其它安装需求

七、将NCCL安装到指定目录

第四章的安装命令,更换为如下,指定安装目录

sudo make install PREFIX=/home/acmdxmj/NCCL_coding/debIntall

第五章5.2, NCCL-tests指定目录

make NCCL_HOME=/home/acmdxmj/NCCL_coding/debIntall

并且增加环境变量

export LD_LIBRARY_PATH=/home/acmdxmj/NCCL_coding/debIntall/lib:$LD_LIBRARY_PATH

之后再运行NCCL-test

八、单机多进程NCCL通信

8.1 MPI安装

sudo apt-get update
sudo apt install openmpi-bin openmpi-doc libopenmpi-dev
mpirun --version

MPI的安装位置查询 

dpkg -L libopenmpi-dev | grep '\.so$'

MPI的安装路径为

/usr/lib/x86_64-linux-gnu/openmpi

8.2 NCCL-test 重新编译

# 多机编译
make CUDA_HOME=/path/to/cuda NCCL_HOME=/path/to/nccl MPI_HOME=/path/to/mpi MPI=1

8.3 运行NCCL-test 

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

九、多机多进程NCCL通信

多台机器都完成上面的安装流程,并能执行8.3节的命令。

9.1 SSH免密配置

看这部分内容之前,请先看这个文档

git,ssh免密公钥配置,gitee为例,GitHub,gitlab同理_git,ssh免密公钥配置,gitee为例,github,gitlab同理git-CSDN博客

看看如何生成 id_rsa.pub

cd ~/.ssh
cp id_rsa.pub authorized_keys
scp authorized_keys acmdxmj@166.333.24.83:~/.ssh/

 

目前只有一台免密另一台,现在两台服务器互相免密。

进入另一台服务器 

ssh 远端IP地址

SSH免密授权 

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
scp authorized_keys acmdxmj@166.333.24.83:~/.ssh/

 切回本端服务器

ssh 本端IP地址

9.2 构建hostfile

假设你有三台机器参与测试,它们的IP地址分别是192.168.1.1192.168.1.2192.168.1.3。那么hostfile的内容应该如下所示:

192.168.1.1 slots=1
192.168.1.2 slots=1
192.168.1.3 slots=1

9.3 多机运行NCCL

mpirun -np 8 -hostfile hostfile --allow-run-as-root ./build/all_reduce_perf -b 8 -e 1G -f 2 -g 4
  • -np 8:总进程数(如2节点×4GPU)。
  • -g 4:每节点使用的GPU数。
  • -b 8 -e 1G:测试数据范围(8B到1GB)。

9.4 多机NCCL不在默认安装目录

需设置系统环境变量

sudo vim /etc/environment
 LD_LIBRARY_PATH=/home/acmdxmj/NCCL_coding/debIntall/lib:$LD_LIBRARY_PATH

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值