多版本CUDA及cuDNN管理
前言
最近復現別人 deep learning 相關的專案
常常會遇到不同專案有不同 CUDA 版本的問題
還有 package 相依問題也很麻煩
所以非常需要一個有效管理多 CUDA 版本的方法
內容
不斷更換 CUDA 版本真的很讓人煩躁
而且常常遇到每個人的專案用不同的版本
我就嘗試 google 搜尋了一下有沒有苦過的人
果然不出所料,一堆苦人
我從Reference找到一個外國大佬的做法讓切換版本變得十分簡單
所以我打算直接引用他的做法當做一個記錄,幫助下一個苦(CU)人
Install CUDA
安裝 CUDA 比較快,直接從NVIDIA 官網下載runfile
的版本,並照得它上面的指令輸入安裝
這邊有兩點很重要要注意:
- 不用從 CUDA-toolkit 裏面安裝驅動程式,請手動額外去安裝最新的驅動
- 安裝時,請不要選擇建立
symbolic link
底下是安裝的範例以 10.1 爲例
1 | wget https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run |
1 | CUDA Installer |
進去Options
1 | CUDA Toolkit |
最後安裝完成就會吐出 Summary
1 | =========== |
Install cuDNN
從 NVIDIA 官網下載對應 CUDA 版本的 cuDNN,然後用
tar -xvf <CUDNN_ZIP_NAME>
解壓縮內容會長得像下面這樣
1
2
3
4
5
6
7
8
9$ tree -L 2 ./cuda
.
├── cuda
│ ├── include
│ ├── lib64
│ └── NVIDIA_SLA_cuDNN_Support.txt
└── cudnn_install.sh
3 directories, 2 files在解壓縮的 cuDNN 同目錄下,使用
touch cudnn_install.sh
新增腳本,並且把下面的指令貼進去1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16read -p "CUDA-version: " ver
cp cuda/include/cudnn.h /usr/local/cuda-"${ver}"/include
cp cuda/lib64/libcudnn* /usr/local/cuda-"${ver}"/lib64
chmod a+r /usr/local/cuda*/include/cudnn.h /usr/local/cuda*/lib64/libcudnn*
echo include
tree -L 1 /usr/local/cuda-"${ver}"/include | grep cudnn
echo lib64
tree -L 1 /usr/local/cuda-"${ver}"/lib64 | grep cudnn這個腳本是自動幫你把 cuDNN 丟到 CUDA 目錄下
我真的不知道爲什麼 cuDNN 跟 CUDA 要分開下載,有夠麻煩
更改權限後,run 安裝 cuDNN 的腳本
1
chmod +x cudnn_install.sh & sudo ./cudnn_install.sh
安裝完成後,我們可以新增一個切換 CUDA 版本的 function 在
~/.bashrc
或~/.zshrc
裏面,以便下次直接 call 它來切換版本1
2
3
4
5
6
7
8
9# add below to your env bash file.
function _switch_cuda {
v=$1
export PATH=$PATH:/usr/local/cuda-$v/bin
export CUDADIR=/usr/local/cuda-$v
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-$v/lib64
nvcc --version
}改完記得
source
一下它只要輸入版本號就能使用,裏面會自動幫你切換目前使用 CUDA 的路徑
例如:
_switch_cuda 10.1
最後,可以確認看看
/usr/local
中的 CUDA 版本1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20$ tree -L 1 /usr/local
.
├── bin
├── cuda-10.0
├── cuda-10.1
├── cuda-10.2
├── cuda-9.0
├── cuda-9.1
├── cuda-9.2
├── etc
├── games
├── include
├── lib
├── man -> share/man
├── sbin
├── share
├── src
└── texlive
16 directories, 0 files
結語
自從用這個方法裝了多版本 CUDA 再搭配 mini-conda
整個開發環境都變舒服了
Reference
Installing multiple versions of cuda cudnn
這篇文章同步發表於 Medium ,歡迎留言討論!
Medium 文章連結