天天看點

Linux系統下解決“RuntimeError: (PreconditionNotMet) The third-party dynamic library (libnccl.so)...”報錯

随便寫寫...

最近在用PaddlePaddle架構跑代碼,遇到一些問題摸索了很久才有較為清晰的思路,在這裡記錄一下,希望可以幫助相同的朋友。

在使用Paddle進行多卡訓練的時候,往往會遇到一下報錯:

RuntimeError: (PreconditionNotMet) The third-party dynamic library (libnccl.so) that Paddle depends on is not configured correctly. (error code is libnccl.so: cannot open shared object file: No such file or directory)
Suggestions:

Check if the third-party dynamic library (e.g. CUDA, CUDNN) is installed correctly and its version is matched with paddlepaddle you installed.
Configure third-party dynamic library environment variables as follows:
Linux: set LD_LIBRARY_PATH by export LD_LIBRARY_PATH=...
Windows: set PATH by set PATH=XXX; (at /paddle/paddle/fluid/platform/dynload/dynamic_loader.cc:234) [Hint: If you need C++ stacktraces for debugging, please setFLAGS_call_stack_level=2`.
           

 首先我用的是cuda 10.1;python 3.7; cudnn 7.6;  paddlepaddle-gpu:2.1.0rc1;怎麼解決上述問題呢?按照下面的思路應該沒問題:

1.安裝nccl

那怎麼安裝nccl呢?按照下面小步驟進行:

1. 根據

cuda

的版本去選擇對應版本的nccl,可以去nvidia的官網下載下傳https://developer.nvidia.com/nccl/nccl-legacy-downloads
Linux系統下解決“RuntimeError: (PreconditionNotMet) The third-party dynamic library (libnccl.so)...”報錯

https://developer.nvidia.com/nccl/nccl-legacy-downloads

2. 這裡以cuda 10.1為例,你下什麼安裝包呢?如果你是CentOS系統下載下傳字尾為 .rpm的壓縮檔案;如果你是Ubuntu系統下載下傳字尾為 .deb的壓縮檔案

3.安裝鏡像庫,怎麼安裝呢?分以下兩種情況:①如果你是CentOS系統,終端輸入指令:

sudo rpm -i nccl-repo-<version>.rpm 
      
②如果你是Ubuntu系統,終端輸入指令:
sudo dpkg -i nccl-repo-<version>.deb      
4. 更新源鏡像,怎麼更新呢?分以下兩種情況:①如果你是CentOS系統,終端輸入指令:
sudo yum update
      
②如果你是Ubuntu系統,終端輸入指令:
sudo apt update      
5. 安裝nccl,怎麼安裝呢?分以下兩種情況:①如果你是CentOS系統,終端輸入指令:
sudo yum install libnccl-2.4.8-1+cuda10.1 libnccl-devel-2.4.8-1+cuda10.1 libnccl-static-2.4.8-1+cuda10.1(注意這是我的版本,不要照抄哦)
      
②如果你是Ubuntu系統,終端輸入指令:
sudo apt install libnccl2=2.4.8-1+cuda10.1 libnccl-dev=2.4.8-1+cuda10.1(同上注意啦)
      

2.将nccl添加到環境變量中 

首先,找到你nccl的安裝目錄,你問我怎麼找?當然是終端輸入指令:whereis nccl 了,我的是在/usr/include/nccl.h中

然後,終端輸入vim ~/.bashrc進入該檔案,添加如下内容到檔案中(添加到最低行):

#設定cuda庫的目錄
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64
#将nccl添加到LD_LIBRARY_PATH中
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/include/nccl.h
           

 最後,儲存好了,咱還要更新,讓配置檔案生效啊,終端輸入指令:source ~/.bashrc 再通過echo $LD_LIBRARY_PATH指令檢視環境變量設定是否成功。

我時常感慨:摸索未知的東西是最難的,但同時也是最鍛煉人的,就這個問題,我足足查了三天資料,才整理出一段思路,是以科研的路還有很遠,很遠。

參考:You may need to install ‘nccl2‘ from NVIDIA official website

Installation Guide :: NVIDIA Deep Learning NCCL Documentation