记录之使用3080ti运行tensorflow-gpu=1.x版本的源码
環境:Anaconda3,ubuntu18.04,RTX3080ti,python3.7
RTX3080ti顯卡是當前市面上比較新的,算力比較強的顯卡,且這類顯卡采用了安培架構僅支持cuda11.x及以上版本。關于tf-gpu,cuda,cudnn間的對應關系,我們可以查看:從源代碼構建 ?|? TensorFlow
關于驅動和cuda,cudnn的對應關系,我們可以查看:Release Notes :: CUDA Toolkit Documentation
?
##問題1:我的30系列卡的驅動為450.x.x或更高,按照向下兼容的道理,那我是不是可以使用cuda10.x?
正常答案是不能,因為正常情況下30系列的卡只支持cuda11.x(非正常的答案也有,不過安裝起來比較麻煩,這里我們只討論正常情況,下面會給出這種情況的鏈接)。這個問題也是困擾我的問題,因為我一直秉持著向下兼容的道理,相信我的3080ti支持cuda10.x,我在幾次測試時發現,行不通。我們都知道,在使用conda安裝tf-gpu的時候,會自動安裝對應的cudatoolkit和cudnn,這也著實為我們省了不少麻煩。但是在安裝時發現conda可以search到的最高tensorflow-gpu版本為2.4.1,而其對應的cudatoolkit是10.1.183,這種辦法裝好的環境,在使用tf.test.is_gpu_avaliable()時打印出的是True,但在實際跑代碼時,會卡在奇怪的地方:
然后報最下面的一行錯,可以看到,cuda和cudnn雖正常打開,但是并沒辦法使用,就是因為30系列的卡只支持cuda11.x,這也就意味低于tf-gpu=2.x版本的代碼是不能運行的,tf-gpu=1.x的版本更不可以。怎么解決呢,繼續看問題2和3。
PS:非正常情況,因為Geogle不再維護tf1.x,但是Nvidia公司有在維護一款tf-gpu=1.15.x,且可以運行在30系列的卡,該方法需要科學上網和指定的ubuntu版本(ubuntu20.x),因此我就沒有嘗試,有興趣的可以一試,鏈接:https://blog.csdn.net/wu496963386/article/details/109583045)
##問題2:我虛擬環境中的tensorflow-gpu如果不使用conda自動安裝的cudatoolkit和cudnn,直接使用大環境的CUDA和cudnn(前提是你的大環境已經配置好)?
答案是可以,因為conda可以search到的最高tensorflow-gpu版本為2.4.1,而其對應的cudatoolkit是10.1.183,我們的30卡不可以直接用。由于該tf-gpu和cudatoolkit,cudnn是捆綁安裝的,且卸載的時候是捆綁卸載的,所以我們不能使用conda來裝tf-gpu了。將原來conda裝的tf-gpu卸載,會一并卸載cudatoolkit和cudnn。如果環境中沒有cudatoolkit和cudnn,就會使用大環境中的cuda和cudnn,使用pip在虛擬環境中安裝tf-gpu,由于我的大環境cuda版本為11.2,因此我下載了tf-gpu=2.6.1。不少同學會問,可是我的代碼時1.x的怎么辦,接著看問題3。
##問題3:tf2.x和tf1.x相比,很多函數都變了,也舍棄了很多函數,怎么辦?
根據問題1,我們已經知道,tf-gpu=1.x的版本正常是無法在30系列的卡上運行的,想調顯卡就必須使用tf-gpu=2.x,因此我們需要針對修改源碼,以讓其在tf-gpu=2.x下運行,主要涉及的改動:
1.在import tensorflow 時使用:
import tensorflow.compat.v1 as tf ### tf.disable_v2_behavior()這種方式import的tf不包含contrib,因為tf2.x丟棄了這個包
2.一些使用contrib包的初始化方式及函數:
tf1.x: tf.contrib.layers.xavier_initializer()-->tf2.x: tf.keras.initializers.glorot_normal() tf1.x: tf.contrib.layers.l2_regularizer(0.01)) -->tf2.x: tf.keras.regularizers.l2(0.01))?大家在修改時,要根據出現的報錯修改,改動應該不會涉及太多。
最后給大家說一下,我當前的配置:Nvidia-driver:465.31,tf-gpu=2.6.1,cuda=11.2(11.2.142), cudnn=8.1.1
最后還有一個問題:根據從源代碼構建 ?|? TensorFlow這里查詢到的tf-gpu=2.4.0應該是搭配cuda=11.0的,為什么conda里會搭配cudatoolkit=10.1.x呢?應該是該網址給出的是已知能用的搭配,并不是所有搭配,想嘗試conda這組搭配可不可行的,可以使用20系列顯卡,安裝搭配cuda10.1的驅動。
總結
以上是生活随笔為你收集整理的记录之使用3080ti运行tensorflow-gpu=1.x版本的源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记录之关于tensoflow中使用Ada
- 下一篇: pytorch选出数据中的前k个最大(最