[개발 환경] GCP에서 GPU를 이용해 개발해보자! - 03

hun_dev·2022년 9월 16일
1
post-thumbnail

지난 게시글에서는 GCP에서 GPU를 할당받고 VM 인스턴스를 생성해보았습니다. 이번 게시글에서는 GPU 설정을 진행해보겠습니다.

지난 게시글은 해당 링크 또는 위의 시리즈를 통해 다시 볼 수 있습니다.

pip 설치

처음 VM 인스턴스를 실행하면 설치되어 있는 패키지들의 새로운 버전을 확인하고 업그레이드해줍니다. 터미널에 다음과 같이 입력해줍니다.

$ sudo apt-get update
$ sudo apt-get upgrade

다음과 같은 명령어를 터미널에 입력해 pip3을 설치합니다.

$ sudo apt-get install python3-pip

아래의 명령어를 입력하면 pip의 버전과 설치 경로를 알 수 있습니다.

$ pip3 --version

jupyter notebook 설정 (선택 사항)

해당 설정은 jupyter를 사용하고자 할 때만 진행하면 됩니다.

다음과 같은 명령어를 터미널에 입력해 jupyter를 설치합니다.

$ sudo apt-get install jupyter

jupyter 설치가 완료되었으면 환경설정을 위해 config 파일을 생성합니다.

$ jupyter notebook --generate-config

config 파일 생성이 완료되면 config 파일의 경로가 출력됩니다. config 파일을 열어 편집해보겠습니다. config 파일을 열면 주석처리된 문장들이 나열되어 있는 것을 볼 수 있습니다. 스크롤을 가장 아래로 내리거나 Ctrl + End를 눌러 파일의 마지막으로 이동합니다. a를 눌러 vi 입력모드로 진입합니다.

vi에 익숙하지 않은 분들을 위해 네이버 지식백과에서 vi 에디터 명령어 정리표를 제공합니다.

$ vi ~/.jupyter/jupyter_notebook_config.py

c = get_config()
c.NotebookApp.ip = 'VM 인스턴스의 외부 IP 주소'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888

c.NotebookApp.ip는 VM 인스턴스의 외부 IP 주소, c.NotebookApp.open_browser는 실행과 동시에 Web Browser의 실행 여부, c.NotebookApp.port는 VM 인스턴스 생성 시 jupyter 태그의 포트 번호를 설정합니다. 본 시리즈를 처음부터 따라오셨다면 8888을 입력하면 됩니다.

입력이 완료되었으면 ESC를 눌러 :wq를 입력해 수정 내용을 저장하고 파일을 닫아줍니다.

jupyter notebook을 사용하기 위한 환경설정이 완료되었습니다. 터미널에 다음과 같이 입력해 jupyter notebook 서버를 실행합니다.

$ jupyter-notebook --ip=0.0.0.0 --port=8888

정상 실행되면 jupyter notebook이 다음과 같이 실행되고 있다는 문구가 출력됩니다. 로컬에서 해당 notebook에 접근해보겠습니다. Web Browser를 열고 주소창에 다음과 같이 입력합니다.

http://외부IP주소:8888

입력하면 다음과 같이 패스워드 혹은 토큰을 입력하여 로그인하라는 페이지가 나타납니다.

VM 인스턴스의 터미널을 보면 The Jupyter Notebook is running at: 아래 주소 가장 뒤 token= 부분에서 토큰 정보를 알 수 있습니다.

복사 및 붙여넣기 후 jupyter notebook 서버에 로그인합니다.

토큰을 입력하는 번거로운 과정을 거치지 않고 싶다면 다음과 같이 입력하여도 됩니다.

http://외부IP주소:8888/?token=토큰

GPU 드라이버 설치

가장 먼저 진행해야 하는 것은 GPU 드라이버 설치입니다. 처음 VM 인스턴스를 생성하면 GPU 드라이버가 설치되어 있지 않습니다. 따라서 GPU 드라이버를 직접 설치해주어야 합니다.

GPU 드라이버를 입력하기 위해 드라이버 설치 패키지를 설치합니다.

$ sudo apt-get install ubuntu-drivers-common

설치가 완료되고 터미널에 다음과 같이 입력하면 GPU 종류와 설치 가능한 GPU 드라이버 목록이 출력됩니다.

$ ubuntu-drivers devices

저는 nvidia-driver-515를 설치하려고 합니다.

$ sudo apt-get install nvidia-driver-515

다음 명령어를 입력하면 추천 드라이버를 알아서 설치할 수도 있습니다.

$ sudo ubuntu-drivers autoinstall

원하는 드라이버를 설치하려면 첫 번째 방법으로, 추천 드라이버를 설치하려면 두 번째 방법으로 진행하면 됩니다.

설치가 완료되면 인스턴스를 재부팅하여 제대로 설치되었는지 확인합니다.

$ sudo reboot
$ nvidia-smi

위와 같이 출력되고 Driver Version이 설치한 버전과 같으면 제대로 설치된 것입니다.

CUDA 설치

CUDA는 NVIDIA에서 만든 GPU의 가상 명령어셋을 사용할 수 있도록 만들어주는 소프트웨어 레이어입니다. CUDA는 병렬 연산 수행을 돕습니다. GPU로 딥러닝을 진행하려면 필수로 설치해야 하는 것이지요.

CUDA는 많은 버전이 존재하며, 자신의 GPU 드라이버의 버전에 맞게 설치하면 됩니다. GPU 드라이버의 버전마다 호환 가능한 CUDA 버전은 해당 링크에서 참고할 수 있습니다.

저는 CUDA-11.2를 설치하려고 합니다. 추후에 설치할 TensorFlow와 PyTorch와 CUDA 버전의 호환이 중요하기 때문에 웬만하면 게시글대로 설치하는 것을 추천드립니다.

해당 링크에서 CUDA 전 버전을 설치할 수 있습니다. 원하는 CUDA 버전을 클릭하면 본인의 사양에 맞는 CUDA프로그램을 설치할 수 있습니다. 저는 CUDA Toolkit 11.2를 설치하도록 하겠습니다.

설치 방법이 세 가지 존재하는데 저는 runfile (local)로 설치하도록 하겠습니다. deb를 통한 설치 방법은 GPU 드라이버를 따로 설치하게 되어 기존에 설치한 드라이버 버전과 충돌이 일어나 설치 과정에 오류가 발생합니다. 따라서, GPU 드라이버를 따로 설치하지 않는 runfile 방법을 선택하였습니다.

사실 runfile 방법은 UI를 이용한 설치 방법입니다. 하지만 UI를 이용하지 않고 설치해보겠습니다.
sudo sh ~.run --silent --toolkit 명령어를 사용하면 UI 없이 CUDA Toolkit만 설치가 가능합니다.

$ wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run
$ sudo sh cuda_11.2.0_460.27.04_linux.run --silent --toolkit

정상적으로 설치가 완료되었으면 터미널에 아무것도 출력되지 않습니다. 터미널에 다음과 같이 입력하고 cuda, cuda-11.2 디렉토리가 있으면 정상적으로 설치가 완료된 것입니다.

$ ls /usr/local

설치가 완료되었으면 CUDA PATH를 설정해주어야 합니다.
PATH는 .bashrc 파일을 열어 설정할 수 있습니다. bashrc 파일을 열어 스크롤을 가장 아래로 내리거나 Ctrl + End를 눌러 파일의 마지막으로 이동하여 입력하면 됩니다.

$ vi ~/.bashrc

export PATH=/usr/local/cuda-11.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

입력이 완료되었으면 :wq를 입력해 저장 후 파일을 닫습니다.
다른 CUDA 버전을 설치하신 분은 경로 중간에 있는 cuda-11.2 부분을 버전에 맞게 변경해주시면 됩니다.

입력이 완료되었으면 다음과 같이 입력하여 수정 내용을 저장하고 업데이트합니다.

$ source ~/.bashrc

다음과 같이 입력하여 CUDA가 올바르게 설치되었는지 확인할 수 있습니다. CUDA 버전도 함께 출력되는 것을 알 수 있습니다.

$ nvcc -V

cudnn 설치

CUDA와 마찬가지로 GPU를 사용하여 딥러닝하기 위해 필요한 cudnn을 설치해야 합니다. cudnn은 CUDA Deep Neural Network Library의 준말로 딥러닝을 효율적이고 빠르게 처리할 수 있게 돕는 라이브러리입니다.

cudnn은 CUDA와 다르게 파일을 직접 다운로드해 설치하여야 합니다. 따라서, 로컬에서 다운로드받은 후 VM 인스턴스로 업로드하는 과정이 필요합니다. 이 과정에서 jupyter를 사용하면 좀 더 빠른 업로드 및 다운로드가 가능합니다.

해당 링크에서 회원가입 후에 자신의 CUDA 버전에 맞는 cudnn을 설치할 수 있습니다. 저는 cudnn 8.1.0을 설치하도록 하겠습니다. 이또한 CUDA와 마찬가지로 추후에 설치할 TensorFlow와 PyTorch와 cudnn 버전의 호환이 중요하기 때문에 웬만하면 게시글대로 설치하는 것을 추천드립니다.

로컬에서 두 번째에 위치한 cuDNN Library for Linux (x86_64)를 클릭하여 다운로드받은 후, jupyter를 이용하거나 GCP에서 제공하는 파일 업로드 기능을 이용하여 VM 인스턴스로 업로드합니다.

VM 인스턴스로의 파일 업로드가 완료되면 파일 위치로 이동해 다음과 같이 입력합니다. 압축을 해제하는 명령어입니다.

$ tar -xvzf cudnn-11.2-linux-x64-v8.1.0.77.tgz

압축을 해제하고 다음과 같은 명령어를 터미널에 입력합니다.

$ sudo cp cuda/include/cudnn*.h /usr/local/cuda-11.2/include 
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda-11.2/lib64 
$ sudo chmod a+r /usr/local/cuda-11.2/include/cudnn*.h /usr/local/cuda-11.2/lib64/libcudnn*

다음과 같이 입력하여 cudnn이 올바르게 설치되었는지 확인할 수 있습니다.

$ cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

8.1.0 버전이 설치된 것을 알 수 있습니다.

GPU 설정 완료!

본 게시글에서 TensorFlow, PyTorch와 같은 딥러닝 라이브러리를 설치해보려고 하였으나, 예상 외로 게시글의 분량이 넘쳐버리는 바람에 다음 게시글에서 설치함으로 시리즈를 마무리해야할 것 같습니다.

CUDA, cudnn 설치 과정에서 가장 애를 먹었는데 (스트레스가 엄청납니다) 본 게시글을 보신 분들은 문제 없이, 오류 없이 잘 설치하여 스트레스받는 일이 없으셨으면 좋겠습니다.

피드백은 항상 감사히 받습니다. 설정 중 오류가 발생하거나, 게시글에 수정해야 할 내용이 있다면 댓글로 알려주세요!

profile
좋아하는 것이 잘하는 것이 될 때까지

2개의 댓글

comment-user-thumbnail
2023년 5월 18일

이번에 gcp 사용하면서 정말 큰 도움이 됐습니다 감사합니다!
이 부분은 변경되어야 할 것 같습니다.
$ ls ~/usr/local
$ ls /usr/local

1개의 답글