[κΏ€νŒ] .bashrc둜 λ‘œμ»¬μ—μ„œ ALIASλ₯Ό ν™œμš©ν•œ μ—¬λŸ¬ μΏ λ‹€ ν™œμš©ν•˜κΈ°

Posted by Euisuk's Dev Log on October 10, 2024

[κΏ€νŒ] .bashrc둜 λ‘œμ»¬μ—μ„œ ALIASλ₯Ό ν™œμš©ν•œ μ—¬λŸ¬ μΏ λ‹€ ν™œμš©ν•˜κΈ°

Introduction

μ—¬λŸ¬ λͺ…이 ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” μ„œλ²„ ν™˜κ²½μ—μ„œ CUDA 버전을 κ΄€λ¦¬ν•˜λŠ” 것은 κΉŒλ‹€λ‘œμš΄ μΌμž…λ‹ˆλ‹€. μ‹œμŠ€ν…œ 전역에 영ν–₯을 μ£Όμ§€ μ•Šκ³ , 본인의 개발 ν™˜κ²½μ—μ„œλ§Œ CUDA 버전을 λ°”κΎΈμ–΄ μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒμš”? 특히, μ„œλ‘œ λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ—μ„œ 각각 λ‹€λ₯Έ CUDA 버전을 μš”κ΅¬ν•  λ•ŒλŠ” λ”μš± λ³΅μž‘ν•΄μ§‘λ‹ˆλ‹€.

이 κΈ€μ—μ„œλŠ” CUDAλ₯Ό μ‹œμŠ€ν…œ 전역에 μ„€μΉ˜ν•˜μ§€ μ•Šκ³ , 둜컬 κ²½λ‘œμ— μ„€μΉ˜ν•˜μ—¬ aliasλ₯Ό ν™œμš©ν•΄ μ†μ‰½κ²Œ 버전을 μ „ν™˜ν•˜λŠ” 방법을 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 기쑴의 CUDA 10을 μœ μ§€ν•˜λ©΄μ„œ, CUDA 11.8 λ˜λŠ” CUDA 12.1.1을 본인의 ν™˜κ²½μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


1. CUDA 둜컬 μ„€μΉ˜μ˜ ν•„μš”μ„±

CUDAλŠ” GPU 가속 연산을 μ§€μ›ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ 라이브러리둜, 주둜 λ”₯λŸ¬λ‹κ³Ό λ¨Έμ‹ λŸ¬λ‹μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€. ν•˜μ§€λ§Œ CUDA의 버전 ν˜Έν™˜μ„± 문제 λ•Œλ¬Έμ—, ν”„λ‘œμ νŠΈλ§ˆλ‹€ λ‹€λ₯Έ 버전을 μ‚¬μš©ν•΄μ•Ό ν•  λ•Œκ°€ λ§ŽμŠ΅λ‹ˆλ‹€.

  • μ„œλ²„ μ‹œμŠ€ν…œμ—μ„œ μ „μ—­μ μœΌλ‘œ CUDAλ₯Ό μ„€μΉ˜ν•˜κ±°λ‚˜ 버전을 λ³€κ²½ν•˜λ©΄ λ‹€λ₯Έ μ‚¬μš©μžμ—κ²Œ 영ν–₯을 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 둜컬 κ²½λ‘œμ— CUDAλ₯Ό μ„€μΉ˜ν•˜κ³ , aliasλ₯Ό 톡해 μ‰½κ²Œ μ „ν™˜ν•˜λŠ” 방법을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. CUDA 11.8 둜컬 μ„€μΉ˜

λ¨Όμ € CUDA 11.8을 둜컬 κ²½λ‘œμ— μ„€μΉ˜ν•˜λŠ” 방법을 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. μ‹œμŠ€ν…œ 전역에 μ„€μΉ˜ν•˜μ§€ μ•Šκ³ , $HOME/cuda-11.8 디렉토리에 μ„€μΉ˜ν•©λ‹ˆλ‹€.

1) CUDA 11.8 λ‹€μš΄λ‘œλ“œ

λ¨Όμ €, NVIDIA μ›Ήμ‚¬μ΄νŠΈμ—μ„œ CUDA 11.8 μ„€μΉ˜ νŒ¨ν‚€μ§€λ₯Ό .run 파일둜 λ‹€μš΄λ‘œλ“œν•©λ‹ˆλ‹€.

1
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 μ„€μΉ˜ μ½”λ“œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

1
wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux.run

2) CUDA 11.8 μ„€μΉ˜

μ„€μΉ˜ μ‹œ μ „μ—­ κ²½λ‘œκ°€ μ•„λ‹Œ μ‚¬μš©μžμ˜ ν™ˆ 디렉토리 경둜λ₯Ό μ§€μ •ν•˜μ—¬ μ„€μΉ˜ν•©λ‹ˆλ‹€.

1
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 μ„€μΉ˜ μ½”λ“œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

1
sudo sh cuda_11.4.0_470.42.01_linux.run --silent --toolkit --installpath=$HOME/cuda-11.4

3) ν™˜κ²½ λ³€μˆ˜ μ„€μ •

CUDAκ°€ μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•˜λ €λ©΄ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. .bashrc νŒŒμΌμ— μ•„λž˜ λ‚΄μš©μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

1
2
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 μ„€μΉ˜ μ½”λ“œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

1
2
export PATH=$HOME/cuda-11.4/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=$HOME/cuda-11.4/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

λ³€κ²½ 사항을 μ μš©ν•˜κΈ° μœ„ν•΄ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

1
source ~/.bashrc

4) μ„€μΉ˜ 확인

μ •μƒμ μœΌλ‘œ μ„€μΉ˜λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λ €λ©΄ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€.

1
nvcc --version

좜λ ₯ 결과에 CUDA 11.8이 λ‚˜νƒ€λ‚˜λ©΄ μ„±κ³΅μ μœΌλ‘œ μ„€μΉ˜λœ κ²ƒμž…λ‹ˆλ‹€.


3. CUDA 12.1.1 둜컬 μ„€μΉ˜

λ‹€μŒμœΌλ‘œ CUDA 12.1.1을 μ„€μΉ˜ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ 둜컬 κ²½λ‘œμ— μ„€μΉ˜ν•˜μ—¬, κΈ°μ‘΄ 버전을 κ±΄λ“œλ¦¬μ§€ μ•Šκ³  μ‚¬μš©ν•©λ‹ˆλ‹€.

1) CUDA 12.1.1 λ‹€μš΄λ‘œλ“œ

CUDA 12.1.1 μ„€μΉ˜ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜λ €λ©΄ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

1
wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run

2) CUDA 12.1.1 μ„€μΉ˜

μ„€μΉ˜ 과정도 CUDA 11.8κ³Ό μœ μ‚¬ν•©λ‹ˆλ‹€. $HOME/cuda-12.1.1 κ²½λ‘œμ— μ„€μΉ˜ν•©λ‹ˆλ‹€.

1
sudo sh cuda_12.1.1_530.30.02_linux.run --silent --toolkit --installpath=$HOME/cuda-12.1.1

3) ν™˜κ²½ λ³€μˆ˜ μ„€μ •

CUDA 12.1.1 경둜λ₯Ό ν™˜κ²½ λ³€μˆ˜μ— μΆ”κ°€ν•©λ‹ˆλ‹€.

1
2
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}}

적용 λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

1
source ~/.bashrc

4) μ„€μΉ˜ 확인

CUDA 12.1.1이 μ •μƒμ μœΌλ‘œ μ„€μΉ˜λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

1
nvcc --version

4. μ—¬λŸ¬ CUDA 버전 μ „ν™˜μ„ μœ„ν•œ alias μ„€μ •

이제 두 κ°€μ§€ λ²„μ „μ˜ CUDAκ°€ μ„€μΉ˜λ˜μ—ˆμœΌλ‹ˆ, aliasλ₯Ό μ‚¬μš©ν•΄ 버전 μ „ν™˜μ„ μ‰½κ²Œ ν•  수 μžˆλ„λ‘ μ„€μ •ν•΄λ΄…λ‹ˆλ‹€. .bashrc νŒŒμΌμ— aliasλ₯Ό μΆ”κ°€ν•˜μ—¬ λͺ…λ Ήμ–΄ ν•˜λ‚˜λ‘œ CUDA 버전을 μ „ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1) CUDA 11.8κ³Ό 12.1.1 μ „ν™˜μ„ μœ„ν•œ alias μ„€μ •

λ¨Όμ €, .bashrc νŒŒμΌμ„ μ—΄μ–΄ μ•„λž˜ λ‚΄μš©μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

1
2
3
4
5
# 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λ₯Ό λΆˆλŸ¬μ˜΅λ‹ˆλ‹€.

1
source ~/.bashrc

2) CUDA 버전 μ „ν™˜

이제 use_cuda11 λ˜λŠ” use_cuda12 λͺ…령을 μ‚¬μš©ν•˜μ—¬ μ›ν•˜λŠ” CUDA λ²„μ „μœΌλ‘œ μ „ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • 졜초둜 nvcc -Vλ₯Ό 치면 λ‹€μŒκ³Ό 같이 12.1 버전이 λ‚˜μ˜€λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€:

  • CUDA 11.8 μ‚¬μš©:

    1
    
    use_cuda11
    
  • use_cuda11λ₯Ό μ‹€ν–‰ν•˜κ³  nvcc -Vλ₯Ό 치면 λ‹€μŒκ³Ό 같이 CUDA 11.8 버전이 λ‚˜μ˜€λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€:

λ‹€μ‹œ 12.1 λ²„μ „μœΌλ‘œ λŒμ•„κ°€λ €λ©΄ CUDA 12.1.1λ₯Ό μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€:

1
use_cuda12

이 방법을 μ‚¬μš©ν•˜λ©΄ 각 ν”„λ‘œμ νŠΈμ˜ μš”κ΅¬ 사항에 따라 μ‰½κ²Œ CUDA 버전을 μ „ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


5. Python ν™˜κ²½ μ „ν™˜μ„ μœ„ν•œ alias μ„€μ •

CUDA뿐만 μ•„λ‹ˆλΌ Python 가상 ν™˜κ²½μ„ 자주 μ „ν™˜ν•˜λŠ” κ²½μš°λ„ λ§ŽμŠ΅λ‹ˆλ‹€. pyenvλ‚˜ pipenvλ₯Ό μ‚¬μš©ν•˜μ—¬ Python λ²„μ „μ΄λ‚˜ 가상 ν™˜κ²½μ„ μ‰½κ²Œ μ „ν™˜ν•  수 μžˆλ„λ‘ aliasλ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1) pyenv ν™˜κ²½ μ „ν™˜

Python 버전을 자주 λ³€κ²½ν•΄μ•Ό ν•œλ‹€λ©΄, μ•„λž˜μ™€ 같은 aliasλ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1
2
3
4
5
# Python 3.8 버전 μ‚¬μš©
alias use_py38="pyenv global 3.8.12"

# Python 3.9 버전 μ‚¬μš©
alias use_py39="pyenv global 3.9.7"

2) pipenv 가상 ν™˜κ²½ μ „ν™˜

νŠΉμ • ν”„λ‘œμ νŠΈμ˜ pipenv 가상 ν™˜κ²½μ„ ν™œμ„±ν™”ν•˜λŠ” 것도 aliasλ₯Ό 톡해 κ°„λ‹¨νžˆ μ „ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1
2
3
4
5
# νŠΉμ • ν”„λ‘œμ νŠΈμ˜ pipenv ν™˜κ²½ ν™œμ„±ν™”
alias activate_myproject="cd ~/myproject && pipenv shell"

# 가상 ν™˜κ²½ λΉ„ν™œμ„±ν™”
alias deactivate_myproject="exit"

6. 유첨 (+CuDNN)

μΆ”κ°€μ μœΌλ‘œ 각각의 CUDA 버전에 λ§žλŠ” cuDNN νŒŒμΌμ„ μ„€μΉ˜ν•΄μ•Όν•  ν•„μš”κ°€ μžˆλŠ”λ°μš”. μ•„λž˜λŠ” 각각의 CUDA 버전에 λ§žλŠ” cuDNN νŒŒμΌμ„ μ„€μΉ˜ν•˜κ³ , 이λ₯Ό ν™˜κ²½μ— μ μš©ν•˜λŠ” 과정을 μ„€λͺ…λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

1. CUDA 12.x와 cuDNN v8.9.7 μ„€μΉ˜ κ°€μ΄λ“œ

1) cuDNN v8.9.7 λ‹€μš΄λ‘œλ“œ 및 μ••μΆ• ν•΄μ œ

CUDA 12.x용 cuDNN을 μ„€μΉ˜ν•˜λ €λ©΄ λ¨Όμ € NVIDIA μ‚¬μ΄νŠΈμ—μ„œ cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•©λ‹ˆλ‹€. 이미 λ‹€μš΄λ‘œλ“œν–ˆλ‹€κ³  κ°€μ •ν•˜κ³ , ν•΄λ‹Ή νŒŒμΌμ„ νŠΉμ • 디렉토리에 μ••μΆ• ν•΄μ œν•©λ‹ˆλ‹€.

1
2
# νŒŒμΌμ„ λ‹€μš΄λ°›μ€ λ””λ ‰ν† λ¦¬μ—μ„œ μ••μΆ• ν•΄μ œ
tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz

2) cuDNN 파일 μ„€μΉ˜

압좕을 ν’€λ©΄ cuda 디렉토리가 μƒμ„±λ©λ‹ˆλ‹€. 이 디렉토리에 ν¬ν•¨λœ νŒŒμΌλ“€μ„ CUDA 12.xκ°€ μ„€μΉ˜λœ κ²½λ‘œμ— λ³΅μ‚¬ν•˜μ—¬ cuDNN 라이브러리λ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€.

1
2
3
4
5
6
7
8
9
10
# 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 νŒŒμΌμ— λ‹€μŒ λ‚΄μš©μ„ μΆ”κ°€ν•˜μ„Έμš”.

1
2
export PATH=$HOME/cuda-12.1.1/bin:$PATH
export LD_LIBRARY_PATH=$HOME/cuda-12.1.1/lib64:$LD_LIBRARY_PATH

λ³€κ²½ 사항을 μ μš©ν•©λ‹ˆλ‹€.

1
source ~/.bashrc

4) μ„€μΉ˜ 확인

cuDNN μ„€μΉ˜κ°€ μ˜¬λ°”λ₯΄κ²Œ μ™„λ£Œλ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λ €λ©΄, PyTorch λ˜λŠ” λ‹€λ₯Έ CUDA μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ CUDA와 cuDNN이 잘 μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

1
2
3
import torch
print(torch.cuda.is_available())  # Trueκ°€ 좜λ ₯되면 CUDAκ°€ μ •μƒμ μœΌλ‘œ μž‘λ™
print(torch.backends.cudnn.enabled)  # Trueκ°€ 좜λ ₯되면 cuDNN이 μ •μƒμ μœΌλ‘œ μž‘λ™

μ΄λ ‡κ²Œ ν•˜λ©΄ CUDA 12.x ν™˜κ²½μ—μ„œ cuDNN 8.9.7을 μ‚¬μš©ν•˜μ—¬ μ„€μΉ˜κ°€ μ™„λ£Œλ©λ‹ˆλ‹€.


2. CUDA 11.x와 cuDNN v8.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 νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•œ ν›„, 압좕을 ν•΄μ œν•©λ‹ˆλ‹€.

1
tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz

2) cuDNN 파일 μ„€μΉ˜

압좕이 풀리면 μƒμ„±λœ cuda 디렉토리 λ‚΄ νŒŒμΌλ“€μ„ CUDA 11.8 κ²½λ‘œμ— λ³΅μ‚¬ν•©λ‹ˆλ‹€.

1
2
3
4
5
6
7
8
9
10
# 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 파일 μ„€μΉ˜

1
2
3
4
5
6
7
8
# 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 νŒŒμΌμ— λ‹€μŒμ„ μΆ”κ°€ν•˜μ„Έμš”.

1
2
export PATH=$HOME/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=$HOME/cuda-11.8/lib64:$LD_LIBRARY_PATH

ν™˜κ²½ λ³€μˆ˜λ₯Ό μ μš©ν•©λ‹ˆλ‹€.

1
source ~/.bashrc

4) μ„€μΉ˜ 확인

CUDA 11.x와 cuDNN 8.9.7이 μ˜¬λ°”λ₯΄κ²Œ μ„€μΉ˜λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

1
2
3
import torch
print(torch.cuda.is_available())  # Trueκ°€ 좜λ ₯되면 CUDAκ°€ μ •μƒμ μœΌλ‘œ μž‘λ™
print(torch.backends.cudnn.enabled)  # Trueκ°€ 좜λ ₯되면 cuDNN이 μ •μƒμ μœΌλ‘œ μž‘λ™

이제 CUDA 11.x ν™˜κ²½μ—μ„œ cuDNN 8.9.7을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


μš”μ•½

  • CUDA 12.x용 cuDNN 8.9.7κ³Ό CUDA 11.x용 cuDNN 8.9.7을 각각 λ³„λ„μ˜ κ²½λ‘œμ— μ„€μΉ˜ν•˜κ³ , ν™˜κ²½ λ³€μˆ˜λ₯Ό 톡해 버전 κ°„ μ „ν™˜μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • 각 CUDA ν™˜κ²½μ— λ§žλŠ” cuDNN을 μ„€μΉ˜ν•œ ν›„, .bashrc νŒŒμΌμ— ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•˜μ—¬ ν•„μš”ν•œ 경우 μ†μ‰½κ²Œ CUDA 및 cuDNN 버전을 μ „ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • aliasλ₯Ό μ‚¬μš©ν•˜λ©΄ μ—¬λŸ¬ CUDA 및 cuDNN ν™˜κ²½μ„ μ‰½κ²Œ μ „ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μΆ”κ°€λ‘œ, CUDA와 cuDNN을 μ „ν™˜ν•˜λŠ” alias 섀정도 κ°€λŠ₯ν•©λ‹ˆλ‹€:

1
2
3
4
5
# 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"

Conclusion

μ„œλ²„μ—μ„œ μ—¬λŸ¬ λͺ…이 μ‚¬μš©ν•˜λŠ” ν™˜κ²½μ—μ„œ CUDA 버전을 μ „ν™˜ν•˜κ±°λ‚˜, Python 가상 ν™˜κ²½μ„ μ‰½κ²Œ λ³€κ²½ν•˜λŠ” 것은 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. 이 κΈ€μ—μ„œ μ†Œκ°œν•œ 방법을 μ‚¬μš©ν•˜λ©΄, alias 섀정을 톡해 λ³΅μž‘ν•œ μ„€μ • 과정을 λ‹¨μˆœν™”ν•˜κ³ , λ‹€μ–‘ν•œ ν”„λ‘œμ νŠΈ μš”κ΅¬ 사항에 맞게 효율적으둜 μž‘μ—…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

aliasλ₯Ό ν™œμš©ν•΄ λ‚˜λ§Œμ˜ ν™˜κ²½μ„ κ°„νŽΈν•˜κ²Œ κ΄€λ¦¬ν•΄λ³΄μ„Έμš”! μ•žμœΌλ‘œ λ‹€μ–‘ν•œ ν”„λ‘œμ νŠΈμ—μ„œ λ”μš± λΉ λ₯΄κ³  μœ μ—°ν•˜κ²Œ κ°œλ°œμ„ μ§„ν–‰ν•  수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

저도 μ§„μ§œ μ΄κ±°λ•Œλ¬Έμ— 골치 μ•„νŒ λŠ”λ° μ΄λ ‡κ²Œ κ΅¬ν˜„ν•˜κ³  λ‚˜λ‹ˆκΉŒ λ„ˆλ¬΄ 업무가 νŽΈν•΄μ Έμ„œ κ³΅μœ λ“œλ¦½λ‹ˆλ‹€ 😎😎