Linux下NCCL源码编译安装
NCCL(NVIDA Collective Communications Library)目的是为了实现Multi-GPU或Multi-node之间的通信;
有两种安装方式,一是具有root权限的安装,二是不具有root权限的安装配置;
1. root用户安装配置NCCL
类似于下载cudnn
,需要注册NVIDIA账号,链接:
https://developer.nvidia.com/nccl/nccl-download
下载与CUDA版本、linux系统版本符合的NCCL文件,安装命令如下图所示:
2. 非root用户安装配置NCCL
其实多数情况下,我们都不具有root权限,那么如果root管理员也没有为我们在使用的服务器安装配置NCCL,那么就需要我们自己将NCCL配置在个人账号下;那么方法就是从源码进行编译安装;
首先,从github上将NCCL的仓库拉到本地:
git clone https://github.com/NVIDIA/nccl.git
相关安装文档也能从该链接获得;
安装配置:
cd nccl
make -j12 src.build BUILDDIR=/home/chenz/software/nccl CUDA_HOME=/usr/local/cuda NVCC_GENCODE="-gencode=arch=compute_35,code=sm_35"
-j12
表示使用12
个核心,使用nproc
查看总核心数,根据具体情况进行调整;BUILDDIR
表示编译后,一些文件的存储路径;默认是nccl/build
;当然如果是root用户可以指定到/usr/local/ncc/
;CUDA_HOME
表示CUDA的目录,默认就是/usr/local/cuda
,但是我这边不加这个,会报错,很奇怪;NVCC_GENCODE
,如果不添加该字段,默认会编译支持所有架构;为了加速编译以及降低二进制文件大小,添加该字段,具体comute_35,sm_35
是应该是和显卡算力相匹配,具体见:CUDA GPUs
最后呢,编译完成的文件都在指定的NVCC_GENCODE
字段路径下,需要将其添加到环境变量;
vim ~/.bashrc
在打开的文件中,添加:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/chenz/software/nccl/lib
export PATH=$PATH:/home/chenz/software/nccl/bin
保存后,执行:
source ~/.bashrc
3. 验证NCCL是否安装成功
选择一个合适的位置:
git clone https://github.com/NVIDIA/nccl-tests.git
cd nccl-tests
make -j12 CUDA_HOME=/usr/local/cuda
./build/all_reduce_perf -b 8 -e 256M -f 2 -g <ngpus>
CUDA_HOME
有毒啊,不指定就报错;<ngpus>
需要用机器GPU的个数替换,我这边有4块2显卡,就指定4
;
注意的是,指定几块GPU,验证过程就会调用几块;注意别人是否正在使用;