簡介
先安裝nvidia驅動,然后安裝cuda
- 查看顯卡型號
lspci | grep -i nvidia
- 查看NVIDIA驅動版本
sudo dpkg --list | grep nvidia-*
N卡驅動安裝
有以下三種nvidia驅動安裝方式.
- 集成驅動管理和安裝
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
通過System Settings->SoftWare & Updates->Additional Drivers 切換安裝,推薦安裝高版本的驅動, 例如410
- 使用apt-get install安裝
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-410 nvidia-settings nvidia-prime
- 官方驅動編譯安裝(不太推薦)
注: 驅動安裝后要重啟電腦
sudo reboot
- 驗證安裝是否成功
查看驅動版本和顯卡屬性:
nvidia-smi
- 查看顯卡占用情況
在終端中輸入
watch -n 10 nvidia-smi
注:每隔10秒刷新一次終端
- 刪除nvidia驅動
sudo apt-get --purge remove nvidia-*
- 注意事項
有的電腦需要在4.4.168的內核上安裝驅動,否則重啟后循環進入登錄界面。
cuda安裝
CUDA Toolkit
推薦安裝cuda9.0或cuda10.0, 首先安裝cuda,然后安裝相應的補丁。
選擇Linux -> x86_64 -> Ubuntu -> 16.04 -> runfile(local) 或者deb(local)
- runfile安裝
sudo chmod +x cuda_10.0.130_410.48_linux.run
sudo ./cuda_10.0.130_410.48_linux.run
cat /usr/local/cuda/version.txt
注: EULA文檔閱讀, 點擊space
鍵會一頁一頁翻過,那么閱讀完文檔僅需幾秒鍾即可。
注:該方式中會提示是否安裝相應的nvidia驅動,選擇no;
注:該方式中會提示是否建立到/usr/local/cuda的軟鏈接, 選擇yes;
注: 該方式中會提示是否安裝samples, 選擇no;
注: 推薦使用.runfile方式安裝.
- deb包安裝
sudo dpkg -i cuda-repo-ubuntu1604-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pub
sudo apt-get update# 參考
- [Install CUDA 10.0, cuDNN 7.3 and build TensorFlow (GPU) from source on Ubuntu 18.04](https://medium.com/@vitali.usau/install-cuda-10-0-cudnn-7-3-and-build-tensorflow-gpu-from-source-on-ubuntu-18-04-3daf720b83fe)
- [Ubuntu 16.04配置TensorFlow-GPU 1.6.0](https://wenku.baidu.com/view/33e1ccb1ed3a87c24028915f804d2b160a4e8670.html)
- [Ubuntu下實時查看Nvidia顯卡顯存占用情況](https://blog.csdn.net/breeze5428/article/details/78928596)
sudo apt-get install cuda
cat /usr/local/cuda/version.txt
注: cuda9安裝后,還有四個補丁需要安裝.
- 配置環境變量
打開個人配置文件:
sudo gedit ~/.zshrc
在文件尾部輸入以下命令:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
更新變量環境
source ~/.zshrc
注: 前面已經建立了cuda版本和cuda的軟鏈接.
- 切換到cuda版本
對於安裝了多個版本的cuda, 通過改變軟連接形式來調用cuda的版本
sudo rm -rf /usr/local/cuda ## 這個必須
sudo ln -s /usr/local/cuda-9.0 /usr/local/cuda ## 使用cuda 9.0
sudo ln -s /usr/local/cuda-10.0 /usr/local/cuda ## 使用cuda 10.0
- 查看當前cuda版本
nvcc -V
- 卸載cuda
cd /usr/local/cuda/bin
sudo ./uninstall_cuda_XX.pl
sudo rm -rf /usr/local/cuda-XX/
- 安裝后測試
使用cuda里面的samples來測試是否安裝成功
cd /usr/local/cuda-10.0/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
和
cd usr/local/cuda-10.0/samples/1_Utilities/bandwidthTest
sudo make
./bandwidthYest
- 如果返回結果是這樣的:
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.1, CUDA Runtime Version = 10.0, NumDevs = 1
Result = PASS
其中cuda driver version
是指安裝的nvidia驅動對應的版本, 我安裝的是nvidia-418, 對應的cuda版本問10.1. cuda runtime version
是指安裝的cuda的版本.
- 如果返回的結果是:
CUDADeviceQuery(RuntimeAPI)version(CUDARTstaticlinking)
cudaGetDeviceCount returned 35
-> CUDA driver version is insufficient for CUDA runtime version
Result = FAIL
發生這種情況可能是你的nvidia driver的版本和cuda版本對不上.
有教程提到將Ubuntu中intel的集成顯卡切換到nvidia顯卡,但我試過沒用啊!在終端輸入:
nvidia-settings
在左側欄找到PRIME Profiles
, 進入切換即可。如果沒有這一欄,則:
prime-select nvidia
- 如果返回的結果是這樣的:
cudaGetDeviceCount returned 30
-> unknown error
[deviceQuery] test results...
FAILED
目測需要重新安裝。
其他安裝
cudnn安裝
NVIDIA cuDNN is a GPU-accelerated library of primitives for deep neural networks.
下載與cuda對應的deb包安裝。
sudo dpkg -i libcudXX.deb
注: cudnn的安裝順序是: libcudnn->libcudnn-dev->libcudnn-doc
- 卸載cudnn
sudo apt-get --purge remove libcudnn*
注: cudnn的卸載順序和安裝順序一樣.
tensorrt安裝
sudo cp libnvinfer.so.5 /usr/lib
sudo cp libnvonnxparser.so.0 /usr/lib
常見問題
- CUDA Error: no kernel image is available for execution on the device
更改cmakelist.txt中的CUDA_ARCH
值,將該值改為電腦顯卡所對應的值:
find_package(CUDA)
if(CMAKE_CROSSCOMPILING)
if(NOT CUDA_ARCH)
message(FATAL_ERROR "Please define the CUDA_ARCH CMake variable")
endif()
else()
if (NOT DEFINED CUDA_CAPABILITY_VERSION_CHECKER)
set(CUDA_CAPABILITY_VERSION_CHECKER
"${CATKIN_DEVEL_PREFIX}/lib/capability_version_checker")
endif ()
execute_process(COMMAND ${CUDA_CAPABILITY_VERSION_CHECKER}
OUTPUT_VARIABLE CUDA_CAPABILITY_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
if ("${CUDA_CAPABILITY_VERSION}" MATCHES "^[1-9][0-9]+$")
set(CUDA_ARCH "sm_${CUDA_CAPABILITY_VERSION}")
else ()
set(CUDA_ARCH "sm_52") # 改這里
endif ()
endif()
由於我的顯卡是GeForce 700,所有我需要將該值改為sm_30
附錄
- cuda與nvidia驅動對應
- nvidia與arch型號對照
Nvidia arch 型號對照
1392987390812 2019-05-31 16:06:09 5106 收藏 12
版權
-arch=sm_xx
Fermi (CUDA 3.2 until CUDA 8) (deprecated from CUDA 9):
SM20 or SM_20, compute_30 – Older cards such as GeForce 400, 500, 600, GT-630
Kepler (CUDA 5 and later):
SM30 or SM_30, compute_30 – Kepler architecture (generic – Tesla K40/K80, GeForce 700, GT-730)
Adds support for unified memory programming
SM35 or SM_35, compute_35 – More specific Tesla K40
Adds support for dynamic parallelism. Shows no real benefit over SM30 in my experience.
SM37 or SM_37, compute_37 – More specific Tesla K80
Adds a few more registers. Shows no real benefit over SM30 in my experience
Maxwell (CUDA 6 and later):
SM50 or SM_50, compute_50 – Tesla/Quadro M series
SM52 or SM_52, compute_52 – Quadro M6000 , GeForce 900, GTX-970, GTX-980, GTX Titan X
SM53 or SM_53, compute_53 – Tegra (Jetson) TX1 / Tegra X1
Pascal (CUDA 8 and later)
SM60 or SM_60, compute_60 – Quadro GP100, Tesla P100, DGX-1 (Generic Pascal)
SM61 or SM_61, compute_61 – GTX 1080, GTX 1070, GTX 1060, GTX 1050, GTX 1030, Titan Xp, Tesla P40, Tesla P4, Discrete GPU on the NVIDIA Drive PX2
SM62 or SM_62, compute_62 – Integrated GPU on the NVIDIA Drive PX2, Tegra (Jetson) TX2
Volta (CUDA 9 and later)
SM70 or SM_70, compute_70 – DGX-1 with Volta, Tesla V100, GTX 1180 (GV104), Titan V, Quadro GV100
SM72 or SM_72, compute_72 – Jetson AGX Xavier
Turing (CUDA 10 and later)
SM75 or SM_75, compute_75 – GTX Turing – GTX 1660 Ti, RTX 2060, RTX 2070, RTX 2080, Titan RTX, Quadro RTX 4000, Quadro RTX 5000, Quadro RTX 6000, Quadro RTX 8000
參考
- Install CUDA 10.0, cuDNN 7.3 and build TensorFlow (GPU) from source on Ubuntu 18.04
- Ubuntu 16.04配置TensorFlow-GPU 1.6.0
- Ubuntu下實時查看Nvidia顯卡顯存占用情況
- 查看n卡驅動和cuda版本的對應關系:NVIDIA CUDA Toolkit Release Notes
- nvidia arch型號對照