1. 程式人生 > >tensorflow1.12 多GPU協同訓練報錯tensorflow.python.framework.errors_impl.NotFoundError: libnccl.so.2

tensorflow1.12 多GPU協同訓練報錯tensorflow.python.framework.errors_impl.NotFoundError: libnccl.so.2

       tensroflow為了提高多模型訓練速度,需要多個GPU同時工作,而且我們一般使用的工作站都是8塊tesla K80,如果能將8塊顯示卡的計算力充分利用起來,將會大大提高模型訓練的速度,縮短模型訓練時間。

       這幾天看到tensorflow的morroredstrategy特別好用,就想試試,所以寫了程式碼,想看看多個GPU的效能怎麼樣,就仿照github上tensorflow的一些例子寫了一些教程,但是出現了一個錯誤:

tensorflow.python.framework.errors_impl.NotFoundError: libnccl.so.2: cannot open shared object file: No such file or directory。

根據報錯的內容,我們知道,缺少一個檔案,libnccl*** 類似的東西,看到nccl立馬想到是nvidia的東西,經過查詢資料發現,這個東西應該放在cuda資料夾下,在出現需要多個GPU同時工作時來呼叫的,如果cuda對應的lib64檔案下沒有找到該檔案,就需要下載一下,預設的cuda並不直接安裝該功能的,但是如果已經有cuda的情況下,只需要將對應的檔案複製進cuda資料夾下的lib64 這個庫裡。

首先,下載目標檔案,nvdia官網下載,如果沒有註冊nvidia developer就註冊一個賬號,也沒啥損失,郵箱就可以。

可以找自己cuda對應的版本進行下載,因為我是cuda9.2,所以操作如下圖所示

下載第一個壓縮包就好,解壓後得到兩個資料夾include 和 lib,如圖:

將include資料夾下的檔案都複製到cuda資料夾下對應的inlcude中去,

sudo cp include/* /usr/local/cuda-9.2/include
sudo cp include/* /usr/local/cuda-9.2/lib64

這個要根據自己的位置而定,我是在include資料夾外面一級的目錄裡,同時也要看自己的cuda庫裝在哪,版本號是多少。需要刪除原有檔案,然後重新生成libnccl.so 和 libnccl.so.2這兩個檔案.

cd /usr/local/cuda-9.2/lib64
sudo rm libnccl.so libnccl.so.2
sudo ln -s libnccl.so.2.3.5 libnccl.so.2
sudo ln -s libnccl.so.2 libnccl.so

對應的結果會變顏色

這說明已經ok了,就可以正常運行了。

核心程式碼是

distribution = tf.contrib.distribute.MirroredStrategy(num_gpus=1)
config = tf.estimator.RunConfig(train_distribute=distribution)