cuda version 여러개를 한 pc에!

ad_official·2025년 2월 4일
0

딥러닝 기초

목록 보기
4/5
항목개발자용 CUDA 설치 (전체 CUDA Toolkit)실행용 CUDA 설치 (런타임 라이브러리)
포함 내용- GPU 코드를 직접 만들고 컴파일할 수 있는 컴파일러(nvcc)
- 개발에 필요한 헤더 파일과 라이브러리
- 디버깅/프로파일링 도구, 예제 코드 등
- 딥러닝 프로그램(예: PyTorch, TensorFlow)이 실행될 때 필요한 필수 라이브러리만 포함
- GPU 가속 실행에 필요한 파일만 제공 (컴파일 도구는 없음)
주 사용 목적- 직접 CUDA 언어(C/C++)로 GPU 프로그램을 개발하고 싶을 때
- 커스텀 GPU 코드를 작성하고 최적화할 때
- 딥러닝 모델이나 GPU 가속 프로그램을 그대로 실행할 때
- 직접 GPU 코드를 만들지 않고 이미 만들어진 프로그램을 사용할 때
설치 방법- NVIDIA에서 제공하는 전체 CUDA Toolkit을 설치 (runfile 또는 deb 파일 사용)
- 시스템 전체에 설치하여 모든 프로그램에서 사용
- Conda/Miniforge 같은 환경에서 제공하는 cudatoolkit 패키지 설치
- 각 환경마다 독립적으로 설치하여 딥러닝 프레임워크가 필요한 라이브러리만 제공
nvcc 사용 여부사용 가능 (직접 코드를 컴파일할 수 있음)사용 불가 (실행에 필요한 라이브러리만 있음)
대상 사용자- GPU 프로그래밍을 직접 하거나, 커스텀 GPU 애플리케이션을 개발하려는 사람- 딥러닝 프레임워크를 이용해 모델을 돌리거나 GPU 가속 실행만 필요한 사람
  • 나는 현재 1번 경우에 해당한다.

설치 방법

  • Ubuntu에서 CUDA를 설치할 때, .deb (dpkg) 패키지 설치, 혹은 .run 파일 설치 두 가지 방법이 있습니다.
  • 동시에 여러 버전을 설치하는 경우, .run 파일 설치가 더 직관적이고 충돌이 적습니다.
  • .deb 패키지를 쓰면 자동으로 /usr/local/cuda -> /usr/local/cuda-<버전> 같은 심볼릭 링크를 잡아주기는 하지만,
    • 다중 버전이 설치될 때 apt 의존성 충돌이 날 수 있어,
  • 보통 .run 방식으로 버전을 구분하여 설치하는 편이 좋습니다.

CUDA 두 가지 버전(.run) 설치하기

CUDA 런파일 다운로드


  • 설치 중 질의(라이선스 등)에 동의하고, 드라이버 설치 부분은 보통 건너뛰는 것을 권장합니다(이미 드라이버가 설치되어 있다고 가정).
    • “Install NVIDIA Accelerated Graphics Driver for Linux-x86_64?”: No 선택(이미 설치된 경우)
    • “Install CUDA Toolkit 12.4?”: Yes
    • “Enter Toolkit Location”: 기본적으로 /usr/local/cuda-12.4가 제안됩니다. 그대로 Enter.
    • 나머지도 기본값(샘플, symbolic link 설정 등) 또는 Yes로 진행합니다.
  • 결과적으로 /usr/local/cuda-11.8 디렉터리에 CUDA 12.4 전체 툴킷이 설치됩니다.

  • 두번째 cuda를 설치할 떄는
  • 심볼릭 링크 설정은 “Yes”로 해도 되는데, 이전 버전과 충돌되지 않는지 꼼꼼히 봐야 합니다.
    • “/usr/local/cuda”를 어떤 버전에 연결할지 선택하라는 메시지가 뜰 수 있는데, CUDA 11.6 설치 시점에서는 cuda -> cuda-11.6로 잡힐 것입니다.
    • 결과적으로 /usr/local/cuda-12.1 디렉터리에 CUDA 11.6이 설치됩니다.
    • 주의:
      • 설치 마지막에 /usr/local/cuda 심볼릭 링크가 11.6을 가리키도록 재설정될 가능성이 큽니다.
      • 하지만 어차피 우리가 각각의 conda 환경에서 버전을 수동으로 설정하므로 큰 문제는 없습니다.

3. 기본 CUDA 버전 설정 (옵션)

# 심볼릭 링크로 기본 버전 설정 (원하는 경우)
sudo rm /usr/local/cuda
sudo ln -s /usr/local/cuda-12.4 /usr/local/cuda  # 예시로 12.1을 기본으로 설정

4. Miniforge(Conda) 환경별로 특정 CUDA 버전 사용하기

  • conda create -n env_11.6 python=3.8 -y
  • Conda 환경을 활성화하면, 해당 환경만의 bin/activate 혹은 etc/conda/activate.d/ 내 스크립트에 따라 환경 변수가 설정됩니다.
    • 우리는 CUDA 11.8 경로를 추가해서 이 환경을 활성화하면 nvcc --version이 11.6을 가리키도록 만들 것입니다.

방법 1

conda create -n env_11.6 python=3.8 -y
mkdir -p ~/miniforge3/envs/env_11.6/etc/conda/activate.d
mkdir -p ~/miniforge3/envs/env_11.6/etc/conda/deactivate.d

# 활성화 스크립트 생성
echo 'export OLD_PATH=$PATH
export OLD_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-11.6
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH' > ~/miniforge3/envs/env_11.6/etc/conda/activate.d/env_vars.sh

# 비활성화 스크립트 생성
echo 'export PATH=$OLD_PATH
export LD_LIBRARY_PATH=$OLD_LD_LIBRARY_PATH
unset CUDA_HOME
unset OLD_PATH
unset OLD_LD_LIBRARY_PATH' > ~/miniforge3/envs/env_11.6/etc/conda/deactivate.d/env_vars.sh
conda create -n env_12.4 python=3.8 -y
mkdir -p ~/miniforge3/envs/env_12.4/etc/conda/activate.d
mkdir -p ~/miniforge3/envs/env_12.4/etc/conda/deactivate.d

echo 'export OLD_PATH=$PATH
export OLD_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-12.4
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH' > ~/miniforge3/envs/env_12.4/etc/conda/activate.d/env_vars.sh

echo 'export PATH=$OLD_PATH
export LD_LIBRARY_PATH=$OLD_LD_LIBRARY_PATH
unset CUDA_HOME
unset OLD_PATH
unset OLD_LD_LIBRARY_PATH' > ~/miniforge3/envs/env_12.4/etc/conda/deactivate.d/env_vars.sh

방법 2

  • 각 환경의 etc/conda/activate.d 디렉터리에 쉘 스크립트를 만들어 주면, 그 환경이 활성화될 때 자동으로 실행됩니다.
  • 또한, 비활성화할 때(= deactivate)에는 etc/conda/deactivate.d 폴더에 놓인 스크립트를 사용할 수 있습니다.
# 환경 활성화
conda activate cuda11.8_env

# 환경 전용 디렉터리로 이동
cd $CONDA_PREFIX  # 보통 /home/USER/miniforge3/envs/cuda11.8_env

# activate.d 폴더가 없으면 만들기
mkdir -p ./etc/conda/activate.d
mkdir -p ./etc/conda/deactivate.d
  • 그 다음 activate.d 폴더에 스크립트를 작성합니다. 예를 들어 cuda_activate.sh 라고 만듭니다.
  • nano ./etc/conda/activate.d/cuda_activate.sh
#!/usr/bin/env bash

# CUDA 11.8 설치 경로
export CUDA_HOME=/usr/local/cuda-11.6

# PATH 설정: 기존 PATH 앞에 cuda-11.6의 bin 디렉터리를 추가
export PATH=/usr/local/cuda-11.6/bin:$PATH

# LD_LIBRARY_PATH 설정: CUDA 라이브러리 경로 추가
# 콜론(:)으로 기존 설정과 구분
export LD_LIBRARY_PATH=/usr/local/cuda-11.6/lib64:$LD_LIBRARY_PATH
  • chmod +x ./etc/conda/activate.d/cuda_activate.sh
  • 비활성화 시( deactivate.d ) 변수 복원
    • 실제로는 conda가 PATH를 알아서 롤백하는 경우가 많아서, deactivate 스크립트를 생략하기도 합니다.
  • nano ./etc/conda/deactivate.d/cuda_deactivate.sh
#!/usr/bin/env bash

# 제거(또는 복원) 로직 예시
# $PATH에서 /usr/local/cuda-11.8/bin 을 삭제
# $LD_LIBRARY_PATH에서 /usr/local/cuda-11.8/lib64 삭제
# 하지만 단순 문자열 치환으로 해결하기 복잡할 수 있어,
# conda에서 자동으로 관리하도록 놔두는 경우도 많습니다.

# 일단 가장 간단히, 다시 export 해서 지우는 방법(주의가 필요)
export PATH=$(echo $PATH | sed -e 's#/usr/local/cuda-11.8/bin:##')
export LD_LIBRARY_PATH=$(echo $LD_LIBRARY_PATH | sed -e 's#/usr/local/cuda-11.8/lib64:##')
  • chmod +x ./etc/conda/deactivate.d/cuda_deactivate.sh
profile
ad_official

0개의 댓글