[Linux] ๋ฅ๋ฌ๋ ํ๊ฒฝ ๊ตฌ์ถ : CUDA, CuDNN
์๋ณธ ๊ฒ์๊ธ: https://velog.io/@euisuk-chung/ํ๊ฒฝ๊ตฌ์ถ-CUDA-CuDNN์-๋-์ข-๊ทธ๋ง-๊ดด๋กญํ๋ผ-ใ
์ค๋ ํ์ฌ ๋ก์ปฌ ์๋ฒ๊ฐ ๋ค์ด๋๋ฉด์ ๊ธฐ์กด์ ์ค๋๋ ํ์ผ๋ค์ ๋ฐ๊ณ ์๋กญ๊ฒ ๋ค์ ์ค์นํ ๊ธฐํ๊ฐ ์๋ค!!! ํ์ผ์ ๋คํํ ๋ณต์์ ์๋ฃํด์ ์ง๊ธ์์์ผ ์์ผ๋ฉด์ ์ฐ์ง๋งโฆ ์ ๋ง์ด์ง ๋์ฐํ 8์๊ฐ์ด์๋คโฆใ ใ
์ถ๊ทผํด์ ์ ๋ฌด๋ฅผ ์ข ํ๋ค๋ณด๋ ์๋ฒ๊ฐ ๋ฌดํ ๋ณต๊ตฌ ๋ชจ๋๋ก ๋น ์ ธ์ ๋ณต์๋์ง ์๋ ๋ฌธ์ ์ ๋น ์ก๋คโฆ ํน์ ํจํค์ง๋ฅผ ์ค์นํ์๋ฉด์ ์์คํ ํ์ผ์ ๊ฑด๋๋ฆฐ ๊ฒ ๊ฐ์๊ณ .. ๋์ ํ ๋ณต๊ตฌ ๋ชจ๋์์๋ ์ด๋ฆด ๋ฐฉ๋ฒ์ด ๋ณด์ด์ง ์์๋ค๐ฅ ๊ทธ๋๋ ์ฃผ์ ์ฝ๋ ๋ฐ ๋ฐ์ดํฐ๋ ํ๋๋ก ๊ด๋ฆฌํ๊ณ ์์๊ธฐ ๋๋ฌธ์ ์ฃผ์ ์ ๋ณด๋ ์ด๋ฆด ์ ์์๋คโฆ
(ํ๊ณ ์ฃผ์) ๊ฐ์ธ์ ์ผ๋ก ๋์ปค๋ฅผ ๋์ ํด์ ์ ์ฉํ๊ณ ์ถ์์ง๋ง ์ฌ๋ฌ๋ช ์ด์ ํ๋์ ์๊ฒฉ ๋ฐ์คํฌํ์ PoC ์คํ์ฉ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด๋ผ ์ฑ๋ฅ์ด ์ข์ง ์์๊ณ , ๊ธฐ์กด์ ์ฌ์ฉํด์ค๋ ํด ๋ฐ ๋ฐฉ์๋ค์ด ์๋ํฐ๋ผ ๋ด ๋ง์๋๋ก ๋์ ํ๊ธฐ๊ฐ ์ด๋ ค์ ๋คโฆ๐ฅ
์๋๊ฐ ๊ธธ๊ธด ํ์ง๋ง ์ด ์ฐธ์ UBUNTU
๋ฅผ ์๋กญ๊ฒ ์ค์นํ๊ณ ๊ธฐ์กด์ ์ค๋๋ ๋ ๊ฑฐ์ ์ฝ๋๋ค์ ์ ๋ฆฌํด์ฃผ๋ ์์
์ ์ํํ ์ ์์๋ค. ํ์ง๋ง, ์์ง๊น์ง ํ๊ฐ์ง ๋๊ด์ด ๋จ์์์๋ค! ๋ฐ๋ก๋ฐ๋ก ๋ฅ๋ฌ๋ ํ๊ฒฝ ์ค์ !! ํญ์ ๋ฅ๋ฌ๋ ํ๊ฒฝ ์ค์ ์ ํ๋ค๋ณด๋ฉด ๊ฐ์ฐจ(๋ฝ๊ธฐ)์ฒ๋ผ ์ด๋ค ๋ธ๋ก๊ทธ ๊ธ์ ์ฝ๋ ๊ฐ์ ๋ฐ๋ผ์ ํ๋ฒ์ ์ค์น๊ฐ ์ ๋ ๋๋ ์ ๋ ๋๋ ์๋ค. ๊ทธ๋์ ์ด์ฐธ์ ์๋กญ๊ฒ ์ค์น๋ฅผ ํ๋ฉด์ ๋ณธ์ง์ ํ์
ํ๊ณ ์ ๋๋ก ๋ ์ค์น๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค.
์ฉ์ด์ ๋ฆฌ
Nvidia Driver๋ ๋ฌด์์ธ๊ฐ?
์ ์
Nvidia Driver๋ Nvidia ๊ทธ๋ํฝ ์นด๋
์ ์ปดํจํฐ ์ด์ ์ฒด์ (OS)
๊ฐ์ ํต์ ์ ๊ด๋ฆฌํ๊ณ ์ ์ด
ํ๋ ์ํํธ์จ์ด์ด๋ค. ์ด ๋๋ผ์ด๋ฒ๋ ํ๋์จ์ด์ ์ํํธ์จ์ด ๊ฐ์ ์ธํฐํ์ด์ค ์ญํ ์ ํ๋ฉฐ, GPU๋ฅผ ์ต์ ์ ์กฐ๊ฑด์์ ์๋ํ๊ฒ ํ๋ค.
์ญํ
๊ทธ๋ํฝ ์ฑ๋ฅ ์ต์ ํ
: ์ต์ ๊ฒ์ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง์ถฐ ๊ทธ๋ํฝ ์ฑ๋ฅ์ ์กฐ์ ํ๊ณ ์ต์ ํํ๋ค.ํธํ์ฑ ์ ์ง
: ์ด์ ์ฒด์ ์ ๋ฐ์ดํธ๋ ์ํํธ์จ์ด ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ๋ผ ํธํ์ฑ์ ์ ์งํ๋ค.์ค๋ฅ ์์
: ๋ฐ๊ฒฌ๋๋ ๋ฒ๊ทธ๋ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ์์ ์ฑ์ ๋ณด์ฅํ๋ค.
CUDA๋ ๋ฌด์์ธ๊ฐ?
์ ์
CUDA(Compute Unified Device Architecture)๋ Nvidia๊ฐ ๊ฐ๋ฐํ ๋ณ๋ ฌ ์ปดํจํ
ํ๋ซํผ ๋ฐ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ด๋ค. CUDA๋ ๊ฐ๋ฐ์๊ฐ Nvidia GPU๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ฐ ์ฒ๋ฆฌ ์์
์ ๊ณ์ฐ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ํ
ํ ์ ์๊ฒํ๋ค.
์ญํ
๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ฐ์ํ
: ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ๋ณต์กํ ๊ณ์ฐ์ GPU์์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ์ฌ CPU๋ง ์ฌ์ฉํ ๋๋ณด๋ค ๋น ๋ฅด๊ฒ ์์ ์ ์๋ฃํ ์ ์๋ค.๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ง์
: ๊ณผํ ์ฐ์ฐ, ์์ง๋์ด๋ง, ๋ฅ๋ฌ๋ ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ํ์ฉ๋๋ค.
CUDA Toolkit์ด๋ ๋ฌด์์ธ๊ฐ?
์ ์
CUDA Toolkit์ CUDA ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ๊ณต
ํ๋ ์ํํธ์จ์ด ํจํค์ง๋ก, GPU ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ํ์ํ ์ปดํ์ผ๋ฌ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋๊ตฌ, ์ํ ์ฝ๋๋ฅผ ํฌํจํ๊ณ ์๋ค.
์ญํ
๊ฐ๋ฐ ๋๊ตฌ ์ ๊ณต
: CUDA ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ํ์ํ ๋ค์ํ ๋๊ตฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ค.์ฑ๋ฅ ๋ถ์
: ๊ฐ๋ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋ถ์ํ๊ณ ์ต์ ํํ ์ ์๋ ๋๊ตฌ๋ฅผ ํฌํจํ๋ค.
cuDNN(cuda Deep Neural network Library)
์ ์
cuDNN์ ๋ฅ๋ฌ๋ ์ฐ์ฐ์ ์ํด ์ต์ ํ๋ GPU ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ด๋ค. NVIDIA์์ ์ ๊ณตํ๋ฉฐ, ํนํ ์ฌ์ธต ์ ๊ฒฝ๋ง(deep neural networks)์ ํ์ต ๋ฐ ์ถ๋ก ์ ๊ฐ์ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์ญํ
๋ฅ๋ฌ๋ ์ฑ๋ฅ ์ต์ ํ
: ๋ค์ํ ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ์ ์ฐ๋ํ์ฌ ๋์ ์ฑ๋ฅ์ ๋ฐํํ ์ ์๋๋ก ๋๋๋ค.ํ์ต ์๊ฐ ๋จ์ถ
: ๊ณ ์ฑ๋ฅ ์ปดํจํ ํ๊ฒฝ์ ํ์ฉํ์ฌ ๋ชจ๋ธ ํ์ต ์๊ฐ์ ํฌ๊ฒ ์ค์ธ๋ค.
์ค์น ๋ฐฉ๋ฒ (UBUNTU 18.04LTS)
UBUNTU 18.04 LTS์ cuda12.1๋ฒ์ ๊ณผ cudnn8.7.0๋ฒ์ ์ ์ค์นํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํ๊ณ ์ค์น ๋ฐฉ๋ฒ์ ๋ํด์ ์ค๋ช ํด๋ณด๊ฒ ๋ค.
-
NVIDIA ๋๋ผ์ด๋ฒ ์ค์น
1
2
3
4
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
ubuntu-drivers devices
sudo apt install nvidia-driver-550
sudo add-apt-repository ppa:graphics-drivers/ppa
: Ubuntu์ ์ถ๊ฐ์ ์ธ ์ํํธ์จ์ด ํจํค์ง๋ฅผ ์ ๊ณตํ๋ ์ธ๋ถ ์ ์ฅ์(PPA)๋ฅผ ์ถ๊ฐํ๋ค. ์ด ์ ์ฅ์๋ NVIDIA์์ ์ ๊ณตํ๋ ์ต์ ๊ทธ๋ํฝ ๋๋ผ์ด๋ฒ๋ค์ ํฌํจํ๊ณ ์๋ค.sudo apt update
: ์์คํ ์ ํจํค์ง ๋ฆฌ์คํธ๋ฅผ ์ ๋ฐ์ดํธํด์ ์๋ก์ด ์ ์ฅ์์ ๋ด์ฉ์ ํฌํจ์ํจ๋ค. ์ด ๊ณผ์ ์ ํตํด ์ต์ ๋๋ผ์ด๋ฒ๋ฅผ ๊ฒ์ํ๊ณ ์ค์นํ ์ ์๊ฒ ์ค๋นํ๋ ๋จ๊ณ๋ผ๊ณ ์ดํดํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.ubuntu-drivers devices
: ์ค์น๊ฐ๋ฅํ NVIDIA ๊ทธ๋ํฝ ์นด๋ ๋๋ผ์ด๋ฒ ๋ชฉ๋ก์ ๋ณด์ฌ์ค๋ค. ํ์์ ๊ฒฝ์ฐ ํ ๊ณต์ฉ ์๋ฒ๋ก 1080 GPU๋ฅผ ์ฌ์ฉํ๊ณ ์๊ณ ํด๋น GPU์ ๊ฐ์ฉ ๊ทธ๋ํฝ ์นด๋ ๋๋ผ์ด๋ฒ ๋ชฉ๋ก์ ์๋์ ๊ฐ๋ค. ๋ญ๋ ์ค์น๋ ๊ฐ๋ฅํ์ง๋งrecommend
ํด์ฃผ๋ ๊ฒ์ ์ค์นํด๋ณด๋๋ก ํ๊ฒ ๋ค.
sudo apt install nvidia-driver-550
: ์ง์ ๋ ๋ฒ์ ์ NVIDIA ๊ทธ๋ํฝ ๋๋ผ์ด๋ฒ๋ฅผ ์ค์นํ๋ค. ์ด ๋๋ผ์ด๋ฒ๋ GPU์ ์ด์ ์ฒด์ ๊ฐ์ ํจ์จ์ ์ธ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๊ณ , ์ต์ ํ๋ ์ฑ๋ฅ์ ์ ๊ณตํด์ค๋ค.
๐ก ๋ฌด์จ ๋๋ผ์ด๋ฒ๋ฅผ ์ค์นํด์ผํ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค๊ณ ?
์์ ์์์๋ ์ง์ ์ํ๋ ์๋ ๋ฒ์ ์ ๋๋ผ์ด๋ฒ๋ฅผ ์ค์นํ๋ ์์๋ฅผ ์ ์ํ๊ณ ์๋ค.
ํ์ง๋ง, ๊ถ์ฅ ๋๋ผ์ด๋ฒ๋ฅผ ์๋์ผ๋ก ์ค์นํด์ฃผ๋ ํจ์ ๋ํ ์กด์ฌํ๋ค.
โ๏ธ
sudo ubuntu-drivers autoinstall
-
CUDA ๋ฐ CUDA Toolkit ์ค์น
ํ์๋ ํ์ดํ ์น๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก ํ ์น์์ ์๊ตฌํ๊ณ ์๋ cuda11.8์ ์ค์นํด๋ณผ ์์ ์ด๋ค.
(์ฐธ๊ณ : ์ด์ ๋ฒ์ ์ ํ์ดํ ์น๋ฅผ ์ค์นํ๋ ค๋ฉด? => https://pytorch.org/get-started/previous-versions/)
CUDA Toolkit๋ค์ ๋ค์ด๋ก๋ ์์ค๋ค์ ๋ค์ ๋งํฌ์์ ์ ๊ณต๋๊ณ ์๋ค.
์ด ์ค์ ํ์ด๋ผ์ดํธ๋ฅผ ์ณ์ค 11.8.0์ ๋ค์ด๋ฐ์์ค ๊ฒ์ด๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋ณธ์ธ์ ์๋ฒ(๋ฐ์คํฌํ) ํ๊ฒฝ์ ๋ง๊ฒ ์ค์ ์ ํด์ค๋ค.
1
2
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run
wget
: ์ง์ ๋ URL์์ ํ์ผ์ ๋ค์ด๋ก๋ํ๋ค.sudo sh cuda_11.8.0_520.61.05_linux.run
: ๋ค์ด ๋ฐ์ ์คํ ํ์ผ์ ์์์ ์คํํ์ฌ ๋ค์ด ๋ฐ๋๋ค.
-
์คํํ๋ฉด ์๋์ ๊ฐ์ ๋ค์ด๋ก๋ ์ฐฝ์ด ๋์จ๋ค. (
ACCEPT
) -
์ด๋ฏธ ์์์ Driver ์ค์น๋ฅผ ์๋ฃํ์ผ๋ฏ๋ก, Driver์ฒดํฌ๋ ํด์ ํ๊ณ , CUDA์ค์น๋ฅผ ์งํํ๋ค.
์ด? CUDA๋ฅผ ์ค์นํ์์๋ ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋๋ฐ์?
1 2 # ์ ์ ํ ์๋ ์ฝ๋ ์ถ๊ฐ (๋ณธ์ธ CUDA๋ฒ์ ์ ๋ง๊ฒ ์ค์ ํ ๊ฒ) vim ~/.bashrc
1 2 3 4 # https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#post-installation-actions%5B/url%5D export export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64\ ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
-
cuDNN ์ค์น
์์์ CUDA๋ฅผ ์ค์น๋ฅผ ์๋ฃํ๊ณ , ์ด์ CuDNN์ ์ค์นํ๋ ค๊ณ ํ๋ค. Tensorflow์ ๊ฒฝ์ฐ, ํนํ๋ CUDA ๋ฐ CuDNN์ ๋ฒ์ ์ ๋ฏผ๊ฐํ๊ธฐ ๋๋ฌธ์ ์ค์น ์ ๋ฒ์ ์ ์ ์ํด์ ์ค์น๋ฅผ ์ํํด์ผ ํ๋ค.
- Tensorflow ์ง์ CUDA/CuDNN ๋ฒ์ ์ ๋ณด
์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ํ ์ํ๋ก์ฐ์ ๊ฒฝ์ฐ, CUDA 11.8์ด๋ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ cudnn์ 8.6๊ณผ 8.7์ธ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด์ ์๋ ๋งํฌ๋ก ๋ค์ด๊ฐ์ cudnn 8.7์ ๋ค์ด๋ฐ๊ณ ์ค์นํด๋ณด๊ฒ ๋ค.
- CuDNN ์์นด์ด๋ธ : https://developer.nvidia.com/rdp/cudnn-archive
1
2
3
4
tar -xvf cudnn-linux-x86_64-8.7.0.84_cuda11-archive.tar.xz
sudo cp cudnn-linux-x86_64-8.7.0.84_cuda11-archive/include/cudnn*.h /usr/local/cuda-11.8/include
sudo cp -P cudnn-linux-x86_64-8.7.0.84_cuda11-archive/lib/libcudnn* /usr/local/cuda-11.8/lib64
sudo chmod a+r /usr/local/cuda-11.8/lib64/libcudnn*
tar -xvf
: ๋ค์ด๋ก๋ํ cuDNN์ ์์ถ์ ํ์ด์ค๋ค.sudo cp
: cuDNN ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ๊ณผ ํค๋ ํ์ผ์ ์ ์ ํ CUDA ๋๋ ํ ๋ฆฌ๋ก ๋ณต์ฌํ๋ค. ์ด๋ CUDA์ ํจ๊ป cuDNN์ด ์๋ํ ์ ์๋๋ก ์ค์ ํ๋ค.sudo chmod a+r
: ๋ณต์ฌ๋ ํ์ผ๋ค์ ๋ํด ์ฝ๊ธฐ ๊ถํ์ ์ถ๊ฐํ์ฌ ๋ค๋ฅธ ์ฌ์ฉ์๋ ์ด ํ์ผ๋ค์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
์ด๋ฏธ ํน์ ๋ฒ์ ์ CUDA ๋ฐ cuDNN๊ฐ ๊น๋ ค์์ ๋
1
2
sudo apt-get --purge remove "cuda*"
sudo apt-get --purge remove "cudnn*"
sudo apt-get --purge remove
: ์์คํ ์ ์ค์น๋ CUDA ๋๋ cuDNN์ ๊ธฐ์กด ๋ฒ์ ์ ์์ ํ ์ ๊ฑฐํ๋ค. ์ด ๋ช ๋ น์ ์ค์ ํ์ผ์ ํฌํจํ์ฌ ๊ด๋ จ๋ ๋ชจ๋ ํ์ผ์ ์ญ์ ํ๋ค.
์ค์น ์๋ฃ ํ ๋ฒ์ ํ์ธ ์ฝ๋
์๋ ๋ ์ฝ๋ ๋ผ์ธ์ผ๋ก ๊ฐ๊ฐ ์ค์น๋์ด ์๋ CUDA ๋ฐ CUDNN ๋ฒ์ ์ ํ์ธํ ์ ์๋ค.
- CUDA ๋ฒ์ ํ์ธ
1
nvcc --version
1 2 3 4 5 6
# ๊ฒฐ๊ณผ nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2022 NVIDIA Corporation Built on Wed_Sep_21_10:33:58_PDT_2022 Cuda compilation tools, release 11.8, V11.8.89 Build cuda_11.8.r11.8/compiler.31833905_0
- CUDNN ๋ฒ์ ํ์ธ
1
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
1 2 3 4 5 6
# ๊ฒฐ๊ณผ #define CUDNN_MAJOR 8 #define CUDNN_MINOR 7 #define CUDNN_PATCHLEVEL 0 -- #define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)