저의 경우에는 Diskless cluster 구조에서 몇몇 계산노드들이 서로 다른 그래픽 카드를 가지고 있습니다. 그래서 서로 다른 버전의 cuda를 설치해야하나 싶었지만, 조사를 하다보니 CUDA SDK의 compute capability 범위 내에 해당 그래픽 카드의 compute capability가 있으면[1][2] 된다고 하여 결국 최근 버전인 cuda-11.0을 설치하였습니다.
개인적인 정리로써 여러 버전의 cuda를 하나의 컴퓨터에 설치하기 위해서 자료를 조사했던 부분을 아래에 정리를 했습니다.
1. 왜 사람들은 CUDA를 이용하는가?
근래에 사람들이 CUDA를 이용하는 크게 두 가지이다.
(1) Nvidia GPU를 병렬 프로그래밍의 목적으로 활용하기 위해서 (GPGPU: General purpose of GPU)
(2) Machine Learning Program의 일종인 Google의 Tensor Flow를 활용하기 위해서
2. Linux Ubuntu의 CUDA 지원
다른 버전의 Ubuntu OS의 저장소(repository)는 다른 버전의 CUDA를 지원한다. * 예를들어,
- Ubuntu 16.04의 경우: CUDA 8.0 ~ CUDA 10.2까지 지원
- Ubuntu 18.04의 경우: CUDA 10.0 ~ 10.2까지 지원.
따라서, 다음과 같이 apt-get 명령어를 이용하여, cuda를 다운로드 받을 수 있다
$ sudo apt-get install cuda-toolkit-8-0
* 확인 필요
※ Ubuntu repository: https://packages.ubuntu.com/search?keywords=cuda&searchon=names&suite=all§ion=all
3. 하나의 컴퓨터에 여러 버전의 CUDA를 설치하는 것이 가능한가? YES
4. 방법
1) 서로 다른 버전의 CUDA를 다운로드
(1) Ubuntu의 apt-get을 이용한 방법
(2) Nvidia의 공식 홈페이지에서 다운로드 받는 방법
여기에선 (2)을 위주로 설명을 하도록 하겠다. 우선, 아래의 사이트에서 필요한 CUDA를 다운로드하자.
• 최신버전의 CUDA (cuda-11.2, 2020-12-24 기준): https://developer.nvidia.com/cuda-downloads
• 이전 버전의 CUDA archive: https://developer.nvidia.com/cuda-toolkit-archive
이때, 주의할 점은 반드시 runfile(local)을 다운받도록 하자. deb file과 같은 binary file과는 다르게 cuda 파일이 어느 위치에 설치될 지를 정할 수 있다. [6]
2) 다른 버전의 CUDA 인스톨
만약 다운로드를 받은 cuda의 runfile이 "cuda-9.1.run"일 경우 다음과 같은 명령어를 입력하여, cuda를 설치하자.
$sudo sh cuda-9.1.run --silent --toolkit --toolkitpath=/usr/local/cuda-9.1
각각의 옵션은 아래와 같다.
• --silent: interactive prompt 없이 silent mode 내에서 설치됨
• --toolkit: toolkit만 설치
• --toolkitpath: cuda toolkit이 설치될 경로를 명시함
인스톨을 하고나면, 다른 버전의 cuda들이 설치된 경로는 아래와 같다: /usr/local/cuda-x.x
예를들어, 만약 cuda-8.0, 9.0, 9.1 버전이 설치되었다면, /usr/local 디렉토리 내에는 아래와 같이 cuda 디렉토리가 존재한다.
$ ls /usr/local |grep cuda
cuda-8.0 cuda-9.0 cuda-9.1
따라서, 서로 다른 버전의 CUDA는 서로 덮어쓰기(overwrite)를 하지 않는다.
※ cuda installer는 /usr/local/cuda 디렉토리를 symbolic link한다.
- 일반적으로 TesnorFlow를 비롯한 프로그램들은 cuda에 필요한 파일들을 찾을 때 /usr/local/cuda를 먼저 찾는다. 따라서, 자신이 필요한 CUDA 버전을 사용하기 위해선, 먼저 symbolic link된 /usr/local/cuda 디렉토리를 지운 후, 자신이 원하는 cuda 버전의 directory로 다시 symbolic link를 업데이트 하면 된다.
$ cd /usr/local
$ sudo rm cuda
$ sudo ln -s cuda-10.0 cuda
→ /usr/local/cuda를 지운 후, cuda-10.0 버전으로 다시 /usr/local/cuda로 symlink를 건다
이때, 아래와 같이 ~./bashrc에 아래의 명령어를 입력하자.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
※ TensorFlow의 경우 LD_LIBRARY_PATH 환경변수가 나타나는 위치 내에서 TensorFlow가 필요한 CUDA 버전과 매칭이 되는 라이브러리를 찾는다. 이때 만약 LD_LIBRARY_PATH가 다음과 같다고 가정을 하자.
/usr/local/cuda/lib64:/usr/local/cuda-10.0/lib64:/usr/local/cuda-8.0/lib64
그렇다면, default로 설정된 cuda, cuda-10.0, cuda-8.0 순으로 cuda를 찾는다. 따라서, 만일 CUDA 8.0 라이브러리 파일에 의존하는 어떤 것을 실행시켰을 경우, 처음에는 /usr/local/cuda에서 확인을 하고, 그 후에는 /usr/local/cuda-10.0에서 확인을 한다. 그 다음, /usr/local/cuda-8.0에서 확인을 한 후 실행한다
※ Cuda의 환경변수 확인: $env | grep -i cuda
※ 추가적인 확인 필요 [8]
다른 버전의 CUDA를 사용하기 위해서, 단순히 두 개의 환경변수인 PATH와 LD_LIBRARY_PATH를 조작하면 되는가?
가령, cuda 10.0과 cuda-9.2를 사용한다고 가정했을 때, 다음과 같이 두 환경변수를 변경함으로써 사용할 cuda를 지정할 수 있다.
- CUDA-10.0를 사용할 경우
export PATH=$PATH:/usr/local/cuda-10.0/bin
export CUDADIR=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.0/lib
- cuda-9.2를 사용할 경우
export PATH=$PATH:/usr/local/cuda-9.2/bin
export CUDADIR=/usr/local/cuda-9.2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-9.2/lib
Reference:
[1] https://en.wikipedia.org/wiki/CUDA
[2] https://hiseon.me/linux/ubuntu/cuda-install/
[3] https://askubuntu.com/questions/854596/can-i-install-two-cuda-toolkits-and-use-them-at-the-same-time
[4] https://programmer.ink/think/ubuntu-installs-multiple-cuda-versions-and-can-switch-at-any-time.html
[5] https://stackoverflow.com/questions/41330798/install-multiple-versions-of-cuda-and-cudnn
[6] https://medium.com/@peterjussi/multicuda-multiple-versions-of-cuda-on-one-machine-4b6ccda6faae
[7] https://jybaek.tistory.com/779
[8] https://www.pugetsystems.com/labs/hpc/How-To-Install-CUDA-10-together-with-9-2-on-Ubuntu-18-04-with-support-for-NVIDIA-20XX-Turing-GPUs-1236/#step-4-do-the-install
[9] https://blog.kovalevskyi.com/multiple-version-of-cuda-libraries-on-the-same-machine-b9502d50ae77
'프로그래밍 언어 > CUDA' 카테고리의 다른 글
[CUDA] CudaDeviceProp 정리 (0) | 2021.04.05 |
---|---|
[CUDA] printf not working (0) | 2021.01.05 |
[CUDA] 클러스터의 계산노드 nouveau 문제점 해결 (0) | 2020.12.28 |
[CUDA] CUDA11.1 Install: Missing recommended library: (0) | 2020.12.25 |
댓글