Conda를 이용한 CUDA 버전 관리

conda cuda

개요

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.ddeactivate.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 버전이 적용되어 있을 것 입니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤