ubuntu16+python3.7+tensorflow-gpu安裝過程

安裝情況

配置一臺ubuntu16的命令行服務器,無腦conda安裝tensorflow-gpu後,測試時我只是import tensorflow,看沒有問題就沒繼續管了。結果後來發現服務器無法啓動gpu跑模型,本文記錄下崎嶇的解決問題的過程。

出現錯誤

在我用conda和pip移除了所有tensorflow依賴以後,驗證gpu時出現以下錯誤:

tensorflow.python.framework.errors_impl.InternalError: cudaGetDevice() failed. Status: CUDA driver version is insufficient for CUDA runtime version

當時傻傻的準備卸載1.14改裝1.13,後來證明依然不行

判定我的CUDA版本有問題(這裏花費了不少時間在弄服務器的網)
本機cuda9 cudnn7.1.3
我的tensorflow版本是1.14.0,找不到與cuda對應關係
在這裏插入圖片描述
tensorflowgpu與各個版本需要的CUDA版本以及Cudnn的對應關係如上表

這裏基本確定自己是要更新cuda了

列計劃

乾貨
給了我很大啓發,我很多步驟都是從此來的。
我直接從安裝cuda10.0開始操作
在這裏插入圖片描述
這裏第二步有個是需要自己填寫的

cd /var
ls -a

看到cuda-repo的文件夾,把名字拷貝過來代替version即可

cuda安裝問題

1 dpkg的問題

W: Failed to fetch http://cn.archive.ubuntu.com/ubuntu/dists/precise/InRelease  

W: Failed to fetch http://cn.archive.ubuntu.com/ubuntu/dists/precise-updates/InRelease  

W: Failed to fetch http://cn.archive.ubuntu.com/ubuntu/dists/precise-backports/InRelease 

這裏是因爲當時我用迅雷下載東西導致網速變慢,連不上ubuntu服務器了

-----------------------(這裏有誤,大家看看就好)-----------------------------------------------------------------------------------------------
後來添加阿里雲的ubuntu源和dns

sudo gedit /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ raring main restricted universe multiverse  
deb http://mirrors.aliyun.com/ubuntu/ raring-security main restricted universe multiverse  
deb http://mirrors.aliyun.com/ubuntu/ raring-updates main restricted universe multiverse  
deb http://mirrors.aliyun.com/ubuntu/ raring-proposed main restricted universe multiverse  
deb http://mirrors.aliyun.com/ubuntu/ raring-backports main restricted universe multiverse  
deb-src http://mirrors.aliyun.com/ubuntu/ raring main restricted universe multiverse  
deb-src http://mirrors.aliyun.com/ubuntu/ raring-security main restricted universe multiverse  
deb-src http://mirrors.aliyun.com/ubuntu/ raring-updates main restricted universe multiverse  
deb-src http://mirrors.aliyun.com/ubuntu/ raring-proposed main restricted universe multiverse  
deb-src http://mirrors.aliyun.com/ubuntu/ raring-backports main restricted universe multiverse  

sudo vi /etc/resolv.conf
#阿里雲的DNS服務器
nameserver 223.5.5.5  
nameserver 223.6.6.6

結果更加悲劇,出現找不到指定源的問題。

E: Failed to fetch http://mirrors.aliyun.com/ubuntu/dists/raring/main/source/Sources  404  Not Found

-------------------------------------(霧)-------------------------------------------------------------------------------------------------------------
後來我關了迅雷後,把所有東西恢復,即可安裝。
期間出現了

/sbin/ldconfig.real: /usr/local/lib is not a known library type

的問題,事實證明不影響後面的結果,我就沒管。

2 安裝包的問題
期間由於自己的愚昧,把系統版本記成18了 結果先下載了18的cuda10.0
後來重新下載16的cuda後,dpkg時出現了

dpkg: error processing archive xxx.deb (--unpack):
 trying to overwrite 'xxx', which is also in packagexxx

左思右想,明明把之前的解壓包刪除了,但還是出這個錯,最後莽夫做法,直接強制安裝,解決問題,命令如下:

sudo dpkg -i --force-overwrite xxx.deb

重啓系統

shutdown -r now 立刻重啓(root用戶使用)

cudnn

安裝比較正常。

tensorflow-gpu

最後沒有用conda,而是用pip解決問題

pip install tensorflow-gpu==1.13.1

結果出現了一屏幕紅字

最後更新pip

 pip install --upgrade pip

再安裝就沒問題了

驗證

import tensorflow as tf
# Creates a graph.
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print(sess.run(c))

後續(一週後)

使用tensorflow1.13跑網絡時,會莫名出現錯誤

ValueError: None values not supported.

發現是在算梯度時出現的錯誤
上網查到的解決辦法都不能解決我的錯誤(參考鏈接

/Users/laox1ao/anaconda/lib/python2.7/site-packages/keras/engine/training.pyc in _make_train_function(self)
    988                     training_updates = self.optimizer.get_updates(
    989                         params=self._collected_trainable_weights,
--> 990                         loss=self.total_loss)
    991                 updates = self.updates + training_updates
    992                 # Gets loss and metrics. Updates weights at each call.

是由於網絡存在ops的梯度爲None,導致圖的梯度流斷裂(disconnected),檢查發現是keras.backend.switch操作在以tensorflow爲backend的情況下無法計算梯度,tf.gradients()返回結果爲None

做了些對比實驗,發現同樣的數據源和同樣的代碼tensorflow1.14和1.12都不會報錯,推測可能是該版本沒有對這個場景做特殊處理。

於是着手安裝1.14
經過無數彎路,最終安裝了cuda10.1+tensorflow-gpu1.14.0
證實結果可行。

結論

別貪圖簡單就用conda安裝tensorflow-gpu
首先應該搞清楚cuda版本再確定tensorflow版本
其次pip更加靠譜一些
最後再次感謝博主指路! 鏈接

紀念啥都沒幹,光配置環境的一天

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章