GPU 개발환경 구축하기: Nvidia driver / CUDA toolkit / cuDNN

whatSup CheatSheet·2022년 9월 25일
2
post-custom-banner

본 글은 Ubuntu 22.04.1 LTS 환경에서 진행하였습니다.

CUDA

CUDA(Computed Unified Device Architecture)란?

  • CUDA는 GPU 컴퓨팅에서 일종의 컴파일러 역할을 수행합니다.
    • 여기서 컴파일러란, 인간의 언어에 가까운 고급 언어로 작성된 원시 프로그램을 입력으로 받아 기계어 된 목적 프로그램을 출력하기 위해 사용되는 언어 번역 프로그램을 의미합니다.

CUDA의 등장

  • 원래 GPU는 대규모 데이터를 효과적으로 처리할 수 있는 다중 연산 & 고속 병렬 연산 능력에도 불구하고 제한적인 범위에서만 사용되었습니다.
    • 그래픽스 처리 장치를 위한 범용 프로그래밍이 고급 그래픽 프로그래밍 기술 범주에 속했기 떄문에, 이에 익숙치 않은 일반 개발자들은 GPU를 이용하기 쉽지 않았기 때문입니다.
  • 그러나 엔비디아가 2006년 CUDA 솔루션을 출시하면서 상황은 달라졌습니다.
    • CUDA가 GPU에서 수행하는 병령 처리 알고리즘을 C언어들을 비롯한 표준 언어를 이용해 작성할 수 있도록 함으로써 일반 개발자들도 GPU를 활용할 수 있게 된 것입니다.
    • CUDA 아키텍처 덕분에 GPU 가속화 애플리케이션에서 애플리케이션의 연산 집약적인 부분은 수천 개의 GPU 코어에서 동시에 실행하고, 워크로드의 직렬 처리 부분은 단일 스레드 성능에 최적화된 CPU에서 처리할 수 있게 되었습니다.
  • 즉, 엔비디아 GPU가 AI와 고성능 컴퓨팅 분야의 솔루션으로 지목된 이유는 CUDA 덕분이라고 할 수 있습니다.

CUDA 툴킷(CUDA Toolkit)

  • 엔비디아 CUDA 툴킷은 GPU 가속화 애플리케이션 개발에 필요한 모든 것을 제공합니다.
    • GLU 가속화 라이브러리
    • 디버킹 및 최적화 툴
    • 컴파일러
    • 애플리케이션을 배포하기 위한 CUDA 런타임
  • 개발자들은 CUDA 툴킷을 사용하여 연산 집약적인 부분을 GPU에서 실행되도록 업데이트하여 애플리케이션을 가속화할 수 있습니다.

cuDNN(cuda Deep Neural network Library)

  • cuDNN은 엔비디아 CUDA 딥 뉴럴 네트워크 라이브러리, 즉 딥 뉴럴 네트웨크를 위한 GPU 가속화 라이브러리의 기초 요소로 컨볼루션(Convolution), 풀링(Pooling), 표준화(Normarization), 활성화(Activation)과 같은 것들을 빠르게 실행할 수 있도록 하는 라이브러리입니다.
  • cuDNN은 TensorFLow, PyTorch, Theano 등 대중적으로 널리 사용되는 딥러닝 프레임워크를 가속화합니다.

CUDA 설치하기

Nvidia driver 설치

  • 다음 명령어로 그래픽 카드와 사용가능한 driver 버전을 확인합니다.
ubuntu-drivers devices
  • 설치할 드라이버 버전을 확인한 뒤, 다음 명령어로 설치합니다.
# nvidia-driver-515 설치
sudo apt -y install nvidia-driver-515

# (참고) 자동으로 드라이버 버전 선택하여 설치
sudo ubuntu-drivers autoinstall

# 다음 명령어로 드라이버가 정상적으로 작동되는지 확인합니다. (GPU 장치 및 활용 상태 확인)
nvidia-smi

CUDA Toolkit 설치

  • Nvidia CUDA Toolkit Archive 에서 본인 환경과 맞는 환경을 설정해줍니다.
  • 하단에 있는 Base Installer를 터미널에 입력해줍니다.
wget https://developer.download.nvidia.com/compute/cuda/11.7.1/local_installers/cuda_11.7.1_515.65.01_linux.run
sudo sh cuda_11.7.1_515.65.01_linux.run
  • 이제 설치가 진행됩니다.

    • Contitnue 엔터

    • accept 입력 후 엔터

    • Driver 선택은 해제해준 뒤, Install

  • 설치가 완료되면, 다음과 같이 출력이 됩니다.

  • 마지막으로 CUDA Toolkit 관련 설정을 환경 변수에 추가해줍니다.

sudo sh -c "echo 'export PATH=$PATH:/usr/local/cuda-11.7/bin'>> /etc/profile"
sudo sh -c "echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.7/lib64'>> /etc/profile"
sudo sh -c "echo 'export CUDARDIR=/usr/local/cuda-11.7'>> /etc/profile"
source /etc/profile
  • 다음 명령어로 쿠다 버전을 확인할 수 있습니다.
# CUDA 버전 확인
nvcc -V

cuDNN 설치

  • Nvidia 홈페이지에서 자신의 CUDA 버전에 맞는 cuDNN을 다운받아서 설치하여야 합니다.
    • Nvidia developer 로그인이 필요합니다.
    • Download cuDNN 클릭 → (하단에 있는) Archived cuDNN Releases 을 클릭하면 릴리즈된 버전들을 모두 확인할 수 있습니다.

  • 설치파일을 다운받고, 적절한 위치에서 압축해제 합니다.
tar -xvf cudnn-linux-x86_64-8.5.0.96_cuda11-archive.tar.xz
  • 압축해제 한 파일을 다음과 같이 복사합니다.
# cuda는 압축해제 한 폴더입니다.
# 명령을 한 줄씩 수행해서 cuDNN 파일을 cuda가 설치된 곳에 복사하고 권한까지 부여합니다.
sudo cp cuda/include/cudnn* /usr/local/cuda/include
sudo cp cuda/lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.4.1 /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_adv_train.so.8
sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.4.1  /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8
sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.4.1  /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8
sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.4.1  /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8
sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.4.1  /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_train.so.8
sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.4.1 /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8
sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn.so.8.4.1 /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn.so.8
  • 설치를 확인합니다.
ldconfig -p | grep cudnn

PyTorch 설치 & CUDA가 잘 작동하는지 확인

  • Pyenv + Poetry로 가상환경을 생성하고, init하여 필요한 패키지를 추가합니다.
# 로컬 파이썬 설정
pyenv local python3.8.10

# pyproject.toml 생성 & 원하는 패키지 추가
poetry init

# torch 설치 이전에 다음 패키지들을 추가해주었습니다.
cat pyproject.toml

  • 가상환경에 진입하고, 패키지를 설치해줍니다.
# poetry 가상환경 생성 & 진입
poetry env use python3
poetry shell

# 패키지 설치
poetry install
# Run this command 내용
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116
  • 본 글에서는 pip가 아닌, poetry를 이용하여 설치할 것입니다.
    • poetry에서 pytorch를 설치하는 데 이슈가 있음을 확인했습니다(최근까지도 발견되는 이슈).
    • pyproject.toml에 직접 설치 url을 추가하는 방식으로 이를 해결할 수 있습니다.
  • 해결 방법에 따라 파이토치 설치 URL(위 커맨드에서 확인할 수 있습니다.)로 들어가서 환경에 맞는 설치파일의 링크를 복사합니다.
  • pyproject.toml을 열고 다음과 같이 URL을 추가합니다. (torchvision 등도 이와 똑같이 하면 됩니다.)
  • poetry를 업데이트 해주고, torch에서 GPU가 잘 작동되는지 확인합니다.
# poetry 업데이트(이슈에도 나와 있지만, 설치하는 데 시간이 조금 오래 걸릴 수 있습니다.)
poetry update

# python에서 torch에서 GPU가 잘 작동되는지 확인
python -c"
import torch
print(torch.cuda.is_available())"

Reference

profile
AI Engineer : Lv 0
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

환경변수에 CUDARDIR이 맞나요?

답글 달기