1. 程式人生 > >CUDA 8.0 + VS2013 + win7 x64開發環境搭建

CUDA 8.0 + VS2013 + win7 x64開發環境搭建

本文參考了網路上其它文件,具體不再一個個致謝,前輩們都是強大的指明燈!根據自己的具體情況進行了修改或勘誤,血淚之作,僅供菜鳥借鑑使用,注意,菜鳥,高手就不要瞎BB了。
(明明很簡單的事情,但是作為新手,這玩意居然折騰了倫家好幾天,有些不開心)

  1. 安裝VS2013。
    倫家的VS2013為中文版。
    (實驗室那個盜版的VS2013不知道哪裡缺檔案,並不能用;VS2015的社群版本不支援cross,也就算了,裝了VS2015的專業版,不知道哪裡出問題,居然連介面都進不去,有點憤怒的feel…)

  2. 安裝cuda_8.0。
    官網下載直接next安裝,需要記住安裝的路徑,不講。以前的版本分sdk、doc、toolkit三個安裝部分,新的變成了Samples、doc、Development,其實木有太大區別,Samples=sdk。
    (然而作為菜鳥的我,第一次安裝的時候,根據網上歷史版本的教程居然不知道哪個是哪個,需要注意的是,如果安裝後需要解除安裝一定要解除安裝乾淨,登錄檔要刪了,不然下次一定提示你library目錄安裝不了)

  3. 設定環境變數:
    安裝完畢後,在計算機上點右鍵,開啟屬性->高階系統設定->環境變數,可以看到系統中多了CUDA_PATH和CUDA_PATH_V8_0兩個環境變數,接下來,還要在系統中新增以下幾個環境變數:
      CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0
      CUDA_LIB_PATH = %CUDA_PATH%\lib\x64
      CUDA_BIN_PATH = %CUDA_PATH%\bin
      CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64
    CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64
    倫家的安裝路徑是預設的,所以新增的路徑分別是下面這樣的:
    CUDA_PATH
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0
    CUDA_PATH_V8_0
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0
    CUDA_SDK_PATH
    C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0
    CUDA_LIB_PATH
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64
    CUDA_BIN_PATH
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin
    CUDA_SDK_BIN_PATH
    C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\bin\win64
    CUDA_SDK_LIB_PATH
    C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\common\lib\x64
    然後,在系統變數 PATH 的末尾新增:
     ;%CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_LIB_PATH%;%CUDA_SDK_BIN_PATH%;
    ;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\common\lib\x64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\bin\win64;
    重新啟動計算機。
    至此,cuda的安裝就搞定了。

  4. 監測cuda安裝成功與否:
    這個步驟用到兩個東西,都是cuda為我們準備好的: deviceQuery.exe 和 bandwithTest.exe
    首先啟動cmd DOS命令視窗
    預設進來的是c:\users\Admistrator>路徑,輸入 cd .. 兩次,來到c:目錄下
    輸入dir 找到安裝的cuda資料夾
    這裡寫圖片描述
    直接執行bandwidthTest.exe
    該檔案的路徑:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\extras\demo_suite
    這裡寫圖片描述
    再執行deviceQuery.exe
    該檔案的路徑:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\extras\demo_suite
    這裡寫圖片描述


    這裡寫圖片描述
    Rsult=PASS及說明,都通過了。如果Rsult=Fail 那不好意思,重新安裝吧。

  5. 配置VS 2013
      5.1 啟動VS2013
    5.2 新建一個win32的控制檯工程,空的。
    這裡寫圖片描述
    倫家的儲存路徑:c:\users\lvfeiya\documents\visual studio 2013\Projects
    這裡寫圖片描述

5.3 右鍵原始檔資料夾->新建項->選擇cuda c/c++- Header>新建一個以.cu結尾的檔案
這裡寫圖片描述
儲存路徑:
c:\Users\lvfeiya\documents\visual studio 2013\Projects\sevenCuda\sevenCuda\
  5.4 右鍵sevenCuda-》生成依賴項-》生成自定義-》選擇cuda生成
這裡寫圖片描述
  5.5 右鍵test.cu-》屬性-》選擇cuda c/c++編譯器
這裡寫圖片描述
5.6 右鍵工程-》屬性-》連結器-》常規-》附加庫目錄-》新增目錄 $(CUDA_PATH_V5_5)\lib\$(Platform);

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib(Platform)
$(CUDA_PATH_V8_0)\lib\$(Platform);

(倫家也不知道究竟是上面的還是下面的格式,,,反正倫家新增的是下面的)
這裡寫圖片描述
  5.7 在連結器-》輸入中新增 cudart.lib
這裡寫圖片描述
  5.8 在工具-》選項-》文字編輯器-》副檔名-》新增cu \cuh兩個副檔名
這個設定是讓VS2010編輯.cu檔案時,把.cu檔案裡的C/C++語法高亮。在VS2013的選單 依次點選:Tools->Options…->Text Editor->File Extension,新增.cu和.cuh,使之採用C++編輯器。
這裡寫圖片描述
至此,編譯環境的相關搭建就完成了。

  1. 安裝Anaconda
    Anaconda包含了Theano所需的各種Python庫,用它來安裝Python環境的確非常方便,安裝的時候勾選把Anaconda加到環境變數中。Anaconda的位數要跟你的cuda版本一樣,選擇的都是64 bit。
    安裝目錄我用的E:\Anapy2。
    安裝完檢查一下,開啟cmd命令列:
    這裡寫圖片描述
    裝完以後彆著急下一步:
    驗證BLAS是否安裝成功
    由於numpy是依賴BLAS的,如果BLAS沒有安裝成功,雖然numpy亦可以安裝,但是無法使用BLAS的加速。驗證numpy是否成功依賴BLAS編譯:
    python

    import numpy
    id(numpy.dot) == id(numpy.core.multiarray.dot)
    False
    結果為False表示成功使用BLAS加速,如果是Ture則表示用的是python的實現,沒有加速。 狀況不解決的話,之後theano庫跑一些例子會爆類似cannot find -lf77blas-lcblas-latlas的錯誤.簡單處理:重灌
    (倫家這個居然怎麼弄都是false,~~(>_<)~~,教程裡都是騙人的,倫家試了,重灌無效)
    也可以考慮MKL(收費的)和OpenBLAS。
    這裡給出兩個庫的一些安裝方面的部落格和討論帖:
    http://ijiaer.com/python-with-mkl-hpc/(mkl)
    https://www.kaggle.com/c/otto-group-product-classification-challenge/forums/t/13973/a-few-tips-to-install-theano-on-windows-64-bits/93135(OpenBLAS)

  2. 安裝MingW
    貌似Anaconda-2.之前的版本是內建了MinGW環境的,之後就不帶MinGW了。(檢視C:\Anaconda下有無MinGW目錄)
    安裝方法:

  3. 開啟CMD(注意是windows命令提示符,並不是進入到python環境下);
  4. 輸入conda install mingw libpython,然後回車,會出現安裝進度,稍等片刻即可安裝完畢。此時就有C:\Anaconda\MinGw目錄了。 (網速一定要好,網速不好會出現一串的false)
    可在windows命令列中輸入g++ -v來檢視是否安裝成功:
    這裡寫圖片描述
    環境配置
    1). 編輯使用者變數中的path變數,在後邊追加C:\Anaconda;C:\Anaconda\Scripts; 不要漏掉分號,此處需要根據自己的安裝目錄填寫。
    倫家的路徑:E:\Anapy2; E:\Anapy2\Scripts
    2). 在你的系統環境變數裡面的path中加入 C:\Anaconda\MinGW\bin;C:\Anaconda\MinGW\x86_64-w64-mingw32\lib即可。
    E:\Anapy2\MinGW\bin; E:\Anapy2\MinGW\x86_64-w64-mingw32\lib
    在系統變數中新建變數PYTHONPATH,變數值為C:\Anaconda\Lib\site-packages\theano;
    PYTHONPATH
    E:\Anapy2\Lib\site-packages\theano;
    此處就是指明安裝的theano的目錄是哪,theano會在後面安裝,正常安裝的預設路徑就是這個。
    3). 開啟cmd,會看到窗口裡邊有個路徑C:\Users\FYB>,即home目錄,在此目錄下新建 .theanorc.txt 檔案(作為theano的配置檔案,注意名字中的第一個“.”,如果已經存在,則直接修改該檔案),設定如下內容:
    所謂cmd的home目錄:開啟cmd時,在>前面的預設路徑:
    這裡寫圖片描述
    [global]
    openmp=False
    [blas]
    ldflags =
    [gcc]
    cxxflags = -ID:\Anaconda\MinGW\include
    cxxflags = -IE:\Anapy2\MinGW
    一定要是你安裝的Anaconda的路徑,一定不要弄錯,否則找不到MinGw。
    重啟電腦!
  5. 測試theano是否安裝成功
    測試方法1 :
    import theano
    print theano.config.blas.ldflags
    這裡寫圖片描述
    沒有出錯(沒有返回值)則說明已經配置成功。
    其實單單是import theano不報錯就已經謝天謝地了。
    測試方法2
    用下面的指令測試(測試時會有其他錯誤提示或是warnings,但基本上還能執行的話則說明theano沒問題,錯誤提示可能是有些東西還沒安裝好):
    import theano
    theano.test()
    執行:
    這裡寫圖片描述
    測試時示沒有nose-parameterized這個模組,安裝方法:
    pip install nose-parameterized
    注意:測試2必須在cpu下執行,如果配置了theano的device = gpu,則測試2就不能運行了。

  6. 使用GPU
    上面的theano配置只是完成了上半部分,這個時候還不能進行gpu加速。如果使用GPU則需要繼續以下步驟:
    Theano檔案配置(GPU)——編輯Theano的配置檔案.theanorc.txt , 新增如下內容:
    [global]
    openmp = False
    device = gpu
    floatX = float32
    allow_input_downcast = True
    base_compiledir = path_to_a_directory+without_such_characters
    [blas]
    ldflags =
    [gcc]
    cxxflags=-IE:\Anapy2\MinGW
    [nvcc]
    fastmath = True
    flags = -LE:\Anapy2\libs
    compiler_bindir = H:\VS2013\VC\bin
    [lib]
    cnmem=.75
    在Python中執行”import theano.sandbox.cuda”. 將會編譯第一個Cuda檔案, 應當沒有錯誤產生。

  7. 測試是否使用GPU
    測試方法1:
    import theano
    這裡寫圖片描述
    講道理,出現紅框就說明已經配置好了!
    如果是CNMeM is disabled,就是因為你沒有在Theano的配置檔案.theanorc.txt裡面新增
    [lib]
    cnmem=.75
    如果就cuDNN不能用,就需要去官網下載cuDNN,需要先註冊,下載以後把解壓後的三個子檔案分別新增到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0下面相應的bin、lib、include檔案裡。(很奇怪的是在沒有新增之前是沒有出現籃框裡面的bug和警告的,新增以後就出現警告了,而且無解,前輩們都說這個不影響執行,然後寶寶每次看到這些都感覺心裡苦極了)
    編譯目標GPU指令集的命令選項
    -arch: 指定nvcc編譯目標GPU的型號,可以為“real” GPU,也可以為“virtual” PTX架構。這個選項指定了nvcc編譯到PTX階段的目標架構,而-code選項指定了nvcc最後階段生成的執行時程式碼的目標架構。現階段支援的架構型別有:virtual 架構 compute_10, compute_11, compute_12, compute_13和實現這些虛架構的real GPU sm_10, sm_11, sm_12, sm_13.
    測試方法2:
    啟動Spyder,下面的Theano GPU加速測試案例程式碼並執行
    • #!/usr/bin/env python
    • # -- coding: utf-8 --

    • “””
    • 功能:測試是否使用GPU
    • 時間:2016年6月10日 11:20:10
    • “””

    • from theano import function, config, shared, sandbox
    • import theano.tensor as T
    • import numpy
    • import time

    • vlen = 10*30*768 # 10 x cores x threads per core
    • iters = 1000

    • rng = numpy.random.RandomState(22)
    • x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
    • f = function([], T.exp(x))
    • print(f.maker.fgraph.toposort())
    • t0 = time.time()
    • for i in range(iters):
    • r = f()
    • t1 = time.time()
    • print(‘Looping %d times took’ % iters, t1 - t0, ‘seconds’)
    • print(‘Result is’, r)

    • if numpy.any([isinstance(x.op, T.Elemwise) for x in f.maker.fgraph.toposort()]):
    • print(‘Used the cpu’)
    • else:
    • print(‘Used the gpu’)
    如果出現下圖所示的執行結果,其中有一條“Used the gpu”資訊輸出,表明Theano GPU加速測試成功。
    這裡寫圖片描述
    有木有發現我這裡記憶體很高,關閉spyder,再從電腦左下角的程式那裡開啟,竟然載入不動,不是kernal failed就是進不去介面,不知道是什麼么蛾子,果斷cmd命令列解除安裝重灌,然而並木有鳥用!但是可以從Anaconda的安裝檔案裡找到spyder.exe檔案(路徑是:E:\Anapy2\Scripts),傳送快捷方式到桌面再開啟,搞定!倫家估計是因為前面重灌了好幾次Anaconda,可能登錄檔啥子的木有刪除完全。
    終於剩下兩個不影響使用的bug:
    1, 不能使用blas加速;
    2, Python執行的時候會提示DEBUG: nvcc STDOUT nvcc warning.

Bingo !!!