cuda的安裝與配置


簡介

先安裝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

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM