Ubuntu 16.04 安裝 NVIDIA CUDA Toolkit 7.5
阿新 • • 發佈:2019-01-02
NVIDIA CUDA Toolkit 7.5 目前官方只適配了 Ubuntu 15.04 和 Ubuntu 14.04 兩個版本的系統。如果你是這兩個系統,可以直接去官方下載安裝檔案安裝。
由於其沒有適配 Ubuntu 16.04 ,這裡我們通過下載官方為 CUDA 7.5 為 Uubuntu 15.04 適配的 runfile(local) 安裝。
顯示卡型號
NVIDIA Corporation GM204 [GeForce GTX 970]
安裝過程
1. 驅動安裝檔案下載
從 Nvidia 官網下載 CUDA 7.5 為為 Uubuntu 15.04 適配的 runfile(local)
cuda_7.5.18_linux.run
2. 準備工作
開啟一個終端(Ctrl+Alt+T),或者直接切換到終端介面(Ctrl+Alt+F1),進行如下操作
安裝可能需要的依賴
$sudo apt-get update
$sudo apt-get install ca-certificates-java default-jre default-jre-headless fonts-dejavu-extra freeglut3 freeglut3-dev java-common libatk-wrapper-java libatk-wrapper-java-jni libdrm-dev libgl1-mesa-dev libglu1-mesa-dev libgnomevfs2-0 libgnomevfs2-common libice-dev libpthread-stubs0-dev libsctp1 libsm-dev libx11-dev libx11-doc libx11-xcb-dev libxau-dev libxcb-dri2-0-dev libxcb-dri3-dev libxcb-glx0-dev libxcb-present-dev libxcb-randr0-dev libxcb-render0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb1-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxi-dev libxmu-dev libxmu-headers libxshmfence-dev libxt-dev libxxf86vm-dev lksctp-tools mesa-common-dev x11proto-core-dev x11proto-damage-dev x11proto-dri2-dev x11proto-fixes-dev x11proto-gl-dev x11proto-input-dev x11proto-kb-dev x11proto-xext-dev x11proto-xf86vidmode-dev xorg-sgml-doctools xtrans-dev libgles2-mesa-dev nvidia-modprobe build-essential
3. 安裝 CUDA
由於我已經安裝過 NVIDIA 最新版顯示卡驅動(安裝 Nvidia 顯示卡驅動),因此安裝 CUDA 過程中不再安裝顯示卡驅動。(之前在16.04中安裝nvidia的驅動,重啟完總是會發生無邊框的情況,每次都解決不了,這次重新找到一個方法,連結一會兒發上來)
$ chmod 755 cuda_7.5.18_linux.run
$ sudo ./cuda_7.5.18_linux.run --override
-------------------------------------------------------------
Do you accept the previously read EULA? (accept/decline/quit): accept
You are attempting to install on an unsupported configuration. Do you wish to continue? ((y)es/(n)o) [ default is no ]: y
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 352.39? ((y)es/(n)o/(q)uit): n
Install the CUDA 7.5 Toolkit? ((y)es/(n)o/(q)uit): y
Enter Toolkit Location [ default is /usr/local/cuda-7.5 ]:
Do you want to install a symbolic link at /usr/local/cuda? ((y)es/(n)o/(q)uit): y
Install the CUDA 7.5 Samples? ((y)es/(n)o/(q)uit): y
Enter CUDA Samples Location [ default is /home/kinghorn ]: /usr/local/cuda-7.5
Installing the CUDA Toolkit in /usr/local/cuda-7.5 ...
Finished copying samples.
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-7.5
Samples: Installed in /usr/local/cuda-7.5
4. 配置 CUDA 環境變數
$sudo vim /etc/profile.d/cuda.sh
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$PATH:/usr/local/cuda/lib64
$ source /etc/profile.d/cuda.sh
5. 修改 CUDA header 檔案使其相容 gcc 5
該版本的 CUDA 無法在 gcc > 4.8 時使用,因此我們需要註釋掉程式碼中的 gcc 版本檢測程式碼
sudo vim /usr/local/cuda/include/host_config.h
line: 115 comment out error
//#error -- unsupported GNU version! gcc versions later than 4.9 are not supported!
6. 編譯 CUDA Samples
將 Samples 程式碼拷貝到一個普通使用者可讀寫的目錄(這裡我們拷到根目錄 ~/ )
$ rsync -av /usr/local/cuda/samples ~/
如果你在安裝 CUDA 的時候安裝了 Driver (此版本的驅動應該是Nvidia 352),這裡可以考慮直接編譯並忽略下面兩步(未驗證過此種方法)
$ cd ~/samples/
$ make
如果你在安裝 CUDA 的時候沒有 Driver ,而是安裝了最新版的 Nvidia 361 顯示卡驅動,你需要修改 samples 程式碼中引用到的庫的路徑,然後再編譯
$ cd ~/samples/
$ grep -r nvidia-352 -l --null . | xargs -0 sed -i 's#nvidia-352#nvidia-361#g'
$ make
編譯的過程中你可能會遇到找不到 nvidia-361 庫的提示,該問題可以通過在 apt 中安裝 第三方 nvidia-361 解決。但是經實驗,安裝完成後雖然可以編譯 samples ,但是執行 samples 時提示沒有顯示卡驅動,於是再重灌官方顯示卡驅動,問題解決。,切換到終端介面(Ctrl+Alt+F1),進行如下操作
$ sudo service lightdm stop
$ sudo apt-get install nvidia-361
$ sudo reboot
切換到終端介面(Ctrl+Alt+F1):
$ sudo service lightdm stop
$ sudo ./NVIDIA-Linux-x86_64-361.45.11.run
NVIDIA-Linux-x86_64-361.45.11.run 檔案的下載方法見Ubuntu 16.04 安裝英偉達(Nvidia)顯示卡驅動
7. gcc 5 的編譯問題
由於 gcc 5 用到的 /usr/include/string.h 相比 gcc 4 中的 string.h 有所改動。在編譯samples的過程中你可能會遇到類似這種錯誤
/usr/include/string.h: In function ‘void* __mempcpy_inline(void*, const void*, size_t)’: /usr/include/string.h:652:42: error: ‘memcpy’ was not declared in this scope return (char *) memcpy (__dest, __src, __n) + __n; ^ /usr/include/string.h: In function ‘void* __mempcpy_inline(void*, const void*, size_t)’: /usr/include/string.h:652:42: error: ‘memcpy’ was not declared in this scope return (char *) memcpy (__dest, __src, __n) + __n;
解決此問題的方法是在對應的 sample 目錄下的 Makefile 中增加編譯選項 -D_FORCE_INLINES 既可解決
例如將 Makefile 中的
NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
替換為
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS).
8. 執行 samples
$ cd ~/samples/bin/x86_64/linux/release
$ ./nbody -benchmark -numbodies=256000
Windowed mode
Simulation data stored in video memory
Single precision floating point simulation
1 Devices used for simulation
GPU Device 0: "GeForce GTX 970" with compute capability 5.2
Compute 5.2 CUDA device: [GeForce GTX 970]
number of bodies = 256000
256000 bodies, total time for 10 iterations: 7207.025 ms
= 90.934 billion interactions per second
= 1818.670 single-precision GFLOP/s at 20 flops per interaction
參考
[1]https://www.pugetsystems.com/labs/articles/NVIDIA-CUDA-with-Ubuntu-16-04-beta-on-a-laptop-if-you-just-cannot-wait-775/
由於其沒有適配 Ubuntu 16.04 ,這裡我們通過下載官方為 CUDA 7.5 為 Uubuntu 15.04 適配的 runfile(local) 安裝。
顯示卡型號
NVIDIA Corporation GM204 [GeForce GTX 970]
安裝過程
1. 驅動安裝檔案下載
從 Nvidia 官網下載 CUDA 7.5 為為 Uubuntu 15.04 適配的 runfile(local)
cuda_7.5.18_linux.run
2. 準備工作
開啟一個終端(Ctrl+Alt+T),或者直接切換到終端介面(Ctrl+Alt+F1),進行如下操作
安裝可能需要的依賴
$sudo apt-get update
$sudo apt-get install ca-certificates-java default-jre default-jre-headless fonts-dejavu-extra freeglut3 freeglut3-dev java-common libatk-wrapper-java libatk-wrapper-java-jni libdrm-dev libgl1-mesa-dev libglu1-mesa-dev libgnomevfs2-0 libgnomevfs2-common libice-dev libpthread-stubs0-dev libsctp1 libsm-dev libx11-dev libx11-doc libx11-xcb-dev libxau-dev libxcb-dri2-0-dev libxcb-dri3-dev libxcb-glx0-dev libxcb-present-dev libxcb-randr0-dev libxcb-render0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb1-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxi-dev libxmu-dev libxmu-headers libxshmfence-dev libxt-dev libxxf86vm-dev lksctp-tools mesa-common-dev x11proto-core-dev x11proto-damage-dev x11proto-dri2-dev x11proto-fixes-dev x11proto-gl-dev x11proto-input-dev x11proto-kb-dev x11proto-xext-dev x11proto-xf86vidmode-dev xorg-sgml-doctools xtrans-dev libgles2-mesa-dev nvidia-modprobe build-essential
3. 安裝 CUDA
由於我已經安裝過 NVIDIA 最新版顯示卡驅動(安裝 Nvidia 顯示卡驅動),因此安裝 CUDA 過程中不再安裝顯示卡驅動。(之前在16.04中安裝nvidia的驅動,重啟完總是會發生無邊框的情況,每次都解決不了,這次重新找到一個方法,連結一會兒發上來)
$ chmod 755 cuda_7.5.18_linux.run
$ sudo ./cuda_7.5.18_linux.run --override
-------------------------------------------------------------
Do you accept the previously read EULA? (accept/decline/quit): accept
You are attempting to install on an unsupported configuration. Do you wish to continue? ((y)es/(n)o) [ default is no ]: y
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 352.39? ((y)es/(n)o/(q)uit): n
Install the CUDA 7.5 Toolkit? ((y)es/(n)o/(q)uit): y
Enter Toolkit Location [ default is /usr/local/cuda-7.5 ]:
Do you want to install a symbolic link at /usr/local/cuda? ((y)es/(n)o/(q)uit): y
Install the CUDA 7.5 Samples? ((y)es/(n)o/(q)uit): y
Enter CUDA Samples Location [ default is /home/kinghorn ]: /usr/local/cuda-7.5
Installing the CUDA Toolkit in /usr/local/cuda-7.5 ...
Finished copying samples.
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-7.5
Samples: Installed in /usr/local/cuda-7.5
4. 配置 CUDA 環境變數
$sudo vim /etc/profile.d/cuda.sh
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$PATH:/usr/local/cuda/lib64
$ source /etc/profile.d/cuda.sh
5. 修改 CUDA header 檔案使其相容 gcc 5
該版本的 CUDA 無法在 gcc > 4.8 時使用,因此我們需要註釋掉程式碼中的 gcc 版本檢測程式碼
sudo vim /usr/local/cuda/include/host_config.h
line: 115 comment out error
//#error -- unsupported GNU version! gcc versions later than 4.9 are not supported!
6. 編譯 CUDA Samples
將 Samples 程式碼拷貝到一個普通使用者可讀寫的目錄(這裡我們拷到根目錄 ~/ )
$ rsync -av /usr/local/cuda/samples ~/
如果你在安裝 CUDA 的時候安裝了 Driver (此版本的驅動應該是Nvidia 352),這裡可以考慮直接編譯並忽略下面兩步(未驗證過此種方法)
$ cd ~/samples/
$ make
如果你在安裝 CUDA 的時候沒有 Driver ,而是安裝了最新版的 Nvidia 361 顯示卡驅動,你需要修改 samples 程式碼中引用到的庫的路徑,然後再編譯
$ cd ~/samples/
$ grep -r nvidia-352 -l --null . | xargs -0 sed -i 's#nvidia-352#nvidia-361#g'
$ make
編譯的過程中你可能會遇到找不到 nvidia-361 庫的提示,該問題可以通過在 apt 中安裝 第三方 nvidia-361 解決。但是經實驗,安裝完成後雖然可以編譯 samples ,但是執行 samples 時提示沒有顯示卡驅動,於是再重灌官方顯示卡驅動,問題解決。,切換到終端介面(Ctrl+Alt+F1),進行如下操作
$ sudo service lightdm stop
$ sudo apt-get install nvidia-361
$ sudo reboot
切換到終端介面(Ctrl+Alt+F1):
$ sudo service lightdm stop
$ sudo ./NVIDIA-Linux-x86_64-361.45.11.run
NVIDIA-Linux-x86_64-361.45.11.run 檔案的下載方法見Ubuntu 16.04 安裝英偉達(Nvidia)顯示卡驅動
7. gcc 5 的編譯問題
由於 gcc 5 用到的 /usr/include/string.h 相比 gcc 4 中的 string.h 有所改動。在編譯samples的過程中你可能會遇到類似這種錯誤
/usr/include/string.h: In function ‘void* __mempcpy_inline(void*, const void*, size_t)’: /usr/include/string.h:652:42: error: ‘memcpy’ was not declared in this scope return (char *) memcpy (__dest, __src, __n) + __n; ^ /usr/include/string.h: In function ‘void* __mempcpy_inline(void*, const void*, size_t)’: /usr/include/string.h:652:42: error: ‘memcpy’ was not declared in this scope return (char *) memcpy (__dest, __src, __n) + __n;
解決此問題的方法是在對應的 sample 目錄下的 Makefile 中增加編譯選項 -D_FORCE_INLINES 既可解決
例如將 Makefile 中的
NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
替換為
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS).
8. 執行 samples
$ cd ~/samples/bin/x86_64/linux/release
$ ./nbody -benchmark -numbodies=256000
Windowed mode
Simulation data stored in video memory
Single precision floating point simulation
1 Devices used for simulation
GPU Device 0: "GeForce GTX 970" with compute capability 5.2
Compute 5.2 CUDA device: [GeForce GTX 970]
number of bodies = 256000
256000 bodies, total time for 10 iterations: 7207.025 ms
= 90.934 billion interactions per second
= 1818.670 single-precision GFLOP/s at 20 flops per interaction
參考
[1]https://www.pugetsystems.com/labs/articles/NVIDIA-CUDA-with-Ubuntu-16-04-beta-on-a-laptop-if-you-just-cannot-wait-775/
[2]https://github.com/BVLC/caffe/issues/4046