여러 명이 함께 사용하는 서버 환경에서 CUDA 버전을 관리하는 것은 까다로운 일입니다. 시스템 전역에 영향을 주지 않고, 본인의 개발 환경에서만 CUDA 버전을 바꾸어 사용하고 싶다면 어떻게 해야 할까요? 특히, 서로 다른 프로젝트에서 각각 다른 CUDA 버전을 요구할 때는 더욱 복잡해집니다.
이 글에서는 CUDA를 시스템 전역에 설치하지 않고, 로컬 경로에 설치하여 alias
를 활용해 손쉽게 버전을 전환하는 방법을 알아보겠습니다. 이를 통해 기존의 CUDA 10을 유지하면서, CUDA 11.8 또는 CUDA 12.1.1을 본인의 환경에서만 사용할 수 있습니다.
CUDA는 GPU 가속 연산을 지원하는 소프트웨어 라이브러리로, 주로 딥러닝과 머신러닝에서 사용됩니다. 하지만 CUDA의 버전 호환성 문제 때문에, 프로젝트마다 다른 버전을 사용해야 할 때가 많습니다.
서버 시스템에서 전역적으로 CUDA를 설치하거나 버전을 변경하면 다른 사용자에게 영향을 줄 수 있습니다.
이 문제를 해결하기 위해 로컬 경로에 CUDA를 설치하고, alias
를 통해 쉽게 전환하는 방법을 사용할 수 있습니다.
먼저 CUDA 11.8을 로컬 경로에 설치하는 방법을 알아보겠습니다. 시스템 전역에 설치하지 않고, $HOME/cuda-11.8
디렉토리에 설치합니다.
먼저, NVIDIA 웹사이트에서 CUDA 11.8 설치 패키지를 .run
파일로 다운로드합니다.
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
참고로 CUDA 11.4 설치 코드는 아래와 같습니다.
wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux.run
설치 시 전역 경로가 아닌 사용자의 홈 디렉토리 경로를 지정하여 설치합니다.
sudo sh cuda_11.8.0_520.61.05_linux.run --silent --toolkit --installpath=$HOME/cuda-11.8
여기서 --installpath
옵션을 통해 CUDA를 $HOME/cuda-11.8
에 설치하게 됩니다.
참고로 CUDA 11.4 설치 코드는 아래와 같습니다.
sudo sh cuda_11.4.0_470.42.01_linux.run --silent --toolkit --installpath=$HOME/cuda-11.4
CUDA가 올바르게 작동하려면 환경 변수를 설정해야 합니다. .bashrc
파일에 아래 내용을 추가합니다.
export PATH=$HOME/cuda-11.8/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=$HOME/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
참고로 CUDA 11.4 설치 코드는 아래와 같습니다.
export PATH=$HOME/cuda-11.4/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=$HOME/cuda-11.4/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
변경 사항을 적용하기 위해 다음 명령어를 실행합니다.
source ~/.bashrc
정상적으로 설치되었는지 확인하려면 다음 명령어를 입력합니다.
nvcc --version
출력 결과에 CUDA 11.8
이 나타나면 성공적으로 설치된 것입니다.
다음으로 CUDA 12.1.1을 설치하는 방법입니다. 마찬가지로 로컬 경로에 설치하여, 기존 버전을 건드리지 않고 사용합니다.
CUDA 12.1.1 설치 파일을 다운로드하려면 다음 명령어를 사용합니다.
wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run
설치 과정도 CUDA 11.8과 유사합니다. $HOME/cuda-12.1.1
경로에 설치합니다.
sudo sh cuda_12.1.1_530.30.02_linux.run --silent --toolkit --installpath=$HOME/cuda-12.1.1
CUDA 12.1.1 경로를 환경 변수에 추가합니다.
export PATH=$HOME/cuda-12.1.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=$HOME/cuda-12.1.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
적용 명령어를 실행합니다.
source ~/.bashrc
CUDA 12.1.1이 정상적으로 설치되었는지 확인합니다.
nvcc --version
alias
설정이제 두 가지 버전의 CUDA가 설치되었으니, alias
를 사용해 버전 전환을 쉽게 할 수 있도록 설정해봅니다. .bashrc
파일에 alias
를 추가하여 명령어 하나로 CUDA 버전을 전환할 수 있습니다.
alias
설정먼저, .bashrc
파일을 열어 아래 내용을 추가합니다.
# CUDA 11.8 활성화
alias use_cuda11="export PATH=$HOME/cuda-11.8/bin:\$PATH && export LD_LIBRARY_PATH=$HOME/cuda-11.8/lib64:\$LD_LIBRARY_PATH"
# CUDA 12.1.1 활성화
alias use_cuda12="export PATH=$HOME/cuda-12.1.1/bin:\$PATH && export LD_LIBRARY_PATH=$HOME/cuda-12.1.1/lib64:\$LD_LIBRARY_PATH"
설정을 적용하기 위해 다시 한 번 .bashrc
를 불러옵니다.
source ~/.bashrc
이제 use_cuda11
또는 use_cuda12
명령을 사용하여 원하는 CUDA 버전으로 전환할 수 있습니다.
CUDA 11.8 사용:
use_cuda11
use_cuda11를 실행하고 nvcc -V를 치면 다음과 같이 CUDA 11.8 버전이 나오는 것을 확인할 수 있습니다:
다시 12.1 버전으로 돌아가려면 CUDA 12.1.1를 사용하면 됩니다:
use_cuda12
이 방법을 사용하면 각 프로젝트의 요구 사항에 따라 쉽게 CUDA 버전을 전환할 수 있습니다.
alias
설정CUDA뿐만 아니라 Python 가상 환경을 자주 전환하는 경우도 많습니다. pyenv
나 pipenv
를 사용하여 Python 버전이나 가상 환경을 쉽게 전환할 수 있도록 alias
를 설정할 수 있습니다.
pyenv
환경 전환Python 버전을 자주 변경해야 한다면, 아래와 같은 alias
를 설정할 수 있습니다.
# Python 3.8 버전 사용
alias use_py38="pyenv global 3.8.12"
# Python 3.9 버전 사용
alias use_py39="pyenv global 3.9.7"
pipenv
가상 환경 전환특정 프로젝트의 pipenv
가상 환경을 활성화하는 것도 alias
를 통해 간단히 전환할 수 있습니다.
# 특정 프로젝트의 pipenv 환경 활성화
alias activate_myproject="cd ~/myproject && pipenv shell"
# 가상 환경 비활성화
alias deactivate_myproject="exit"
추가적으로 각각의 CUDA 버전에 맞는 cuDNN 파일을 설치해야할 필요가 있는데요. 아래는 각각의 CUDA 버전에 맞는 cuDNN 파일을 설치하고, 이를 환경에 적용하는 과정을 설명드리겠습니다.
1) cuDNN v8.9.7 다운로드 및 압축 해제
CUDA 12.x용 cuDNN을 설치하려면 먼저 NVIDIA 사이트에서 cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
파일을 다운로드합니다. 이미 다운로드했다고 가정하고, 해당 파일을 특정 디렉토리에 압축 해제합니다.
# 파일을 다운받은 디렉토리에서 압축 해제
tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
2) cuDNN 파일 설치
압축을 풀면 cuda
디렉토리가 생성됩니다. 이 디렉토리에 포함된 파일들을 CUDA 12.x가 설치된 경로에 복사하여 cuDNN 라이브러리를 설치합니다.
# include 파일 복사
sudo mkdir -p $HOME/cuda-12.1.1/include
sudo cp cudnn-linux-x86_64-8.9.7.29_cuda12-archive/include/cudnn*.h $HOME/cuda-12.1.1/include
# lib64 파일 복사
sudo mkdir -p $HOME/cuda-12.1.1/lib64
sudo cp cudnn-linux-x86_64-8.9.7.29_cuda12-archive/lib/libcudnn* $HOME/cuda-12.1.1/lib64
# 권한 설정
sudo chmod a+r $HOME/cuda-12.1.1/include/cudnn*.h $HOME/cuda-12.1.1/lib64/libcudnn*
3) 환경 변수 설정
cuDNN이 설치된 경로를 환경 변수에 추가합니다. .bashrc
또는 .zshrc
파일에 다음 내용을 추가하세요.
export PATH=$HOME/cuda-12.1.1/bin:$PATH
export LD_LIBRARY_PATH=$HOME/cuda-12.1.1/lib64:$LD_LIBRARY_PATH
변경 사항을 적용합니다.
source ~/.bashrc
4) 설치 확인
cuDNN 설치가 올바르게 완료되었는지 확인하려면, PyTorch 또는 다른 CUDA 응용 프로그램에서 CUDA와 cuDNN이 잘 작동하는지 확인합니다.
import torch
print(torch.cuda.is_available()) # True가 출력되면 CUDA가 정상적으로 작동
print(torch.backends.cudnn.enabled) # True가 출력되면 cuDNN이 정상적으로 작동
이렇게 하면 CUDA 12.x 환경에서 cuDNN 8.9.7을 사용하여 설치가 완료됩니다.
다음으로, CUDA 11.x용 cuDNN을 설치하는 방법입니다. 파일 이름은 cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz
입니다.
1) cuDNN v8.9.7 다운로드 및 압축 해제
CUDA 11.x용 cuDNN 파일을 다운로드한 후, 압축을 해제합니다.
tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz
2) cuDNN 파일 설치
압축이 풀리면 생성된 cuda
디렉토리 내 파일들을 CUDA 11.8 경로에 복사합니다.
# include 파일 복사
sudo mkdir -p $HOME/cuda-11.8/include
sudo cp cudnn-linux-x86_64-8.9.7.29_cuda11-archive/include/cudnn*.h $HOME/cuda-11.8/include
# lib64 파일 복사
sudo mkdir -p $HOME/cuda-11.8/lib64
sudo cp cudnn-linux-x86_64-8.9.7.29_cuda11-archive/lib/libcudnn* $HOME/cuda-11.8/lib64
# 권한 설정
sudo chmod a+r $HOME/cuda-11.8/include/cudnn*.h $HOME/cuda-11.8/lib64/libcudnn*
for CUDA 11.4 cuDNN 파일 설치
# include 파일 복사 sudo mkdir -p $HOME/cuda-11.4/include sudo cp cudnn-linux-x86_64-8.9.7.29_cuda11-archive/include/cudnn*.h $HOME/cuda-11.4/include # lib64 파일 복사 sudo mkdir -p $HOME/cuda-11.4/lib64 sudo cp cudnn-linux-x86_64-8.9.7.29_cuda11-archive/lib/libcudnn* $HOME/cuda-11.4/lib64 # 권한 설정 sudo chmod a+r $HOME/cuda-11.4/include/cudnn*.h $HOME/cuda-11.4/lib64/libcudnn*
3) 환경 변수 설정
cuDNN 경로를 환경 변수에 추가합니다. CUDA 11.8 환경에서 사용하기 위해 .bashrc
또는 .zshrc
파일에 다음을 추가하세요.
export PATH=$HOME/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=$HOME/cuda-11.8/lib64:$LD_LIBRARY_PATH
환경 변수를 적용합니다.
source ~/.bashrc
CUDA 11.x와 cuDNN 8.9.7이 올바르게 설치되었는지 확인합니다.
import torch
print(torch.cuda.is_available()) # True가 출력되면 CUDA가 정상적으로 작동
print(torch.backends.cudnn.enabled) # True가 출력되면 cuDNN이 정상적으로 작동
이제 CUDA 11.x 환경에서 cuDNN 8.9.7을 사용할 수 있습니다.
요약
.bashrc
파일에 환경 변수를 설정하여 필요한 경우 손쉽게 CUDA 및 cuDNN 버전을 전환할 수 있습니다.alias
를 사용하면 여러 CUDA 및 cuDNN 환경을 쉽게 전환할 수 있습니다.추가로, CUDA와 cuDNN을 전환하는 alias
설정도 가능합니다:
# CUDA 11.8 및 cuDNN v8.9.7 활성화
alias use_cuda11="export PATH=$HOME/cuda-11.8/bin:\$PATH && export LD_LIBRARY_PATH=$HOME/cuda-11.8/lib64:\$LD_LIBRARY_PATH"
# CUDA 12.1.1 및 cuDNN v8.9.7 활성화
alias use_cuda12="export PATH=$HOME/cuda-12.1.1/bin:\$PATH && export LD_LIBRARY_PATH=$HOME/cuda-12.1.1/lib64:\$LD_LIBRARY_PATH"
서버에서 여러 명이 사용하는 환경에서 CUDA 버전을 전환하거나, Python 가상 환경을 쉽게 변경하는 것은 매우 중요합니다. 이 글에서 소개한 방법을 사용하면, alias
설정을 통해 복잡한 설정 과정을 단순화하고, 다양한 프로젝트 요구 사항에 맞게 효율적으로 작업할 수 있습니다.
alias
를 활용해 나만의 환경을 간편하게 관리해보세요! 앞으로 다양한 프로젝트에서 더욱 빠르고 유연하게 개발을 진행할 수 있을 것입니다.
저도 진짜 이거때문에 골치 아팠는데 이렇게 구현하고 나니까 너무 업무가 편해져서 공유드립니다 😎😎