GPU 사용을 위한 CUDA 환경 구성하기

최세환·2020년 12월 30일
12

경험

목록 보기
3/4
post-thumbnail

이번에 데스크탑을 맞추면서 Geforce RTX 3080 그래픽카드를 구매하였다.
근데 GPU를 딥러닝에 학습에 사용하기 위해선 여러 환경 구성이 필요하다는 걸 깨닫고 설치하는데

5일이 걸렸다;;
글카 가격만 90만원이라 무조건 성공시켜야했다... ( 총 견적이 120인건 비밀 )

설치해야할 것이 아래와 같이 3가지이다.

  • Anaconda
  • NVIDIA DRIVER
  • CUDA Toolkit
  • Visual Studio
  • Cudnn

나는 위 순서대로 설치를 진행했다.

이 5가지가 모두 호환되는 버전을 찾아 설치해줘야한다. (호환이 안돼서 6번을 재설치했다^^)
처음 설치할 때 정확히 알고 설치를 진행해야 정신 건강에 이롭다.
4번째 재설치할 때 쯤엔 구글에 모든 자료를 읽어봤을 정도였는데도 6트만에 성공하였다.
한 번에 성공하는 사람이 거의 없다고 하니 될 때까지 시도해보자...

본 포스트는 RTX 3080 을 기준으로 작성할 것이다.
이하 제품들은 자료가 그래도 조금 있는 편이니 검색해보자
아래 링크들은 내가 가장 도움을 많이 받은 포스트들이다.

  1. TheoryDB 블로그
  2. junn.net <- 2020.12수정 (최신자료)
  3. 핸즈온민러닝 <- 이건 cuda 재설치 자료이다. (한 번 실패하면 재설치가 답...)

1. 설치 방법 이해하기

설치를 시작하기 전 먼저 공식문서 가이드를 읽어보자. : TensorFlow 공식문서
네비게이션 바에서 GPU 지원을 메뉴를 선택하여 빨간 네모 박스 부분만 읽어도 무방하다.
솔직히 나는 너무 읽기 싫었다.


2. 설치하기

설치 방법을 대충 이해했으면 자신의 PC 환경을 알아야한다.
무작정 최신버전을 설치하면 안된다. 무조건 호환성 문제에 걸린다.

내 PC 환경은 아래와 같다.

  • Window10 64-bit
  • Python 3.7
  • Anaconda 4.9.2
  • CUDA Toolkit 11.1
  • cuDNN v8.04 for CUDA Version 11.1
  • NVIDIA GPU drivers 460.89
  • Visual Studio 2019

자신의 GPU와 맞는 버전들을 찾기 위해선 공식문서를 보는 것이 최고다.

NVIDIA 공식문서
Tensorflow 공식문서

2-1 Anaconda 설치

아나콘다는 따로 설명할 게 없이 최신 버전을 설치해주자.
현재 기준 python 3.8이 가장 최신버전인데 이 버젼은 호환이 잘 안된다고 하지만
나중에 가상 환경 구성할 때 3.7 버젼으로 바꿔주면 된다.

Anaconda 설치

2-2 NVIDIA DRIVER 설치

다음으로 NVIDIA GPU 드라이버를 설치해야한다.
드라이버는 따로 버전을 확인할 필요없이 자신의 GPU에 맞는 것을 검색해서 설치해주면 된다.
아래와 같이 자신의 컴퓨터 환경에 맞는 것을 선택하고 SEARCH 버튼을 눌러 설치하자

나는 RTX 3080 기준 아래 드라이버를 설치했다.

정상적으로 설치되었는지 확인하려면 cmd 창에 들어가 아래 명령어를 입력해보자

nvidia-smi

아래는 내 결과인데 CUDA Version 까지 확인할 수 있다. 이 버전을 기억해두자.

여기까진 그래도 잘못될 일이 거의 없다.
이제부터 중요하다.

2-3 Cuda Toolkit 설치하기


Cuda Toolkit 설치 사이트

여기서 내 GPU와 호환이 되는 툴킷 버젼을 잘 설치해야한다.
나도 많은 문서를 찾아보았지만 내 모델에 대한 호환성 밖에 모른다.
RTX 3080은 11.1 이상만 호환하므로 11.0 이하로는 설치하면 돌아가질 않는다.

나는 내 CUDA Version이 11.2 이길래 처음에 11.2 버젼을 설치했다.
근데 이후에 설치할 cudnn은 또 11.2를 위한 버젼이 없다.
최종적으로는 11.1.0 버젼을 설치해 성공했다.

주형 Coding Groot <- 이 분이 호환 버전 설치 설명을 잘 해 놓으셨다.

2-4 Visual Studio 설치하기

CUDA Toolkit 각 버전의 Installation Guide Windows를 보면 어떤 Visual Studio가 호환되는지 알 수 있다.
아래 사진은 11.1.0 버전 기준이다.

Visual Studio 2019가 호환되는 것을 알 수 있다.
그래서 난 가장 최신 버전인 Visual Studio 2019를 설치했다.

여기까지 설치했으면 툴킷이 정상적으로 설치되었는지 확인할 수 있다.

Visual Studio 2019 실행 -> 새 프로젝트 만들기 -> 맨 아래로 스크롤 (아래 사진)

CUDA 11.1 Runtime이 보인다. (툴킷이 정상적으로 설치가 되지 않으면 안보인다.)
프로젝트를 만들고 Ctrl + R 키를 눌러 실행해 아래와 같이 실행되면 아주 잘 된 것이다.

2-5 cudnn 설치하기

cudnn은 반드시 툴킷 버전과 맞춰서 설치해줘야한다.

난 처음 11.2 버젼을 설치했을 때 11.2 버전이 없어서 v8.04 for CUDA 11.1을 설치해서 고생했다.

cudnn 설치

설치 후 압축을 푼 후 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1 폴더에 복붙하자.
bin 폴더, lib 폴더, include 폴더, NVIDIA_SLA_cuDNN_Support.txt 파일을 넣어준다.

정상적으로 됐다면 환경변수에 알아서 path 값이 생성되었을 것이다.
제어판 -> 시스템 및 보안 -> 고급 시스템 설정 -> 환경변수 로 이동하여 아래와 같은 path가 추가되었는지 확인하자.

cmd에 아래와 같은 명령어 또한 입력해보자.

둘 다 이상이 없다면 이제 거의 다 왔다.


3. 가상 환경 생성

가상 환경을 생성하는 이유는 다른 프로젝트들과 라이브버리 충돌을 피하기 위함이다.
꼭 해야하는 건 아니지만 tensorflow 공식문서에서도 가상 환경을 만들 것을 권장하고 있다.

conda create -n [가상환경이름] python=3.7

python 3.8 버전이 호환성 이슈가 많다고 하니 3.6~3.7 버전으로 가상환경을 만들어준다.
(CUDA마다 호환되는 python 버전이 또 있으므로 꼭 3.7 버전만 생각하진 말자)

가상 환경을 만들고 난 후 해당 가상환경으로 접근은 아래 명령어로 할 수 있다.

conda activate [가상환경이름]

그럼 프롬프트 앞에 (base) 가 (가상환경이름)으로 바뀔 것이다.

이후 tensorflow-gpu와 keras를 설치하자
일반 tensorflow와 tensorflow-gpu는 다른 모듈이다.
전자는 cpu만 지원하는 tensorflow 라이브러리지만 후자는 gpu까지 지원한다.
그러니 지금까지 우리가 한 고생은 tensorflow-gpu를 사용해야만 의미있다.
(최신 버전들은 tensorflow로 설치해도 gpu 모드라고 합니다)

cuda 11.0 버전 이상을 이용하기 위해서는
tensorflow 2.4.0 버전 이상을 설치하거나 nighty를 따로 설치해줘야한다.
나는 2.4.0 버전을 설치하였다.

pip install tensorflow-gpu==2.4.0

pip install을 사용해도 되고 conda install을 사용해도 된다.
이어서 keras 도 설치해주자.

pip install keras

이외 본인이 필요한 다른 모듈들도 동일하게 설치해주면 된다.

이제 jupyter notebook에서 gpu가 적용됐는지 확인하기전 가상환경을 추가해줘야한다.
먼저 jupyter notebook에 필요한 모듈과 ipkernel을 설치해야한다.

pip install jupyter notebook
pip install ipykernel

둘다 설치한 후 가상환경을 jupyter notebook kernel에 연결해준다.

python -m ipykernel install --user --name [가상환경이름]

이후 주피터 노트북을 실행시켜준다.
(반드시 가상머신에 접속한 상태에서 아래 명령어를 입력해주어야 환경이 유지된다.)

jupyter notebook

주피터에 접속하고 New를 누르면 우리가 추가한 가상환경이 추가되어 있다.
클릭해서 새 프로젝트를 만들자.

이제 최종적으로 gpu가 잘 연결되었는지 확인해보자.

from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())

위 코드를 셀에 입력하고 실행했을 때 아래 사진과 같이 나와야한다.

결과를 보면 CPU 정보가 먼저 나오고 GPU 정보가 다음으로 출력된다.
CPU 정보만 나온다면 GPU 연결에 문제가 생긴 것이다...
난 5일동안 CPU만 나왔는데 GPU가 나왔을 때 소리지를 뻔 했다.

CPU만 나온다면 아나콘다 프롬프트에 나오는 오류는 없는지 가장 먼저 체크하고
위에서 cmd에 입력했던 명령어들이 정상적으로 동작하는지 체크하고
각 버전들이 호환되는 게 맞는지 체크하자.

솔직히 GPU가 안나오기만 하지 따로 오류메세지가 나오는 게 아니라서 어디서 잘못된 건지 찾기가 정말 힘들다.
그래서 최대한 많은 자료를 찾아보며 재설치 해보는 게 맘 편하다.
한 번에 성공하였다면 당신은 천재다...


4. 한탄

딥러닝에 GPU 쓰기가 이렇게 어려운 건지 몰랐다.
연구실 생활을 할 때 교수님 졸라서 60만원 상당의 GPU를 샀었는데 난 이런걸 해줘야 하는지도 모르고 그냥 돌렸었다.
그냥 GPU는 장식용으로 달고 CPU만 쓴 셈이다...^^

6번 재설치를 하면서 정말 포기하고 싶었는데 가격이 가격인지라 포기할 수가 없었다.
이 작업을 두 번은 못할 것 같아서죽을 때까지 이 컴퓨터를 소중히 쓸 것 같다.

7개의 댓글

comment-user-thumbnail
2021년 3월 8일

글 잘 읽었습니다! 덕분에 gpu 인식까지는 해결했습니다.
다만 같은 코드로 tensorflow 2.4.0 버전을 cpu, gpu로 각각 설치해서 테스트 했는데 cpu는 epoch당 18초, gpu는 epoch당 75초 나오네요.... 뭐가 문제일까요?
cpu 3700x
gpu 3080
cuda 11.1.1
cudnn 8.0.5
driver 461.72

1개의 답글
comment-user-thumbnail
2021년 7월 28일

안녕하세요 세환님~!
현재 환경 구축은 다 잘 해놓고 device_lib도 잘 출력이 되는데
어제 jupyter notebook으로 모델을 돌릴때 CPU , GPU 사용량을 보니 CPU100% GPU0%더라구요..
이 부분과 관련해서 모델을 돌릴때 추가적인 명령어를 넣어줘야 하나요?
궁금하네요~

1개의 답글
comment-user-thumbnail
2022년 8월 8일

안녕하세요.
VS 설치후 런타임이 안보인데,
워크로드는 따로 설치하시는것이 없나요?

답글 달기
comment-user-thumbnail
2022년 8월 8일

넘넘 감사합니당 ㅠㅠㅠㅠ 계속 안돼다가 덕분에 해결했어요 !!! 저듀 소리지를뻔ㅋㅋㅋ 완전 공감 ㅠㅜㅠㅜㅠㅜ

답글 달기
comment-user-thumbnail
2023년 3월 10일

감사합니다. 전 한달 걸렸네요. 선배님 덕분에 성공할 수 있었습니다.

답글 달기