CS/ML+DL

CUDA + cuDNN + Anaconda Setup

esmJK 2022. 6. 11. 18:22

*2022.06.11 기준

윈도우 환경에서 ML을 돌려야 할 필요가 생길 수 있습니다. 디스크드라이브에서 SSD로 마이그레이션 중 몇 가지 오류가 생겨 윈도우 클린설치를 하는 바람에 GPU computing 환경 또한 설정해주어야 할 필요가 생겼습니다. 

지금 연구그룹에서 사용하는 제 개인 컴퓨터의 사양은 다음과 같습니다. 

HP Pavilion Gaming Desktop TG01
NVIDIA Geforce RTX 3060Ti 
16G RAM 
Samsung Evo SSD 1000GB

 


CUDA 설치 

CUDA 와 CuDNN 최신버전을 사용할 경우 Tensorflow 에서 지원해주지 않을 가능성이 있기 때문에, 저의 경우에는 기존에 사용하던 CUDA 11.5를 설치해주었습니다.

https://developer.nvidia.com/cuda-toolkit-archive


CUDNN 설치 

v8.3.2를 설치하였습니다.

https://developer.nvidia.com/rdp/cudnn-archive

이후, 시스템 환경 변수 편집에서 Path에 들어가 

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\bin

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\libnvvp

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\include

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\lib

를 추가해줍니다. 

 

Anaconda 설치 및 패키지 설치

Anaconda 최신버전을 설치해줍니다. 설치가 끝나면 업데이트를 하라고 하는데, 무슨 이유에선지 업데이트를 실행하였을 때 tensorflow에서 GPU를 인식하지 못하는 문제가 있었기 때문에 업데이트를 하지 않았습니다. 

 

아래의 'create' 메뉴를 이용해 새로운 가상환경을 만들어줍니다. 저의 경우 ai_env 라는 이름으로, Python 버전은 3.9로 설정하였습니다.

중앙 상단에서 Not Installed 드롭다운을 선택 후 tensorflow, tensorflow-gpu 를 검색해 설치해줍니다. 

 

이후 Home 탭에서 Applications on '생성한 환경' (지금의 경우 ai_env) 를 선택하고 해당 환경에서 Jupyter Notebook을 설치해줍니다. 설치가 완료되면 윈도우에서 검색 시 다음 어플리케이션이 뜨는 것을 확인할 수 있습니다. 

Julyter Notebook(ai_env)

이후, Jupyter Notebook을 실행합니다. 

 

 


GPU 확인 및 성능비교

코드상으로 tensorflow가 GPU를 인식하는지 (cuDNN이 제대로 설치되어 있다면) 확인 후, CPU대비 GPU의 성능 차이를 시간을 찍어 확인합니다.

 

작년 수업 때 배운 LeNet을 그대로 가져와 CPU에서 실행해보고, GPU에서도 실행해보았습니다.

 

import numpy as np
import tensorflow as tf

from tensorflow.python.client import device_lib
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from tensorflow.keras.optimizers import Adam


print(device_lib.list_local_devices())


print("num gpus available ", len(tf.config.experimental.list_physical_devices('GPU')))
print(tf.test.is_built_with_cuda())
print(tf.version.VERSION)
print(tf.test.gpu_device_name())



# 데이터 불러오기
# 넘파이 데이터를 텐서 데이터로 변환
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(60000, 28, 28, 1)
x_test = x_test.reshape(10000, 28, 28, 1)
x_train = x_train.astype(np.float32)/255.0
x_test = x_test.astype(np.float32)/255.0
y_train = tf.keras.utils.to_categorical(y_train, 10)
y_test = tf.keras.utils.to_categorical(y_test, 10)

n_input = 784
n_hidden1 = 1024
n_hidden2 = 512
n_hidden3 = 512
n_hidden4 = 512
n_output = 10


# 레이어 설계
cnn = Sequential()
cnn.add(Conv2D(6, (5, 5), padding='same', activation='relu', input_shape=(28, 28, 1)))
cnn.add(MaxPooling2D(pool_size=(2, 2)))
cnn.add(Conv2D(16, (5, 5), padding='same', activation='relu'))
cnn.add(MaxPooling2D(pool_size=(2, 2)))
cnn.add(Conv2D(120, (5, 5), padding='same', activation='relu'))
cnn.add(Flatten())
cnn.add(Dense(84, activation='relu'))
cnn.add(Dense(10, activation='softmax'))

# 모델 컴파일
cnn.compile(loss='categorical_crossentropy', optimizer=Adam(), metrics=['accuracy'])

print("CPU를 사용한 학습")
with tf.device("/device:CPU:0"):
    cnn.fit(x_train, y_train, batch_size=128, epochs=5, validation_data=(x_test, y_test), verbose=2)

print("GPU를 사용한 학습")
with tf.device("/device:GPU:0"):
    cnn.fit(x_train, y_train, batch_size=128, epochs=5, validation_data=(x_test, y_test), verbose=2)

 

제대로 그래픽카드 디바이스드라이버, CUDA, cuDNN 이 설치되어 있다면, 모델 학습코드 이전에 다음과 유사한 메시지를 확인할 수 있습니다. 

GPU를 사용해 LeNet의 학습 속도 또한 몇 배 이상 빨라졌습니다. 

'CS > ML+DL' 카테고리의 다른 글

[Principles][3]Backpropagation  (0) 2023.02.07
[Principles][2]Mathematical Notation for Artificial Neural Networks  (0) 2023.02.06
[Principles][1]Artificial Neural Network  (0) 2023.02.05
PyTorch Basics(2)  (0) 2021.08.24
PyTorch Basics(1)  (0) 2021.08.24