Machine Learning

Deep Learning 서버 구축(nvidia Driver, CUDA, cuDNN)

Y30L 2024. 1. 29. 21:49

Deep Learning 서버 구축을 처음하다보니 Ubuntu 포맷만 10번 정도 한 것 같다...겨우겨우 구축을 완료하였고 다음에 혹시라도 하나하나 다 찾아보는 삽질을 안하기 위해 해당 글을 포스팅하기로 마음먹었다😭

 


⚠️Version 호환성 확인

nvidia Driver, CUDA, cuDNN 버전 호환성 확인이 서버 구축을 하며 가장 중요한 부분이라고 생각한다. 해당 부분을 정확히 인지하지 않고 설치하면 GPU가 정상적으로 인식되지 않거나 DL 코드 실행 중 DNN library is not found(버전 호환성 에러)에러가 발생하지 않는다.

이번에 설치한 Ubuntu 환경 및 각 파일들의 버전은 아래와 같다.

 

우선, 사용하고자 하는 Tensorflow의 버전과 호환되는 CUDA, cuDNN 버전을 확인한다.

Windows

https://www.tensorflow.org/install/source_windows?hl=ko#tested_build_configurations

 

Windows의 소스에서 빌드,Windows의 소스에서 빌드  |  TensorFlow

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English Windows의 소스에서 빌드,Windows의 소스에서 빌드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하

www.tensorflow.org

Mac and Linux

 

https://www.tensorflow.org/install/source?hl=ko#tested_build_configurations

 

소스에서 빌드  |  TensorFlow

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 소스에서 빌드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 소스에서 TensorFlow pip 패키

www.tensorflow.org

 

여러 버전 중 해당 버전을 사용하여 설치하였다.(특별한 이유는 없다..)

 

이후 선택한 CUDA 버전이 PyTorch도 호환되는지 확인한다. PyTorch는 주로 CUDA 12.1과 11.8 버전을 지원하고 있다.

(해당 버전 이외에도 사용 가능하다는 여러 글이 존재하였지만, 구축 시 에러가 다수 발생해 가능한 명시되어 있는 버전만 사용하였다.)

https://pytorch.org/get-started/locally/

 

Start Locally

Start Locally

pytorch.org

 


👨‍💻1. Nvidia 드라이버 설치

기존 nvidia 및 CUDA 관련 파일이 존재할 경우 설치 중 환경 문제로 인해 에러가 발생할 가능성이 존재하므로, 기존 파일은 삭제한다.

$ sudo apt-get remove --purge nvidia-*
$ sudo apt-get autoremove
$ sudo apt-get update

 

이후 nvidia 드라이버를 설치한다.(가능한 최신버전이나 바로 한 단게 아래 버전을 선택한다.)

$ ubuntu-drivers devices
$ sudo apt-get install nvidia-driver-[원하는 버전]
$ sudo apt-get install dkms nvidia-modprobe
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo reboot

 

재부팅 후 nvidia-smi 명령어를 실행하였을 때 GPU가 정상적으로 인식된다면 nvidia Driver 설치는 완료된 것이다.

$ nvidia-smi

nvidia-smi 결과

 


👨‍💻2. CUDA 설치

설치하기 원하는 CUDA 버전을 선택한 후 runfile(local)파일을 선택한다. 이후 아래에 출력되는 명령어를 실행한다.

https://developer.nvidia.com/cuda-toolkit-archive

 

CUDA Toolkit Archive

Previous releases of the CUDA Toolkit, GPU Computing SDK, documentation and developer drivers can be found using the links below. Please select the release you want from the list below, and be sure to check www.nvidia.com/drivers for more recent production

developer.nvidia.com

CUDA Version Selection

 

가장 처음에 나오는 화면에서 Continue를 선택하고 Accept를 입력한다. 이후 아래 그림과 같은 화면이 나오는데 nvidia 드라이버는  설치하였기에 체크를 해제하고 Install을 선택한다.

CUDA Install(출처 : Reference(2))

 

 

설치가 완료된 후에는 환경변수를 설정하고 Source 명령어로 적용한다.

(명령어 내 경로는 버전에 맞도록 변경)

$ sudo sh -c "echo 'export PATH=$PATH:/usr/local/cuda-11.8/bin'>> /etc/profile"
$ sudo sh -c "echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.8/lib64'>> /etc/profile"
$ sudo sh -c "echo 'export CUDADIR=/usr/local/cuda-11.8'>> /etc/profile"
$ source /etc/profile

 

정상적으로 설치되었는지 확인하기 위해 nvcc -V 명령어를 입력한다. 아래와 같이 설치한 CUDA 버전이 출력되었다면 정상적으로 출력된 것이다.

nvcc -V 결과

$ nvcc -V

 


👨‍💻3. cuDNN 설치

해당 사이트에서 선택한 cuDNN 버전을 설치한다.

https://developer.nvidia.com/cudnn

 

CUDA Deep Neural Network

cuDNN provides researchers and developers with high-performance GPU acceleration.

developer.nvidia.com

 

설치한 파일의 압축을 풀고 /usr/local/cuda 디렉토리로 파일을 복사한다.

$ tar -xvf cudnn-linux-x86_64-8.6.0.163_cuda11-archive.tar.xz
$ cd cudnn-linux-x86_64-8.6.0.163_cuda11-archive
$ sudo cp include/cudnn* /usr/local/cuda/include
$ sudo cp lib/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

 

압축을 별도로 해제하고 파일을 복사하였기 때문에 심볼릭 링크 설정이 필수적으로 진행되어야 한다. 아래는 심볼릭 링크를 설정하는 명령어이고 설치한 버전에 맞도록 변경한다.

(CUDA 및 cuDNN 버전에 맞게 변경 필수)

$ sudo ln -sf /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.7.0 /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_adv_train.so.8
$ sudo ln -sf /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.7.0  /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8
$ sudo ln -sf /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.7.0  /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8
$ sudo ln -sf /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.7.0  /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8
$ sudo ln -sf /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.7.0  /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_ops_train.so.8
$ sudo ln -sf /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.7.0 /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8
$ sudo ln -sf /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn.so.8.7.0 /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn.so.8

 

ldconfig 명령어를 사용하여 변경한 심볼릭 링크 설정 정보를 갱신하고 잘 반영되었는지 확인한다.

$ sudo ldconfig
$ ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH) 2>/dev/null | grep libcudnn

 

정상적으로 설치되었다면 아래와 같은 화면이 출력된다.

cuDNN 심볼릭 링크 설정 후

 


👨‍💻4. Tensorflow 설치

간혹 Tensorflow와 PyTorch는 같은 환경에 설치할 경우 에러가 발생할 수도 있다고 하여 각각 다른 가상 환경에 설치하였다. Python venv를 사용하여 가상 환경을 활성화하고, 실행한다.

$ python3 -m venv [가상환경 이름]
$ source [가상환경 이름]/bin/activate

 

원하는 Tensorflow 버전을 설치한다.

$ pip install tensorflow==2.14.0

 

정상적으로 설치되었는지 확인하기 위해 아래 코드를 실행한다.

$ python
import tensorflow as tf
tf.__version__
tf.config.list_physical_devices('GPU')

 

와 같이 GPU가 정상적으로 잡힌다면 인식되는 것이고 아무것도 출력되지 않고 빈 대괄호라면 오류가 발생하거나 정상적인 인식이 이루어지지 않는 것이다.

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

 


👨‍💻5. PyTorch 설치

PyTorch는 Tensorflow와 다른 가상 환경에 설치하기 위해 위와 동일한 방식으로 가상 환경을 생성한다. 이후 아래 그림에 존재하는 버전에 맞는 명령어를 실행하면 정상적으로 설치가 완료된다.

(설치하는 주소는 가장 상단에 존재한다 - 호환성 검사 부분)

PyTorch 설치

 


👨‍💻6. PyTorch 설치

GPU가 정상적으로 인식되더라도 가끔 코드를 실행하다보면 DNN library is not found 에러가 간혹 발생한다. 이는 버전에 의한 문제이며 이로 인해 정상적인 DL 코드가 실행되지 않는다. 이를 사전에 방지하기 위해 Test Tool로 확인하였다.

https://github.com/tobybreckon/python-cnn-tools-test

 

GitHub - tobybreckon/python-cnn-tools-test: a set of simple tools to check if we have TensorFlow, Keras and PyTorch setup correc

a set of simple tools to check if we have TensorFlow, Keras and PyTorch setup correctly to use GPU - GitHub - tobybreckon/python-cnn-tools-test: a set of simple tools to check if we have TensorFlow...

github.com

 

이외에도 Tensorflow 및 PyTorch 각각 예시 코드를 돌려보는 것을 추천한다. 그래픽 사용량이 증가하며 코드 자체에 에러가 발생하지 않는다면 모든 설치는 완료된 것이다.

 

그래픽 관련 사용량을 확인하는 코드 또한 첨부하였다.

nvidia-smi -l 1 # 1초에 한번 업데이트
watch -d -n 0.5 nvidia-smi # 0.5초 간격으로 Diff에 대해 하이라이트해서 보여줌

 


👨‍💻 Reference

nvidia, cuda, cudnn 설치 방법 (ubuntu 20.04) - vividian repository

 

nvidia, cuda, cudnn 설치 방법 (ubuntu 20.04) - vividian repository

기존 설치된 nvidia 드라이버와 cuda를 깔끔하게 삭제한다.

vividian.net

Ubuntu 22.04에 CUDA 11.8 설치하는 방법

 

Ubuntu 22.04에 CUDA 11.8 설치하는 방법

Ubuntu 22.04에 CUDA를 설치하는 방법을 다룹니다. 2022. 12. 2 최초작성 2022. 12. 17 2023. 12. 30 Ubuntu 22.04.3 LTS에서 발생한 문제 해결방법 추가 cudnn 버전 관련 수정 2024. 1. 6 사소한 변경, cuDNN 8.6으로 변경 현

webnautes.tistory.com