小白Windows7/10 64Bit安裝Theano並實現GPU加速(沒有MinGw等,詳細步驟)

原文鏈接 http://blog.csdn.net/niuwei22007/article/details/47684673


本教程適合最初學習者,高手勿噴。原文地址:http://blog.csdn.net/niuwei22007/article/details/47684673

Ubuntu15.10 64bit成功安裝Theano+Cuda7.5,具體教程看這裏

經過一段時間的使用,建議安裝python2.7,因爲大部分的代碼都是基於python2.7開發,如果安裝python3.4的話,會有很多的語法問題,就是python3.x和python2.x在語法變量函數名上邊進行了大的改動,如果基礎不好,還是建議使用低版本。

經過實際測試,win10 64位也可以安裝成功。win8沒試過,應該也可以

網絡上有各種各樣的win7 64bit安裝theano的方法,我也試過好多,各種各樣的問題。因爲之前沒了解過MinGw等東西,所以安裝起來比較費勁,經過不斷的嘗試,最終我按照以下過程安裝成功。

其實過程很簡單,首先說一下安裝條件:
1. win7 (32和64都可以,下載安裝包時一定要選擇對應的)
2. vs2010(不一定非要是vs2010,恰好我有vs2010,應該是配置GPU編程時需要用到vs的編譯器)
3. Anaconda(轉到官方下載,打開之後稍微等一會就會出來下載鏈接了。之所以選擇它是因爲它內置了Python,以及numpy、scipy兩個必要庫和一些其他庫,比起自己安裝要省事。至於版本隨便選擇了,如果想安裝python3.4就下載對應的Anaconda3。本教程使用Anaconda,也就是對應的python2.7版本。安裝過程無差別。)

安裝過程:
一、卸載之前版本。
把之前單獨安裝的python等統統卸載掉。學python的時候直接安裝了python2.7,先把他卸載掉,因爲Anaconda裏邊包含了python。

二、安裝Anaconda。
這個超級簡單,安裝目錄我用的默認的 C:\Anaconda 。中間會有360攔截,全部允許即可。

三、安裝MinGw。
其他教程講在環境變量中添加 path C:\Anaconda\MinGW\bin;C:\Anaconda\MinGW\x86_64-w64-mingw32\lib; ,但是你會發現 C:\Anaconda\ 下面根本沒有MinGw這個目錄,所以最好的方法就是用命令安裝,不需要自己下載什麼mingw-steup.exe等。
安裝方法:
1. 打開CMD(注意是windows命令提示符,並不是進入到python環境下,否則會提示語法錯誤,因爲conda命令就是在windows下面執行的。);
2. 輸入conda install mingw libpython,然後回車,會出現安裝進度,稍等片刻即可安裝完畢。此時就有C:\Anaconda\MinGw目錄了。

四、配置環境變量。
1. 編輯用戶變量中的path變量(如果沒有就新建一個,一般會有的),在後邊追加C:\Anaconda;C:\Anaconda\Scripts; 不要漏掉分號,此處因爲我的Anaconda的安裝目錄是C:\Anaconda,此處需要根據自己的安裝目錄填寫。
2. 在用戶變量中新建變量pythonpath,變量值爲C:\Anaconda\Lib\site-packages\theano; ,此處就是指明安裝的theano的目錄是哪,但是現在咱們還沒有安裝,所以不着急,先寫完再說。
3. 打開cmd,會看到窗口裏邊有個路徑,我的是C:\Users\Locked>,根據自己的路徑,找到對應的目錄,在該目錄下新建一個文本文檔.theanorc.txt (注意有兩個“.”),編輯它,寫入以下內容:
[global]
openmp=False
[blas]
ldflags=
[gcc]
cxxflags=-IC:\Anaconda\MinGW
其中紅體字部分是你安裝的Anaconda的路徑,一定不要弄錯。否則找不到MinGw。
4. 最好重啓一下電腦。

五、安裝Theano。
不需要手動下載zip等壓縮包,直接用命令安裝最簡單。
1. 打開CMD,方法和安裝MinGw一樣,不要進入python。
2. 輸入pip install theano,回車後就是賞心悅目的下載進度條,這個很小,所以安裝的比較快。
3. 在cmd中,輸入python 進入到python環境下,然後先輸入import theano回車,需要等一段時間。
4. 繼續輸入theano.test()。又會輸出好長一段信息,只要沒有error就說明安裝成功了。我安裝時等了一段時間還在輸出,我就ctrl+c退出了。(其實我發現,有部分error信息也沒有關係,theano的功能也可以正常使用,包括theano.function(),所以如果有同學無論如何配置還是有error信息的話,可以暫時忽略掉,直接跑一段程序試一下,可以去測試一下卷積操作運算代碼。

GPU加速已經配置完成,環境win7 64bit 顯卡GetForce GT425M 顯卡不是很好,過程也不是很難,但是也是弄了好好幾天纔可以,原來用的win10,怎麼配置都失敗,換成win7後,一次性搞定。下面簡單提示幾點,具體的按照一個教程來就行了。

配置GPU加速之前先按照本教程安裝好theano。

  1. 要裝一個vs2010,或者其他的版本,但是不要是vs2015,具體的版本要看你安裝的cuda版本。建議裝vs2010,能支持大部分的cuda版本。
  2. 裝vs2010的時候,可以只選擇裝C++語言就夠。
  3. 下載cuda,如果你的Anaconda(python)是64位的,那就下載cuda64bit的;否則下載32bit的。其次,如果你的是筆記本,那就選擇notebook,否則選擇桌面版。下載地址:https://developer.nvidia.com/cuda-toolkit-archive
  4. 至於cuda的版本,有的說要和對應的顯卡版本匹配,我的按照列表中的版本是2.1,太老了,現在都出到7.0了,所以我就安裝了6.5,實驗來看,cuda版本和顯卡型號貌似關係不是很大。
  5. 安裝Cuda6.5,安裝的時候,選擇“自定義安裝”,安裝全部功能,還有要安裝到默認位置最好,安裝很簡單,可能需要點時間。
  6. 安裝完後,打開環境變量應該會多出來2個變量,CUDA_PATH_V6_5和CUDA_PATH.
  7. 打開cmd控制檯命令行,輸入命令nvcc –V回車(注意是大寫V)就可以查看版本信息,如果安裝正確會顯示Cuda的版本號。

      E:\Program_Projects\py\cnn01>nvcc -V
      nvcc: NVIDIA (R) Cuda compiler driver
      Copyright (c) 2005-2014 NVIDIA Corporation
      Built on Fri_Jul_25_06:28:08_CDT_2014
      Cuda compilation tools, release 6.5, V6.5.13

  8. (這一步不是必須得,而且這一步是和cuda的版本有關係的,不是所有的版本都有這個程序,或者即使有也不一定是類似的文件夾。所以直接下一步也可以。可以確定cuda6.5是有的。)運行C:\Program Files\NVIDIACorporation\Installer2\CUDASamples_6.5\bin\win64\Release下邊的particles.exe,如果能正常打開,就說明安裝沒問題了。

  9. 配置.theanorc.txt,如下:
    [global]
    openmp=False
    device = gpu
    floatX = float32
    allow_input_downcast=True

    [blas]
    ldflags=
    [gcc]
    cxxflags=-IE:\Anaconda\MinGW
    [nvcc]
    flags = -LE:\Anaconda\libs #此處是Anaconda的路徑
    compiler_bindir = E:\VS2010\VC\bin #此處一定要和你安裝的VS的路徑保持一致,如果是默認安裝的,應該是C:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\bin
    fastmath = True
    flags=-arch=sm_30 #我的加入這句話會報錯,去掉就好了

  10. 然後就測試一下就行了,這樣應該能安裝成功。
    測試代碼:

<code class="hljs php has-numbering">from theano import <span class="hljs-function"><span class="hljs-keyword">function</span>, <span class="hljs-title">config</span>, <span class="hljs-title">shared</span>, <span class="hljs-title">sandbox</span>
<span class="hljs-title">import</span> <span class="hljs-title">theano</span>.<span class="hljs-title">tensor</span> <span class="hljs-title">as</span> <span class="hljs-title">T</span>
<span class="hljs-title">import</span> <span class="hljs-title">numpy</span>
<span class="hljs-title">import</span> <span class="hljs-title">time</span>

<span class="hljs-title">vlen</span> = 10 * 30 * 768  # 10 <span class="hljs-title">x</span> #<span class="hljs-title">cores</span> <span class="hljs-title">x</span> # <span class="hljs-title">threads</span> <span class="hljs-title">per</span> <span class="hljs-title">core</span>
<span class="hljs-title">iters</span> = 1000

<span class="hljs-title">rng</span> = <span class="hljs-title">numpy</span>.<span class="hljs-title">random</span>.<span class="hljs-title">RandomState</span><span class="hljs-params">(<span class="hljs-number">22</span>)</span>
<span class="hljs-title">x</span> = <span class="hljs-title">shared</span><span class="hljs-params">(numpy.asarray<span class="hljs-params">(rng.rand<span class="hljs-params">(vlen)</span>, config.floatX)</span>)</span>
<span class="hljs-title">f</span> = <span class="hljs-title">function</span><span class="hljs-params">([], T.exp<span class="hljs-params">(x)</span>)</span>
<span class="hljs-title">print</span> <span class="hljs-params">(f.maker.fgraph.toposort<span class="hljs-params">()</span>)</span>
<span class="hljs-title">t0</span> = <span class="hljs-title">time</span>.<span class="hljs-title">time</span><span class="hljs-params">()</span>
<span class="hljs-title">for</span> <span class="hljs-title">i</span> <span class="hljs-title">in</span> <span class="hljs-title">range</span><span class="hljs-params">(iters)</span>:
    <span class="hljs-title">r</span> = <span class="hljs-title">f</span><span class="hljs-params">()</span>
<span class="hljs-title">t1</span> = <span class="hljs-title">time</span>.<span class="hljs-title">time</span><span class="hljs-params">()</span>
<span class="hljs-title">print</span> <span class="hljs-params">(<span class="hljs-string">'Looping %d times took'</span> % iters, t1 - t0, <span class="hljs-string">'seconds'</span>)</span>
<span class="hljs-title">print</span> <span class="hljs-params">(<span class="hljs-string">'Result is'</span>, r)</span>
<span class="hljs-title">if</span> <span class="hljs-title">numpy</span>.<span class="hljs-title">any</span><span class="hljs-params">([isinstance<span class="hljs-params">(x.op, T.Elemwise)</span> for x in f.maker.fgraph.toposort<span class="hljs-params">()</span>])</span>:
    <span class="hljs-title">print</span> <span class="hljs-params">(<span class="hljs-string">'Used the cpu'</span>)</span>
<span class="hljs-title">else</span>:
    <span class="hljs-title">print</span> <span class="hljs-params">(<span class="hljs-string">'Used the gpu'</span>)</span></span></code>

配置GPU參考資料:http://blog.csdn.net/m624197265/article/details/45700619


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