[κΏν] .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 2export 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λ₯Ό νμ©ν΄ λλ§μ νκ²½μ κ°νΈνκ² κ΄λ¦¬ν΄λ³΄μΈμ! μμΌλ‘ λ€μν νλ‘μ νΈμμ λμ± λΉ λ₯΄κ³ μ μ°νκ² κ°λ°μ μ§νν μ μμ κ²μ
λλ€.
μ λ μ§μ§ μ΄κ±°λλ¬Έμ κ³¨μΉ μν λλ° μ΄λ κ² κ΅¬ννκ³ λλκΉ λ무 μ λ¬΄κ° νΈν΄μ Έμ 곡μ λ립λλ€ ππ