개발자입니다
[Keras 딥러닝] CUDA, cuDNN 설치하여 GPU 환경 구축하기 (Windows, 가상환경 사용, GTX 1060) 본문
[Keras 딥러닝] CUDA, cuDNN 설치하여 GPU 환경 구축하기 (Windows, 가상환경 사용, GTX 1060)
끈기JK 2024. 5. 19. 18:03약 열흘간 GPU 환경 구축하려고 별 짓 다했다.
포기할까도 생각했는데 학습 시킬때 마다 느려터져서 속이 터지고,
멀쩡히 달려있는 GPU 가 놀고 있는 꼴이 보기 싫어서 이것저것 다 시도해보았다.
결국, Windows OS의 GTX 1060에서 돌아가도록 했다!
내 현황
- OS: Windows 11
- 파이썬 버전: 3.6.7 (책 버전은 3.6.x 이면 됨)
- Conda 미사용이며, 가상환경 (venv) 사용
- Tensorflow version: 1.4 (책 버전은 1.x 이면 됨)
- GPU: GTX 1060
- GPU에 맞는 Compute capability (version): 6.1
- Compute Capability 및 Tensorflow 에 맞는 CUDA version: 8.0
- Tensorflow에 맞는 cuDNN version: 6
버전을 찾기 위한 흐름도
아래와 같이 변할 수 없는 GPU 를 맨 위에 놓았다.
처음부터 이렇게 흐름을 잡은건 아니었고, 여러 블로그를 보고 고민한 끝에 이런 흐름을 도출했다.
버전을 찾기 위한 여정을 떠나며 하나씩 차근차근 살펴보자
(그래픽 드라이버 설치 되었다고 가정한다)
GPU 이름 확인하기
내가 사놓고 뭘 샀었는지 까먹었다. (요즘 게임을 안하기도 하고..)
['윈도우' 우클릭 > 장치관리자] 에 들어간다.
[디스플레이 어댑터] 클릭하면 GPU 이름이 나온다.
나는 GTX 1060 을 사용중이다.
Compute capability 확인하기
Compute capability 가 뭐지 싶어서 chatGPT 에 물어봤다.
CUDA(Compute Unified Device Architecture)는 NVIDIA에서 개발한 병렬 컴퓨팅 플랫폼 및 프로그래밍 모델로, GPU를 사용하여 계산 작업을 가속화합니다. CUDA의 핵심 개념 중 하나는 Compute Capability(계산 능력)입니다.
**Compute Capability(계산 능력)**는 특정 GPU 아키텍처의 기능과 성능을 정의하는 버전 번호입니다. 이 번호는 CUDA 하드웨어와 소프트웨어 기능을 나타내며, GPU가 지원하는 기능과 성능 수준을 이해하는 데 도움이 됩니다. 각 GPU는 특정 Compute Capability를 가지고 있으며, 이는 두 자리 또는 세 자리 숫자로 표현됩니다.
예를 들어, Compute Capability 6.1을 갖는 GPU는 첫 번째 숫자 '6'이 주요 아키텍처를 나타내고, 두 번째 숫자 '1'이 해당 아키텍처의 세부 버전을 나타냅니다.
Compute Capability가 중요한 이유는 다음과 같습니다:
1. 호환성: CUDA 소프트웨어는 특정 Compute Capability를 요구할 수 있습니다. 즉, 특정 CUDA 기능이나 최적화는 특정 Compute Capability 이상의 GPU에서만 사용할 수 있습니다.
2. 기능 지원: 각 Compute Capability는 특정 하드웨어 기능을 지원합니다. 예를 들어, Compute Capability 3.0 이상은 동적 병렬 처리를 지원하고, 5.0 이상은 신경망 연산을 가속화하는 텐서 코어를 지원합니다.
3. 성능 최적화: Compute Capability가 높을수록 더 최신의 고성능 하드웨어 기능을 포함합니다. 이는 더 높은 성능과 더 많은 기능을 의미할 수 있습니다.
4. 개발 및 배포: CUDA 애플리케이션을 개발할 때 목표로 하는 GPU의 Compute Capability를 고려하여 최적화할 수 있습니다. 이를 통해 애플리케이션의 성능을 최대화하고 호환성을 보장할 수 있습니다.
그러니까, Compute capability(계산 능력)은 GPU 의 기능과 성능에 대한 버전 번호라 할 수 있다.
Compute capability 찾기
Compute capability 를 찾는 건 아래 페이지에서 가능하다.
https://en.wikipedia.org/wiki/CUDA#GPUs_supported
Ctrl + F 로 찾기를 해서 'GTX 1060' 를 검색한다. (각자 자신의 GPU 명을 입력하면 되겠다)
그러면 아래처럼 'GTX 1060' 이 검색되고, 왼쪽에 'Compute capability (version)' 이 나온다.
(아래 사진은 편집한 것이다 열 이름 바로 밑에 안나올 것이다)
그리고 Micro-architecture 에 'Pascal' 이 있는데 이걸 기억한다.
CUDA version 찾기
방금 봤던 표의 위에 있는 표에서 6.1 을 찾는다.
열 이름에 아까 기억했던 Pascal 의 아래에 보면 6.x 로 되어 있다.
맨왼쪽에 CUDA SDK Version(s) 가 8.0 으로 되어있는데, 이게 바로 CUDA 버전이다!!
그런데 아래 세 개는 다 뭔가 싶어서 chatGPT 에 물어본 결과, 다 같은 개념으로 사용한다고 한다.
- CUDA SDK Version
- CUDA Toolkit version
- CUDA version
그냥 CUDA version 이라고 명칭을 통일하겠다.
그럼 CUDA 8.0 을 설치하러 가보자!
CUDA 설치하기
CUDA Download
검색어 'CUDA 8.0 download' 입력해서 아래 사이트로 들어간다.
https://developer.nvidia.com/cuda-80-ga2-download-archive
들어가서 아래와 같이 선택했다.
- Windows
- x86_64
- 10
- exe (local)
처음에는 Version 에 Windows 11 이 없어서 고민하다가 Ubuntu 를 설치하고 Linux 에서 하려고 했었다.
Ubuntu 16.04 다운받고 CUDA Toolkit 설치하려 하니 에러가 계속 발생해서 설치를 못했다. (이것 땜에 며칠 소모했다)
나중에 에라 모르겠다 하는 마음으로 Windows 10 버전 다운받아서 설치 하니 결과적으로 설치가 되었다.
모니터 안나오는 문제
그런데 설치과정에 사소한 문제가 하나 있었는데, 설치 진행 중에 모니터가 안나오는 것이다.
모니터가 안나오면 설치 취소도 못하는데 어떡하나 싶었다.
몇 분 고민하다가 본체 전원 버튼을 눌러 강제로 재부팅을 하니 다행히 모니터가 나왔다!
CUDA 설치 확인 명령어
설치가 잘 되었는지 명령어로 확인해 보니 잘 되었다.
> nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Mon_Jan__9_17:32:33_CST_2017
Cuda compilation tools, release 8.0, V8.0.60
CUDA 에 맞는 파이썬, tensorflow, cuDNN 버전 확인
아래 사이트에서 버전 확인한다.
https://www.tensorflow.org/install/source_windows?hl=ko
Windows 에서 GPU 부분 저 아래를 보면 '쿠다' 가 8 이라고 된 부분이 있다.
여기서 tensorflow-gpu, 파이썬, cuDNN 버전을 확인한다.
먼저 파이썬을 설치해보자.
파이썬 3.6 설치하기
아래 링크에 들어간다.
https://www.python.org/downloads/
특정 버전 설치는 아래 메뉴에서 가능하다.
3.6.7을 설치한 이유는 위에서 부터 버전 확인했는데, 3.6.7이 windows installer 가 있는 버전이어서 그렇다!
이를 받아서 설치한다.
설치할때 PATH 를 추가하겠냐고 체크하는 부분이 있는데 체크해준다.
(체크 안해도 나중에 시스템 환경변수에 추가하면 되는데 귀찮으니까..)
tensorflow_gpu 설치하기
파이썬 가상환경으로 프로젝트 생성해준다.
그리고 가상환경을 활성화해서 tensorflow-gpu 1.4 를 설치해준다.
케라스는 2.2.4 버전을 설치했다.
(설치는 아래 포스팅 참고)
https://breakthedays.tistory.com/353
cuDNN 설치하기
다운로드
최신 버전이 아니므로 아래 처럼 아카이브로 가서 다운로드 한다.
https://developer.nvidia.com/rdp/cudnn-archive
먼저 해당 사이트를 가입해서 로그인 해야 한다!
여기서 저 아래에 보면 있다.
이를 클릭해서 Windows 10 용을 받는다. (나는 Windows 11 이지만 10 용으로 해도 되더라)
파일 복사
다운받은 파일을 압축 해제하면 bin, include, lib 폴더가 있다.
각 폴더 내의 파일을 CUDA 설치 폴더의 동일한 폴더 내로 복사한다.
(내 경우 CUDA 설치 경로는 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0)
시스템 환경변수 PATH 설정
복사를 해도 안되는 경우에는 아래 폴더들을 PATH 에 추가한다.
- C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin
- C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\libnvvp
- C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib
- C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include
GPU 사용 가능 여부 확인
PyCharm 에서 터미널에서 가상환경 상태에서 python 접속한다.
> python
아래 처럼 입력한다.
>>> import tensorflow as tf
>>> tf.test.gpu_device_name() is not None
2024-05-19 17:49:59.109348: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\36\tensorflow\core\platform\cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
2024-05-19 17:49:59.521785: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\36\tensorflow\core\common_runtime\gpu\gpu_device.cc:1030] Found device 0 with properties:
name: GeForce GTX 1060 3GB major: 6 minor: 1 memoryClockRate(GHz): 1.7465
pciBusID: 0000:1f:00.0
totalMemory: 3.00GiB freeMemory: 2.47GiB
2024-05-19 17:49:59.521986: I C:\tf_jenkins\home\workspace\rel-win\M\windows-gpu\PY\36\tensorflow\core\common_runtime\gpu\gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce GTX 1060 3GB, pci bus id: 0000:1f:00.0, compute capability: 6.1)
True
GPU 관련해서 뭐라뭐라 뜨는데 그러면 GPU 사용 가능한 것이다.
코드 돌려보고 작업관리자 열어서 보면 GPU 사용률 올라가는게 보인다.
학습 속도도 훨씬 빨라졌다.
이 기록은 먼 훗날 나를 위해, 또 나같은 옛날 GPU 를 사용하는 동일한 환경 사용자들을 위해 남긴다.
문제1. 학습 종료 후에도 GPU 사용량 99% 발생
학습 종료 후에도 작업관리자에서 보면 GPU 사용량이 99% 로 높게 발생한다.
원인은 불명이며, CUDA 설치간 Windows 11 인데 Windows 10을 설치한 것 때문인지? 의심만 할 뿐이다.
GPU 사용 해제 방법은 [작업관리자 > 프로세스] 에서 Python 을 강제종료 해준다.
이것만 실행률이 높아서 강제종료 했더니 GPU 도 가동을 멈췄다.
방법1. numba 패키지 사용(안됨)
pip install numba
from numba import cuda
#이후 초기화 작업을 진행해줍니다.
device = cuda.get_current_device()
device.reset()
패키지 설치 후 python 에서 위 코드 실행하면 해제된다고 한다.
문제2. GPU Sync Failed 발생
방법1. 아래 코드 사용(안됨)
import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
session = tf.Session(config=config)
session.close()
방법2. 아래 코드 사용(안됨)
import tensorflow as tf
from keras.backend import tensorflow_backend as K
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
K.set_session(tf.Session(config=config))
방법3. jupyter notebook 종료 후 재시작
PyCharm 에서 Ctrl + C 눌러서 jupyter notebook 종료한다.
다시 터미널에 jupyter notebook 입력해서 실행한다.
GPU Sync Failed 발생하던 코드가 되는 경우가 있다.
'Python > 케라스 창시자에게 배우는 딥러닝' 카테고리의 다른 글
[Keras 딥러닝] CPU 가상환경 설정 및 텐서플로, 케라스 설치하기 (1) | 2024.05.19 |
---|---|
[Keras 딥러닝] PyCharm에서 jupyter notebook 사용하기 (0) | 2024.05.05 |