1. 程式人生 > >[work] cuda和cudnn版本對應的

[work] cuda和cudnn版本對應的

首先說明一下cuda和cuDNN的概念

CUDA的官方文件(參考資料1)是這麼介紹CUDA的:a general purpose parallel computing platform and programming model that leverages the parallel compute engine in NVIDIA GPUs to solve many complex computational problems in a more efficient way than on a CPU.
換句話說CUDA是NVIDIA推出的用於自家GPU的平行計算框架,也就是說CUDA只能在NVIDIA的GPU上執行,而且只有當要解決的計算問題是可以大量平行計算的時候才能發揮CUDA的作用。

接下來這段話摘抄自資料2。在 CUDA 的架構下,一個程式分為兩個部份:host 端和 device 端。Host 端是指在 CPU 上執行的部份,而 device 端則是在顯示晶片上執行的部份。Device 端的程式又稱為 “kernel”。通常 host 端程式會將資料準備好後,複製到顯示卡的記憶體中,再由顯示晶片執行 device 端程式,完成後再由 host 端程式將結果從顯示卡的記憶體中取回。

這裡寫圖片描述

接下來這段話摘抄自資料2。在 CUDA 架構下,顯示晶片執行時的最小單位是thread。數個 thread 可以組成一個block。一個 block 中的 thread 能存取同一塊共享的記憶體,而且可以快速進行同步的動作。每一個 block 所能包含的 thread 數目是有限的。不過,執行相同程式的 block,可以組成grid。

不同 block 中的 thread 無法存取同一個共享的記憶體,因此無法直接互通或進行同步。因此,不同 block 中的 thread 能合作的程度是比較低的。不過,利用這個模式,可以讓程式不用擔心顯示晶片實際上能同時執行的 thread 數目限制。例如,一個具有很少量執行單元的顯示晶片,可能會把各個 block 中的 thread 順序執行,而非同時執行。不同的 grid 則可以執行不同的程式(即 kernel)。

這裡寫圖片描述

----------------------------------------------------------------------------------------

這裡說明伺服器對應的cuda和cudnn版本。

cuda一般安裝在 /usr/local/cuda/ 路徑下,該路徑下有一個version.txt文件,裡面記錄了cuda的版本資訊

cat /usr/local/cuda/version.txt 

同理,cudnn的資訊在其標頭檔案裡

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

所以這裡是CUDA9.0.176 和cudnn7.0.5。

----------------------------------------------------------------------------------------

最近跑一個專案,安裝了tensorflow_gpu==1.3.0的版本,但是執行的時候總是報錯誤。

內容如:ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory

最初我想到的是可能在我的環境變數當中沒有做出相應的配置,因此我做出瞭如下的配置。

 
  1. $ vim ~/.bashrc 

  2. $ export LD_LIBRARY_PATH=”$LD_LIBRARY_PATH:/usr/local/cuda/lib64”  #新增該行

  3. $ export CUDA_HOME=/usr/local/cuda #新增該行

  4. $ source ~/.bashrc #新增結束後執行,使得配置生效

  5.  

接著我依然嘗試了下虛擬環境下tensorflow的匯入,依然是上面的錯誤,既然找不到libcusolver.so.8.0,我們就去看看到底有沒有。

所以執行命令:

$ ls /usr/local/cuda/lib64/

是真的就沒有該檔案,這個時候我想到兩種辦法,第一種是在cuda和cudnn上改動,第二種辦法就是更換tensorflow的版本。

實際上,2017.12的時候,tensorflow 1.4及以下的不支援cuda9.0,且tensorflow1.0版本以上是不支援cuda8.0以下的。tensorflow-gpu1.5以後不支援使用CUDA8.0。cuda8.0對應的cuDNN必須是6.0版的。由於前面我安裝的tensorflow是1.3.0,所以很明顯就不能用啦。

第一種變動很容易入坑,所以優先選擇第二種。

還是要進入該專案的虛擬環境中執行操作,解除安裝tensorflow_gpu==1.3.0並安裝tensorflow_gpu==1.5.0

$ pip uninstall tensorflow-gpu==1.3.0$ pip install tensorflow-gpu==1.5.0

接著當我們在虛擬環境中使用tensorflow就正常了,最後附上官網推薦對應版本,這裡是官網版本連結https://www.tensorflow.org/install/install_sources#tested_source_configurations