1. 程式人生 > >記錄一次Python下Tensorflow安裝過程,1.7帶GPU加速版本

記錄一次Python下Tensorflow安裝過程,1.7帶GPU加速版本

最近由於論文需要,急需搭建Tensorflow環境,16年底當時Tensorflow版本號還沒有過1,我曾按照手冊搭建過CPU版本。目前,1.7算是比較新的版本了(也可以從原始碼編譯1.8版本的Tensorflow)。
安裝步驟:
不能急於求成,安裝任何東西前都應該先閱讀使用者手冊與FAQ,弄清軟體依賴與安裝步驟。對於Tensorflow來說,官網有時上不去,建議關注Tensorflow的GitHub(https://github.com/tensorflow/tensorflow),GitHub上只是指明瞭Python版本,對於CUDA和cuDNN並沒有過多的說明,但是在releases頁面,尤其是Tensorflow1.7部分做了如下說明:

  • Tensorflow 1.7 may be the last time we support CUDA versions below 8.0.Starting with Tensorflow 1.8 release, 8.0 will be the minimum supported version.
  • Tensorflow 1.7 may be the last time we support cuDNN versions below 6.0. Starting with Tensorflow 1.8 release, 6.0 will be the minimum supported version.

如果大家不願意深究下去,我的建議是:

  • 沒有GPU或者GPU算力達不到3.0的(帶GPU加速的Tensorflow版本依賴cuDNN,而cuDNN又需要3.0算力的GPU支援),果斷選擇linux,因為在linux下,Python可選擇的版本更多。
  • 有GPU,並且符合算力3.0以上的要求,建議考慮windows平臺,當然,也可以選linux,但是驅動相關問題需要自己解決,尤其是涉及到雙顯示卡的筆記本時,比較麻煩,我在本文後面給出了一個FAQ,專門討論英偉達相關驅動問題。

平臺與驅動問題解決後,下面就是下載Tensorflow和對應的Python開發環境了,有一點,谷歌做的不錯——Tensorflow直接是一個whl格式的Python包。很多教程是讓人下載Anaconda整合開發環境,我給出的建議是:如果你只是想安裝一個Python版本,並且沒什麼非常特別的需求話,可以不用安裝Anaconda,如果你在linux下進行開發,我倒是比較推薦Anaconda,畢竟可以省去不少事!這裡要說一下,tensorflow的GitHub上給出的windows+GPU 1.7版本只有Python3.5與3.6可選,如果你非要用Python2,那就只能選linux了~而在另外一個whl包聚集地:

https://www.lfd.uci.edu/~gohlke/pythonlibs/,作者說的更加簡明扼要(注意,頁面給出的是CPU版本的):

TensorFlow, computation using data flow graphs for scalable machine learning.The CUDA builds require CUDA 8 and CUDNN 6.

當Python安裝好並且下載好Tensorflow的whl包後,先不要急著安裝,由於Python在安裝包時會自動解決依賴問題,因而,在安裝Tensorflow過程中總是會聯網下載一些依賴包,為了讓下載更加快一些,首先需要更換pip源,國內pip源我比較推薦清華的,直接同步的官方源,極少出問題。換源的方法很簡單:windows下,直接在user目錄中建立一個pip目錄,如:C:\Users\使用者名稱\pip,新建檔案pip.ini,內容如下:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

至此,我們轉到Tensorflow對應的whl檔案目錄下,直接一句pip install xxxx.whl剩下的就讓計算機處理吧~~~~~~~
因為換了源,速度不會太差,幾分鐘就裝好了~~~~
現在不要太高興,目前,不少人安裝後不能用Tensorflow,有各種問題,現在先放出一段程式碼,用來測試,程式碼是網上找到的。

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
#輸出Hello, TensorFlow!
a = tf.constant(10)
b = tf.constant(32)
print(sess.run(a + b))
#輸出42

下面這段程式碼是測試GPU版本的Tensorflow的。

import numpy
import tensorflow as tf
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)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print(sess.run(c))

輸出結果會包含GPU資訊~

FAQ
Q:顯示卡驅動,CUDA tool,cuDNN三者有何關係?安裝有無先後順序?
A:關於顯示卡,英偉達很多時候說的不明不白。實際上,你下載某個驅動,驅動自身大多數時候是自帶CUDA的,是的,沒錯,但是驅動自帶的CUDA卻像是少了很多東西,也找不到CUDA專門的資料夾,比較靠譜的一種說法是:正確安裝顯示卡驅動後會自帶一個精簡的CUDA呼叫介面,以供諸如CAD等一系列軟體呼叫。就我使用過程來說,Caffe框架可以直接用這個精簡介面,而不需要單獨安裝CUDA tool。但是,如果你需要開發獨立的CUDA程式,或者必須找到CUDA工具檔案目錄,那CUDA tool你是必須安裝的,而且,英偉達有一個坑爹的設定:CUDA tool自帶一個匹配驅動,這就出問題了,一般我們拿到電腦後,都是先安裝驅動的,這樣一來,兩者很可能衝突,事實上,也確實出現過這類問題,比較有名的就是GTX10顯示卡安裝CUDA出錯問題,目前英偉達應該已經解決了。我的建議是,如果你必須使用CUDA tool,保險起見,解除安裝原有驅動,直接安裝CUDA tool,這樣一來問題就會少很多。另外,cuDNN不會直接安裝,需要單獨下載,而且cuDNN其實就是.h標頭檔案,.lib庫檔案以及一個.dll檔案,只要把這三個檔案放到CUDA對應的目錄下就可以了,環境變數需要相關設定。
Q:安裝完測試時報錯:No module named "_pywrap_tensorflow" DLL load failed.
A:這個問題有很多種說法,比如什麼CUDA與cuDNN版本不匹配,缺少微軟MSVCP140.DLL,cuDNN安裝後是否正確設定了環境變數······
目前來看,前兩種可能性不大,因為cuDNN在下載時已經明確了CUDA版本,微軟的那個東西,上述安裝過程根本沒裝,最後一個也很容易處理···不細說了,總之按照上述安裝方法,沒有任何報錯問題~
Q:請詳細說一下cuDNN安裝過程
A:看英文:

Copy CuDNN files to Nvidia CUDA toolkit folder (usually is located on C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0)
copy cudnn\bin\cudnn64_5.dll to C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v8.0\bin 
copy cudnn\include\cudnn.h to C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include 
copy cudnn\lib\x64\cudnn.lib to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64

CUDA在安裝過程中已經自動加入環境變量了,所以,cuDNN不用額外設定,直接複製檔案就可以了。
Q:如何獲得Tensorflow的歷史版本?
A:可以從pypi的官方倉庫查詢:https://pypi.org/ 查詢tensorflow-gpu,或者tensorflow