본문 바로가기
ML or DL

CUDA 두개 버젼을 한 컴퓨터에.

by chaloalto 2021. 9. 14.

Tensorflow 1.x 대는 CUDA 10.x 버젼대만, 

Tensorflow 2.x 대는 CUDA 11.x 만 호환이 됨. 게다가 RTX 3090 은 CUDA 11 미만의 버젼을 호환하지 않기 때문에 3090 에서 tf 1 코드를 사용할 수가 없다.

2080 Ti 에서 tf1, tf2  모두를 테스트하기 위해 CUDA 10.x, CUDA 11.x 버젼을 모두 설치하고자한다. 

출처 : https://m31phy.tistory.com/125

 

[CUDA] 한 컴퓨터에 여러 버전 cuda 설치하기

저의 경우에는 Diskless cluster 구조에서 몇몇 계산노드들이 서로 다른 그래픽 카드를 가지고 있습니다. 그래서 서로 다른 버전의 cuda를 설치해야하나 싶었지만, 조사를 하다보니 CUDA SDK의 compute capa

m31phy.tistory.com

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 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


※ 추가적인 확인 필요 
다른 버전의 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

 

'ML or DL' 카테고리의 다른 글

[USAD] 논문 리뷰  (0) 2021.10.26
Optimizer 정리  (0) 2021.09.15
[Loss 함수] loss 함수의 종류 및 비교, 사용  (0) 2021.09.14
[모델 배포하기(2/2)] TF-Serving 예제  (0) 2021.09.06
Scaler 정리  (0) 2021.09.01