DoITgrow

[환경 설정] 텐서플로우(Tensorflow) 2.x GPU 설정 및 사용하는 법 (윈도우10 기준) 본문

딥러닝 & 머신러닝

[환경 설정] 텐서플로우(Tensorflow) 2.x GPU 설정 및 사용하는 법 (윈도우10 기준)

김수성 (Kim SuSung) 2021. 11. 4. 21:38
반응형

게임할 때에는 컴퓨터가 자동으로 그래픽 카드를 인식하여 작동시키지만, 우리가 데이터 분석을 할 때에는 여러가지 설정을 해주어야 합니다. 오늘은 딥러닝의 가장 유명한 프레임워크인 텐서플로우에서 GPU를 사용하기 위해 설정하는 방법을 알아보려고 합니다.

 

파이썬으로 Tensorflow 프레임워크가 GPU를 인식하고 있는지 확인하는 법

tensorflow에서 현재 사용 가능한 처리 장치 종류가 어떤 것이 있는지 확인할 수 있는 방법이 있어요.

아래와 같이 코드를 실행시켜보면 현재 사용 가능한 device는 어떤 것들이 있는지 알 수 있는데, 현재 저는 CPU 1개 밖에 없네요.

from tensorflow.python.client import device_lib

print(device_lib.list_local_devices())
>>> [name: "/device:CPU:0"
>>> device_type: "CPU"
>>> memory_limit: 268435456
>>> locality {
>>> }
>>> incarnation: 8308089636571588817]

GPU 드라이버 설치

텐서플로우에서 GPU를 사용하기 위해선 아래 4가지 스텝을 완료하시면 됩니다.

 

1. NVIDIA® GPU 드라이버 설치

현재 컴퓨터에 장착된 그래픽 카드의 종류를 확인하시고, 아래 링크로 들어가서 드라이버를 받은 후 설치를 해야 해요.

 

Download Drivers | NVIDIA

 

www.nvidia.com

▼ 저는 GeForece GTX 1070 Ti를 사용하고 있어서 아래와 같이 설정하고 받았습니다.

▼ 다운로드 완료한 파일을 실행하면 설치파일을 추출할 경로 확인 창이 뜨고, 그대로 확인을 누르면 설치 프로그램이 실행되요. 용량을 조금 줄이고 싶다면 'NVIDIA 그래픽 드라이버'만 설치하시면 되는데 저는 계속 OK하면서 그대로 설치를 했습니다.

▼ 설치가 완료되면 cmd 창을 열고 nvidia-smi 명령어를 입력하면 아래와 같이 잘 설치가 되었는지 확인할 수 있어요.

여기서 중요한 것은 CUDA Version: 11.5 부분이에요. 다음 단계에서 CUDA를 설치해야 하는데 여기의 버전과 맞아야 텐서플로우에서 GPU 장치를 제대로 인식할 수 있으니 기억하고 계세요.

2. CUDA® Toolkit 설치

다음은 위에서 확인했던 CUDA 버전을 다운받아서 설치해야 되요. 아래 링크를 통해 맞는 버전을 받아서 설치할 수 있습니다. 

 

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

▼ 저는 11.5 버전을 선택하고, 아래와 같이 제 운영체제 조건을 설정하여 파일을 다운받았습니다.

 

3. cuDNN SDK 8.1.0 다운 및 CUDA 설치 폴더로 덮어쓰기

CUDA를 설치한 이후에는 cuDNN SDK를 다운로드 받아야 합니다. 아래 링크를 통해 홈페이지로 들어가면 "Download cuDNN" 버튼이 보이고, 이를 클릭하면 다운로드를 받을 수 있어요.

★단, 회원가입은 필수라 회원이 아니신 분은 회원가입 후에 받으시길 바래요.

 

NVIDIA cuDNN

NVIDIA cuDNN The NVIDIA CUDA® Deep Neural Network library (cuDNN) is a GPU-accelerated library of primitives for deep neural networks. cuDNN provides highly tuned implementations for standard routines such as forward and backward convolution, pooling, nor

developer.nvidia.com

회원가입 후에 다시 다운로드 버튼을 누르면 몇 가지 설문조사를 하고 아래와 같이 CUDA 버전과 운영체제에 맞는 파일을 다운받을 수 있어요. 저는 CUDA 11.5 이고, 윈도우10 64비트라 "cuDNN Library for Windows (x64)"를 선택해서 받았습니다.

 

다운로드가 끝난 cuDNN 파일의 압출을 풀면 (일단 아무 곳에나 풀어도 돼요.) 총 3가지 폴더(bin, include, lib)와 1가지 파일이 있습니다. 이 파일들을 "2. CUDA® Toolkit 설치" 단계에서 설치한 CUDA 폴더에 덮어쓰면 돼요.

보통 그대로 설치를 하셨다면 "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5" 경로에 위치해 있을거에요. 해당 폴더에 들어가면 cuDNN에 있던 3가지 폴더가 똑같이 존재하는 것을 볼 수 있어요. 

여기 경로에 그대로 덮어쓰기하거나 각각의 파일들을 똑같은 폴더로 옮겨주시면 돼요.

 

4. 마지막 환경 변수 설정

마지막으로 프로그램을 실행할 때, 방금 전에 수정한 bin, include, lib 폴더를 기본적으로 컴퓨터가 접근할 수 있도록 환경 변수를 설정해 주어야 해요. 환경 변수를 설정 창으로 들어가는 방법은 아래를 참고해 주세요.

새로 만들기(N)를 누르고 bin, include, lib 각각의 절대경로를 입력하면 최종적으로 끝나게 됩니다.

 

GPU 인식 여부 확인

이제 다시 처음으로 돌아가 tensorflow에서 인식 가능한 처리 장치가 무엇이 있는지 확인해 보았습니다.

처음과 달리 이제 GPU 디바이스도 있는 것을 볼 수 있습니다.

from tensorflow.python.client import device_lib

print(device_lib.list_local_devices())
>>> [name: "/device:CPU:0"
>>> device_type: "CPU"
>>> memory_limit: 268435456
>>> locality {
>>> }
>>> incarnation: 15433216318130894810
>>> , name: "/device:GPU:0"
>>> device_type: "GPU"
>>> memory_limit: 6938886144
>>> locality {
>>>   bus_id: 1
>>>   links {
>>>   }
>>> }
>>> incarnation: 15189428634794978934
>>> physical_device_desc: "device: 0, name: NVIDIA GeForce GTX 1070 Ti, pci bus id: 0000:01:00.0, compute capability: 6.1"
>>> ]

GPU를 사용하기 위한 긴 여정을 잘 쫒아 오셨습니다. 사실 이러한 설정이란 것이 한 번 해놓으면 오랫동안 다시 할일이 없어서 쉽게 잊어버리기 마련인데요. 

아래 텐서플로우 공식 문서에 필요한 설치 패키지 내용이 잘 나와 있기에 어떤 프로그램을 설치해야 하는지는 꼭 외우고 있을 필요는 없고, 대략 이러한 프로세스였지만 기억하고 나중에 다시 찾아봐도 쉽게 하실 수 있을 것 같네요.

 

GPU 지원  |  TensorFlow

ML Community Day is November 9! Join us for updates from TensorFlow, JAX, and more Learn more GPU 지원 참고: GPU 지원은 CUDA® 지원 카드가 있는 Ubuntu 및 Windows에 제공됩니다.TensorFlow GPU 지원에는 다양한 드라이버와 라이

www.tensorflow.org

학습 속도 비교 (CPU VS GPU)

저는 CPU로 i5-9600K, GPU로 1070Ti를 사용하고 있는데요. 아래와 같이 MNIST 데이터를 이용해서 숫자 이미지 맞추기 학습을 통해 속도를 비교해 보았습니다. 

import tensorflow as tf
import numpy as np

# 데이터 불러오기
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()

# 넘파이 데이터를 텐서 데이터로 변환
x_train = tf.convert_to_tensor(x_train, dtype=tf.float32)
x_test = tf.convert_to_tensor(x_test, dtype=tf.float32)
y_train = tf.one_hot(y_train, depth=len(np.unique(y_train)))
y_test = tf.one_hot(y_test, depth=len(np.unique(y_train)))

# 레이어 설계
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(100, activation='relu'))
model.add(tf.keras.layers.Dense(100, activation='relu'))
model.add(tf.keras.layers.Dense(10, activation='softmax'))

# 모델 컴파일
model.compile(loss=tf.keras.losses.categorical_crossentropy, optimizer=tf.keras.optimizers.SGD(), metrics=['accuracy'])

# CPU 학습
print("CPU를 사용한 학습")
with tf.device("/device:CPU:0"):
    model.fit(x_train, y_train, batch_size=32, epochs=3)

print("GPU를 사용한 학습")
with tf.device("/device:GPU:0"):
    model.fit(x_train, y_train, batch_size=32, epochs=3)

결과를 보니 CPU가 GPU보다 2배 더 빠르네요. 이건 제가 구성한 신경망의 레이어가 얕아서 학습해야 할 weights의 수가 적다보니 CPU가 더 빠르게 나온 것 같네요. 하지만 요즘 이미지 처리는 CNN과 같은 특징 추출 레이어를 추가해야 성능이 매우 올라가죠. 이 경우 학습시켜야 할 파라미터의 숫자도 매우 많아지므로 GPU로 처리해야 훨씬 빠른 속도를 기대할 수 있을 것 같네요~

반응형
Comments