Ubuntu16.04下安裝多版本cuda和cudnn
原文 https://blog.csdn.net/tunhuzhuang1836/article/details/79545625
前言
因為之前針對Pytorch,caffe,torch等,裝了cuda8.0和對應cudnn5.1,但是最近在裝MxNet的時候,發現官網上能下載到的MxNet版本僅支持cuda9.0和對應cudnn7.0.5,所以無奈不想卸載cuda8.0只能在電腦上安裝多個版本的cuda和對應cudnn。
安裝cuda
好了進入正題,首先安裝cuda 需要去nvidia官網注冊一個賬號登錄下載。這里給一下歷史版本的cuda鏈接(現在官網好像進去默認下載最新版本)。這里我們舉例下載cuda9.0:(當你電腦上只有一個cuda時候下載哪種類型無所謂,如果已存在一個或以上時候需要選擇runfile安裝)
安裝按照官方指引就好
# if deb
sudo dpkg -i cuda-repo-ubuntu1604-9-0-local-rc_9.0.103-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
sudo dpkg -i cuda-repo-ubuntu1604-9-0-local-rc_9.0.103-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
# if runfile
sudo chmod +x cuda_9.0.176_384.81_linux.run
./cuda_9.0.176_384.81_linux.run12345678
sudo chmod +x cuda_9.0.176_384.81_linux.run
./cuda_9.0.176_384.81_linux.run12345678
這里我給了deb版本和runfile版本cuda安裝。 如果你是第一遍裝cuda,按官方教程什么版本都可以; 如果是電腦上已存在cuda,則安裝需要runfile,且有幾個需要注意的地方:(這里詳情可參考Maple2014博客)
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 346.46? ((y)es/(n)o/(q)uit): n
Do you want to install the OpenGL libraries? ((y)es/(n)o/(q)uit) [ default is yes ]: n
Install the CUDA 9.0 Toolkit? ((y)es/(n)o/(q)uit): y
Enter Toolkit Location [ default is /usr/local/cuda-9.0 ]:
/usr/local/cuda-9.0 is not writable.
Do you wish to run the installation with ‘sudo’? ((y)es/(n)o): y
Please enter your password:
Do you want to install a symbolic link at /usr/local/cuda? ((y)es/(n)o/(q)uit): n
Install the CUDA 9.0 Samples? ((y)es/(n)o/(q)uit): y
Enter CUDA Samples Location [ default is /home/xxx ]:
Installing the CUDA Toolkit in /usr/local/cuda-9.0 …
Installing the CUDA Samples in /home/xxx …
Copying samples to /home/xxx/NVIDIA_CUDA-9.0_Samples now…
Finished copying samples.12345678910111213141516
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 346.46? ((y)es/(n)o/(q)uit): n
Do you want to install the OpenGL libraries? ((y)es/(n)o/(q)uit) [ default is yes ]: n
Install the CUDA 9.0 Toolkit? ((y)es/(n)o/(q)uit): y
Enter Toolkit Location [ default is /usr/local/cuda-9.0 ]:
/usr/local/cuda-9.0 is not writable.
Do you wish to run the installation with ‘sudo’? ((y)es/(n)o): y
Please enter your password:
Do you want to install a symbolic link at /usr/local/cuda? ((y)es/(n)o/(q)uit): n
Install the CUDA 9.0 Samples? ((y)es/(n)o/(q)uit): y
Enter CUDA Samples Location [ default is /home/xxx ]:
Installing the CUDA Toolkit in /usr/local/cuda-9.0 …
Installing the CUDA Samples in /home/xxx …
Copying samples to /home/xxx/NVIDIA_CUDA-9.0_Samples now…
Finished copying samples.12345678910111213141516
安裝好后我們可以去/usr/local/下看到安裝好的cuda-9.0文件夾:
安裝cudnn
其次我們需要安裝cudnn,同理去nvidia官網下載cudnn。這里我們安裝的是cudnn7.0.5。
注意,我們這里選擇cuda9.0下cuDNN v7.0.5 Library for Linux。下載好后直接命令行解壓然后復制lib64和include文件夾到usr/local/cuda-9.0,命令如下:
# Installing from a Tar File
sudo cp cuda/include/cudnn.h /usr/local/cuda-9.0/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64
sudo chmod a+r /usr/local/cuda-9.0/include/cudnn.h /usr/local/cuda-9.0/lib64/libcudnn*1234
sudo cp cuda/include/cudnn.h /usr/local/cuda-9.0/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64
sudo chmod a+r /usr/local/cuda-9.0/include/cudnn.h /usr/local/cuda-9.0/lib64/libcudnn*1234
cuda版本的自由切換
以上講的就是多版本cuda的安裝。最后,我們要做的就是cuda版本的自由切換。命令行sudo gedit ~/.bashrc打開.bashrc,也許你已經裝過cuda8.0,則.bashrc下應該有如下行:(詳情請參考mumoDM博客)
export PATH="$PATH:/usr/local/cuda-8.0/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-8.0/lib64/"
export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/cuda-8.0/lib64" 123
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-8.0/lib64/"
export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/cuda-8.0/lib64" 123
我們將所有的cuda-8.0更改為cuda文件夾:
export PATH="$PATH:/usr/local/cuda/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64/"
export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/cuda/lib64" 123
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64/"
export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/cuda/lib64" 123
到這一步我們已經設置好了鏈接庫,最后我們只需要在終端敲入:
sudo rm -rf /usr/local/cuda #刪除之前創建的軟鏈接
sudo ln -s /usr/local/cuda-8.0 /usr/local/cuda #創建新 cuda 的軟鏈接12
sudo ln -s /usr/local/cuda-8.0 /usr/local/cuda #創建新 cuda 的軟鏈接12
這里我是從cuda8.0切換到9.0 。同理反一下就可以切換回8.0 。所有完事后,可以用命令來查看cuda是否切換完成:
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.17612345
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.17612345
總結
當然本人在安裝過程中還是踩過好多坑的,舉幾個栗子說明。
(1) nvcc可能默認是你以前deb安裝時候其他版本的,所以你會發現就算你操作按上面一步步來,nvcc –version結果還是沒變。所以我們可以找到nvcc位置,然后創建usr/local/cuda/nvcc軟鏈接到原先nvcc位置,應該是usr/bin/nvcc,操作為:
which nvcc # 找到nvcc位置,假定在/usr/bin/nvcc且是以前版本8.0
sudo ln -s /usr/local/cuda/bin/nvcc /usr/bin/nvcc # 創建軟鏈接鏈接到當前cuda的nvcc
nvcc --version # 顯示當前cuda版本123
sudo ln -s /usr/local/cuda/bin/nvcc /usr/bin/nvcc # 創建軟鏈接鏈接到當前cuda的nvcc
nvcc --version # 顯示當前cuda版本123
(2) 也許你切換到8.0跑Pytorch的時候發現報錯了:
Traceback (most recent call last):
File "train.py", line 318, in <module>
main()
File "train.py", line 182, in main
out = model(inputs)
File "/usr/local/lib/python2.7/dist-packages/torch/nn/modules/module.py", line 206, in __call__
result = self.forward(*input, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/torch/nn/parallel/data_parallel.py", line 61, in forward
outputs = self.parallel_apply(replicas, inputs, kwargs)
File "/usr/local/lib/python2.7/dist-packages/torch/nn/parallel/data_parallel.py", line 71, in parallel_apply
return parallel_apply(replicas, inputs, kwargs)
File "/usr/local/lib/python2.7/dist-packages/torch/nn/parallel/parallel_apply.py", line 45, in parallel_apply
raise output
RuntimeError: CUDNN_STATUS_INTERNAL_ERROR1234567891011121314
File "train.py", line 318, in <module>
main()
File "train.py", line 182, in main
out = model(inputs)
File "/usr/local/lib/python2.7/dist-packages/torch/nn/modules/module.py", line 206, in __call__
result = self.forward(*input, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/torch/nn/parallel/data_parallel.py", line 61, in forward
outputs = self.parallel_apply(replicas, inputs, kwargs)
File "/usr/local/lib/python2.7/dist-packages/torch/nn/parallel/data_parallel.py", line 71, in parallel_apply
return parallel_apply(replicas, inputs, kwargs)
File "/usr/local/lib/python2.7/dist-packages/torch/nn/parallel/parallel_apply.py", line 45, in parallel_apply
raise output
RuntimeError: CUDNN_STATUS_INTERNAL_ERROR1234567891011121314
這個時候需要刪除root下一個隱藏文件夾 .nv:
sudo rm -rf ~/.nv1
就是這么多,祝玩得開心!(附一張成功圖:原8.0切換到9.0)
引用
http://blog.csdn.net/maple2014/article/details/78574275
http://blog.csdn.net/mumoDM/article/details/79462604
https://github.com/SeanNaren/deepspeech.pytorch/issues/32