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,驗證過程就會調用幾塊;注意別人是否正在使用;

