1. 程式人生 > >Ubuntu16.04 + CUDA8.0 + OpenCL + Nvidia 安裝配置和問題總結

Ubuntu16.04 + CUDA8.0 + OpenCL + Nvidia 安裝配置和問題總結

1. 安裝Nvidia的Driver(推薦配置時在其它移動裝置參考本文章,部分步驟會關閉圖形處理器,進入純命令列介面,如果沒有在別的地方開啟或是記住下面的步驟則無法進行下去)

The input tool was broken, so just use English.

I try to use runfile to install, but failed.  There are some X file problem I could not solve.  So I find other writing and use PPA.ubuntu16.04下NVIDIA GTX965M顯示卡驅動PPA安裝 - CSDN部落格


曾經嘗試使用.run檔案按照以下步驟安裝。提示安裝成功,nvidia-smi也有輸出,但是沒有正在執行中的執行緒,並且nvidia-settings語句提示錯誤。錯誤提示有關X檔案的錯誤,嘗試解決這個問題但是失敗,導致整個圖形介面無法進入。因此改用PPA的方式進行安裝。

.run檔案安裝

到官網選擇適合的版本,下載.run檔案。網上提供了三種方法安裝,參考連結提供在下文。由於CUDA驅動中包括了Nvidia的驅動,但是這種打包的下載有可能引發問題。因此在先安裝單獨Nvidia的驅動。

如果不知道自己GPU的資訊可通過以下語句查詢

$ lspci | grep -i nvidia
  • 禁用nouveau
    開啟配置檔案
    $ sudo gedit /etc/modprobe.d/blacklist.conf
    在最後一行新增
    blacklist vga16fb
    blacklist nouveau
    blacklist rivafb
    blacklist rivatv
    blacklist nvidiafb
    更新核心
    sudo update-initramfs -u

    關機後重啟進入boot,在boot中將security設定為enable,開機之後輸入
    $ lsmod | grep nouveau

    沒有輸出則關閉成功。
  • 安裝驅動,這裡開始會關閉圖形介面。
    禁用X服務
    $ sudo service lightdm stop
    按Ctrl+Alt+F1進入命令列介面(按Ctrl+Alt+F7可退出)
    給run檔案賦予執行許可權
    $ sudo chmod a+x NVIDIA-Linux-x86_64-384.98.run
    安裝,這裡選擇了不安裝OpenGL,否則會發生衝突。
    $ sudo ./NVIDIA-Linux-x86_64-384.98.run –no-opengl-files
    重啟,驗證是否安裝成功:
    $ nvidia-smi
    

    PPA安裝:
    首先也是要禁用nouveau,步驟同上。
    新增Graphic Drivers PPA
    $ sudo add-apt-repository ppa:graphics-drivers/ppa
    $ sudo apt-get update
    查詢合適的版本
    $ ubuntu-drivers devices
    其中一個driver後面加上了recommend字樣,記住該版本,如下圖,推薦版本是390。


    按ctrl+alt+F1進入終端模式,此時會關閉圖形介面。
    $ sudo service lightdm stop
    安裝driver,後面的數字修改為相應的版本號。
    $ sudo apt-get install nvidia-390
    重啟。
    $ sudo reboot
    驗證是否安裝成功
    $ nvidia-smi

    出現以上則安裝成功。

    檢視setting的情況:
    $ nvidia-settings


2. 安裝CUDA8.0

目前CUDA的最新版本是9.1,但是安裝之後編譯失敗,有說法是Ubuntu16.04不能夠支援到這麼高的版本。因此解除安裝了之後安裝了8.0

在官網中選擇需要的版本的對應的系統等下載run檔案:CDUA下載

執行run檔案

$ sudo sh cuda_8.0.61_375.26_linux.run
安裝的時候,會出現比較長的介紹,可以不停的按空格鍵到100%,或者直接按Ctrl+C跳過;
下面的選項中遇到提示是否安裝nvidia ,選擇no,否則前面安裝的驅動會被覆蓋。其他的可以全部同意。

安裝完成後執行sample驗證

進入sample所在路徑,make,在這裡會編譯所有的樣例,時間較長,也可以進入單獨的樣例去make。

../NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release

裡面存放了執行檔案,./filename執行即可。


這裡執行的是deviceQuery,出現以上結果即可。

3. 配置OpenCL

利用gcc執行OpenCL程式碼。需要提前確認gcc可行。

$ gcc -v
在命令列輸入以上語句可檢視gcc版本,若沒有安裝則提示未安裝。安裝網上gcc的安裝配置安裝即可。
$ gcc test.cpp -o test -lOpenCL
輸入上面的語句執行測試程式碼test.cpp,定義輸出檔案為test,呼叫OpenCL庫。

看了很多網路的教程,有一些只簡單說明OpenCL已經被包含在CUDA裡面。但是在本臺電腦上僅安裝成功CUDA之後是無法直接執行OpenCL的,它的庫檔案沒有被連結出現以下兩種錯誤。

  • 找不到-lOpenCL
    OpenCL庫(libOpenCL.so)並不存在於/ usr / lib,即系統庫中,並且OpenCL的庫所在地址沒有被連結。因此我們需要查詢libOpenCL.so檔案所在位置,新增到系統查詢庫的配置檔案中去。
    經查詢,libOpenCL.so檔案被下載到了/usr/local/cuda-8.0/lib64中。
    $ sudo echo '/usr/local/cuda-8.0/lib64/' >> /etc/ld.so.conf
    此處將庫檔案所在路徑新增進去。此時普通使用者可能會引發許可權不夠的問題,可以通過進入root獲得許可權。若是初次進入root需要先設定密碼。
    $ sudo passwd root
    完成之後利用以下語句可登入進root,然後再寫ld.so.conf檔案。
    sudo -s -H
    
    然後執行以下語句更新路徑,使修改生效。

    $ sudo ldconfig
    下一步是修改環境變數。

    $ echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-8.0/lib64/' >> ~/.bashrc
    $ source ~/.bashrc
    第一句是寫入配置檔案,第二句是使之永久生效。
    若修改變數LD_LIBRARY_PATH不奏效,則用同樣的方法修改LIBRARY_PATH。

    以上完成之後應該就不會再出現找不到-lOpenCL的問題了。

  • 找不到CL/cl.h
    錯誤提示:fatal error: CL/cl.h: 沒有那個檔案或目錄
    將OpenCL的include檔案拷貝到/usr/local/include資料夾下即可。
    因為語句是在CL資料夾下的cl.h,因此連帶CL資料夾需要拷貝進去。
    //$ sudo cp -r /home/karin/CL/* /usr/local/include
    $ sudo cp -r /home/karin/CL /usr/local/include
    不配置到系統,利用動態連結的方法也可以連結。
    g++ -l /home/karin/opencl ....
至此OpenCL配置完畢。

參考連結: