0. 前言
在使用Python版本的PaddleDetection进行一些实验时,想同时利用多个GPU提高效率,遇到了一点问题
You may need to install ‘nccl2‘ from NVIDIA official website
意思是多卡通信时需要跨卡通信库的支持,这时就需要用到NCCL。
NCCL全称Nvidia Collective multi-GPU Communication Library
,是一个实现多GPU交互的通信库,Nvidia做了很多优化以在PCIe、Nvlink、InfiniBand
等不同的通信方式中实现较高的通信速度。
1. Ubuntu18.04本地安装NCLL步骤
本地环境如下
- Ubuntu18.04 x86_64
- CUDA-10.0
- cuDNN-7.6.5
现在来安装NCCL。首先去官网下载页面找到合适的版本。
- (1)下载
nccl-repo-ubuntu1604-2.5.6-ga-cuda10.0_1-1_amd64.deb
- (2)安装镜像库
sudo dpkg -i nccl-repo-ubuntu1604-2.5.6-ga-cuda10.0_1-1_amd64.deb
- (3)更新源镜像
sudo apt update
- (4)安装nccl
sudo apt install libnccl2=2.5.6-1+cuda10.0 libnccl-dev=2.5.6-1+cuda10.0
- (5)配置系统环境变量
nccl默认的安装目录是/usr/lib/x86_64-linux-gnu
,在~/.bashrc
文件中添加以下内容之后保存文件,使用
source ~/.bashrc
使文件的配置生效。
#设置cuda库的目录
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
#将nccl添加到LD_LIBRARY_PATH中
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu
2. 测试PaddleDetection多卡训练
安装好NCCL后,测试一下使用多卡的命令。
- (1)单机单卡启动,默认使用第0号卡
$ python train.py
- (2)单机多卡启动,默认使用当前可见的所有卡
$ python -m paddle.distributed.launch train.py
- (3)单机多卡启动,设置当前使用的第0号和第1号卡
$ CUDA_VISIABLE_DEVICES='0,1' python -m paddle.distributed.launch --selected_gpus='0,1' train.py
- (4)单机多卡启动,设置当前使用第0号和第1号卡
$ CUDA_VISIABLE_DEVICES='0,1' python -m paddle.distributed.launch train.py
参考资料
[1] You may need to install ‘nccl2‘ from NVIDIA official website https://icode.best/i/42989337341942
[2] NCCL2 Survey https://github.com/PaddlePaddle/Paddle/wiki/NCCL2-Survey
[3] NVIDIA NVCC DOCUMENTATION https://docs.nvidia.com/deeplearning/nccl/install-guide/index.html
[4] NCCL Legacy Download Page https://developer.nvidia.com/nccl/nccl-legacy-downloads
本文作者 :phillee
发表日期 :2022年02月11日
本文链接 :https://www.cnblogs.com/phillee/p/15882198.html
版权声明 :自由转载-非商用-非衍生-保持署名(创意共享3.0许可协议/CC BY-NC-SA 3.0)。转载请注明出处!
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。