목차
개요
Tensorflow & PyTorch
와 같은 딥러닝 패키지를 사용하는 많은 사람들 환경을 구성하기 위해 콘다(Conda)와 같은 가상 환경을 많이 사용합니다. 오픈 소스 모델들을 테스트 하거나 서로 다른 프레임워크들을 사용하기 위해 특정 CUDA 버전을 사용해야하는 경우가 있습니다.
본 글에서는 Conda를 이용해 CUDA 버전을 관리 하는 방법에 대해 설명합니다. 다만, 제가 쉘 스크립트를 잘 다루는 편은 아니기 때문에 잘 못된 점이 있거나 더 좋은 방법이 존재할 수 있습니다. 추가로 이 글에서는 CUDA 및 CuDNN의 설치 과정은 다루지 않습니다 🙂
방법 요약
Conda 가상환경은 activate
시에 ${CONDA_PREFIX}/etc/conda/activate.d
폴더의 스크립트가 실행됩니다. 반대로 deactivate
시에는 ${CONDA_PREFIX}/etc/conda/deactivate.d
폴더의 스크립트가 실행됩니다.
이를 이용해서 환경 변수 ${BASE_PATH}
에 ${PATH}
환경 변수를 백업해 두고 가상환경 실행시 ${PATH}
환경 변수 값에 CUDA 환경 변수를 추가 하는 스크립트를 만들어 ~/activate.d
폴더에 넣어줍니다.
반대로 ${PATH}
값을 백업해둔 ${BASE_PATH}
로 변경해주고 ${LD_LIBRARY_PATH}
는 unset
해 주는 스크립트를 작성하여 ~/deactivate.d
에 넣어서 가성 환경을 빠져 나올때 실행 될 수 있게 해줍니다.
주의
사람마다 Conda, CUDA 등의 설치 위치 및 기본 ${PATH}
값이 다를 수 있기 때문에 자신의 환경에 맞게 스크립트를 수정해 사용
해야 할 수 있습니다.
또한, ${PATH}
환경 변수를 설정하는 과정에서 잘 못 하여 날아가게 되면 우분투 기본 명령어들이 동작하지 않을 수 있습니다. 따라서 시작하기 전에 터미널에 echo ${PATH}
를 입력해 자신의 현재 ${PATH}
환경 변수를 따로 저장해 두면 좋습니다.
방법
CUDA
는 /usr/local/cuda-버전
에 위치(기본 설치 경로)한다고 가정하고 설명하도록 하겠습니다.
echo ${PATH}
#>> 출력: ${PATH} 값
sudo touch /etc/profile.d/base_path.sh
sudo nano /etc/profile.d/base_path.sh
먼저 echo
명령어를 이용해 현재 ${PATH}
값을 확인하고 nano
혹은 다른 텍스트 에디터를 이용해 /etc/profile.d/base_path.sh
파일을 열어(생성해) 줍니다.
## /etc/profile.d/base_path.sh 파일 내용(사람마다 다름 주의)
#!/bin/bash
export BASE_PATH=/아나콘다 설치경로/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
이후 위에서 확인한 ${PATH}
값에서 CUDA 기본 경로를 제외하고 위처럼 ${BASE_PATH}
에 적어주고 base_path.sh
를 저장해 줍니다.
source /etc/profile.d/base_path.sh
echo ${BASE_PATH}
생성한 스크립트를 적용하고 echo
명령어를 이용해 출력했을 때 설정한 경로가 보이면 정상입니다.
conda create --name cuda-11.2
source activate cuda-11.2
이제 가상 환경을 생성하고 실행해 줍니다. 저는 cuda-11.2
를 사용할 가상환경을 만들 것이므로 가상환경 이름을 cuda-11.2
로 설정 했습니다.
echo ${CONDA_PREFIX}
//출력: /home/유저/acanconda3/envs/cuda-11.2
cd ${CONDA_PREFIX}
mkdir -p ./etc/conda/activate.d
mkdir -p ./etc/conda/deactivate.d
${CONDA_PREFIX}
를 이용해 현재 실행된 가상 환경이 설치된 폴더를 찾고 해당 폴더로 이동합니다. 이후 activate.d
, deactivate.d
폴더 생성해 줍니다. Conda 가상 환경은 activate
될 때 ./activate.d
폴더의 스크립트가 실행되고 deactivate
될 때 ./deactivate.d
폴더의 스크립트들이 실행 됩니다.
nano ./etc/conda/activate.d/env_vars.sh
텍스트 에디터를 이용해 가상 환경이 activate
될 때 실행 될 ./etc/conda/activate.d/env_vars.sh
파일을 생성해 줍니다.
## ./etc/conda/activate.d/env_vars.sh 파일 내용(사람 마다 다름)
#!/bin/bash
export PATH=/usr/local/cuda-11.2/bin:${BASE_PATH}
export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64
위의 내용을 작성하고 ./etc/conda/activate.d/env_vars.sh
파일을 저장해 줍니다.
nano ./etc/conda/deactivate.d/env_vars.sh
다시 텍스트 에디터를 이용해 가상 환경이 deactivate
될 때 실행 될 ./etc/conda/deactivate.d/env_vars.sh
파일을 생성해 줍니다.
## ../etc/conda/deactivate.d/env_vars.sh 파일 내용(사람 마다 다름)
#!/bin/bash
export PATH=${BASE_PATH}
unset LD_LIBRARY_PATH
위의 내용을 작성하고 ./etc/conda/deactivate.d/env_vars.sh
파일을 저장해 줍니다.
nvcc --version //쿠다 버전확인
이제 터미널을 닫았다가 다시 열어 주거나 source ~/.bashrc
를 실행해 주면 이후부터는 해당 가상 환경을 실행하면 환경 변수에 설정한 CUDA 버전이 적용되어 있을 것 입니다.