인공지능윈도우 CUDA, cuDNN설치방법

반응형

인공지능윈도우 CUDA, cuDNN설치방법

참조

 

1. 현재 그래픽카드 버전 정보

  • 현재 제 개인PC 그래픽카드 버전은 NVIDIA GeForce GTX 1050 Ti 입니다.

 

2. TensorFlow 버전

  • 현재 설치된 TensorFlow 버전은 2.8.0 입니다.
  • TensorFlow 2.8.0 을 GPU로 돌리기 위해 CUDA, cuDNN 버전은 다음과 같이 요구됩니다.
    • CUDA : 11.2
    • cuDNN : 8.1

3. CUDA SDK 버전 설정

  • NVIDIA GeForce GTX 1050 Ti 의 CUDA 성능은 6.1 입니다.
  • CUDA capability 가 6.1 이기 때문에, 가장 최신 버전인 CUDA SDK 11.6 를 설치 할 수 있습니다.

 

4. cuDNN 버전 설정

  • cuDNN은 8.1 버전으로 설치 합니다.

 

5. CUDA 설치

  • CUDA 설치는 다음 링크를 통해서 설치를 진행할 수 있습니다.
  • CUDA Download
  • 위 링크에 접속해서 Select Target Platform 메뉴에서 Windows -> x86_64 -> 10 -> exe(local) 순서로 설정하였습니다.

Installer Type 에서는 network는 인터넷을 통해 여러번 다운받는 것이고, Local은 한번에 받는 것입니다. 인터넷 문제가 없다면 Local로 받습니다.

 

5.1. CUDA 설치 진행

 

5.2. CUDA 설치 경로

  • CUDA 설치는 Default 경로로 지정하였고 해당 경로는 다음과 같습니다.
  • 경로 : C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6

 

5.3. 환경 변수 추가 확인

  • CUDA 를 설치하고 나면 환경 변수 등록은 자동으로 됩니다.
  • 설치되는 경로는 바꾸지 않는 게 좋습니다.
  • CUDA는 여러가지 버전을 다양하게 설치해서 사용할 수 있습니다.
  • 환경 변수 관리만 잘하면 다양한 버전을 사용해 볼 수 있습니다.
  • 다음과 같이 환경 변수 등록이 정상적으로 되었는지 확인합니다.

 

5.3.1. 시작 - 찾기 - 시스템 환경 변수 편집 실행

  • 시스템 환경 변수 편집을 실행합니다.

 

5.3.2. 환경 변수 버튼 클릭

  • 환경 변수 버튼을 클릭합니다.

 

5.3.3. CUDA 경로 확인

  • 다음과 같이 CUDA_PATH와 CUDA_PATH_V11_6 에 경로가 정상적으로 등록이 되어 있는 것을 확인할 수 있습니다.

 

6. cuDNN 설치

6.1. cuDNN 다운로드

  • CUDA 버전에 맞는 cuDNN을 설치합니다.
  • 저는 CUDA 11.6 이기에 cuDNN v8.3.2 로 설치하였습니다.

 

6.2. OS 설정

  • 본인 환경에 맞는 OS 설정합니다.

 

6.3. 다운로드 완료

  • 다운로드가 완료 되면 압축을 해제합니다.
  • 그리고 해당 파일에 들어가게 되면 bin, include, lib 폴더가 있는 것을 확인할 수 있습니다.

 

6.4. 경로 이동

  • 앞서 CUDA 파일이 있는 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6 경로에 다시 갑니다.
  • 그리고 bin, include, lib 폴더를 cuDNN 에서 설치한 bin, include, lib 폴더안에 내용을 추가합니다.
 

목적

  • 앞서 TensorFlow 2.x.x 환경에서 학습을 CPU가 아닌 GPU로 돌리기 위해 CUDA, cuDNN 설치를 진행하였습니다.
  • 실제로 TensorFlow 2.x.x 환경에서 Keras API 이용한 예제 코드를 작성 후, 학습하여 CPU가 아닌 GPU로 동작하는지 테스트 진행합니다.

 

TensorFlow 2.x.x 예제 코드 작성

  • 구글링을 통해, 간단한 TensorFlow 예제 코드를 찾았습니다.
  • 해당 내용을 학습 시켜서 CPU가 아닌 GPU로 학습이 이루어지는지 테스트 진행합니다.
import tensorflow as tf

mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=10)
model.evaluate(x_test, y_test)

테스트 결과

  • 지난번 테스트에서는 CUDA, cuDNN이 설치가 되지 않아서, cudart64_110.dll not found 에러가 발생 후, CPU로 실행되었습니다.
  • 하지만 CUDA, cuDNN이 설치된 후에는 cudart64_110.dll not found 에러가 발생하지 않고 ...name: NVIDIA GeForce GTX 1050 Ti... 이렇게 GPU로 실행된 것을 확인할 수 있습니다.
2022-02-09 14:25:01.209702: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2022-02-09 14:25:01.648836: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1525] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 2782 MB memory:  -> device: 0, name: NVIDIA GeForce GTX 1050 Ti, pci bus id: 0000:01:00.0, compute capability: 6.1
Epoch 1/10
1875/1875 [==============================] - 7s 3ms/step - loss: 0.3076 - accuracy: 0.9088
Epoch 2/10
1875/1875 [==============================] - 7s 4ms/step - loss: 0.1500 - accuracy: 0.9554
Epoch 3/10
1875/1875 [==============================] - 8s 4ms/step - loss: 0.1119 - accuracy: 0.9661
Epoch 4/10
1875/1875 [==============================] - 8s 4ms/step - loss: 0.0932 - accuracy: 0.9709
Epoch 5/10
1875/1875 [==============================] - 8s 4ms/step - loss: 0.0770 - accuracy: 0.9759
Epoch 6/10
1875/1875 [==============================] - 8s 4ms/step - loss: 0.0676 - accuracy: 0.9782
Epoch 7/10
1875/1875 [==============================] - 8s 4ms/step - loss: 0.0614 - accuracy: 0.9795
Epoch 8/10
1875/1875 [==============================] - 8s 4ms/step - loss: 0.0555 - accuracy: 0.9819
Epoch 9/10
1875/1875 [==============================] - 8s 4ms/step - loss: 0.0516 - accuracy: 0.9830
Epoch 10/10
1875/1875 [==============================] - 8s 4ms/step - loss: 0.0459 - accuracy: 0.9843
313/313 [==============================] - 1s 3ms/step - loss: 0.0687 - accuracy: 0.9806

 

GPU 테스트 확인

  • 실제로 CPU가 아닌 GPU로 실행됐는지 보다 정확하게 확인하기 위해서 작업관리자 -> 성능 -> GPU 기능을 모니터링 하였습니다.
  • 학습 실행할 때, GPU 사용량이 급격히 증가하는 것을 확인할 수 있습니다.
  • 때문에 GPU로 학습이 정상적으로 이루어 졌다고 판단됩니다.

 

참조

 

CUDA 정의

  • CUDA(Computed Unified Device Architecture) 는 NVIDIA에서 개발한 GPU 개발 도구입니다.
  • CUDA는 c, c++ 기반으로 짜여진 완전 기초적 H/W 접근을 해야하는데, 많은 연구자들이 딥러닝에 사용할 수 있도록, 쉽게 설치할 수 있도록 오픈하였습니다.
  • 현재는 nvida-driver, CUDA, CUDNN만 설치하면 딥러닝을 쉽게 사용할 수 있습니다.

 

CUDA 사용 이유

  • CUDA를 사용하는 이유는 많은 양의 연산을 동시에 처리하는 것이 목표입니다.
  • 그러므로 딥러닝, 채굴과 같은 수학적 계산에 많이 쓰입니다.
  • 이러한 이류는 미분이 컴퓨터로 가능하기 때문입니다.

 

기존의 CPU 방식

  • 기존의 컴퓨터 연산은 CPU를 사용하고, RAM에 의존하여 연산을 진행하였습ㄴ디ㅏ.
  • CPU를 이용한 연산은 대부분 Single-Core를 사용하고 MultiProcessing, Multi-Threading등을 이용하여 CPU가 보유한 코어 갯수 만큼의 Multi-Core를 이용하여 연산을 할 수 있습니다.
  • 일반적으로 딥러닝에서 사용하는, 특히 pytorch나 tensorFlow에서 data loader 파트에서, core 갯수를 주고 데이터 loading 하는 부분이 여기에 속합니다.

 

GPU 방식

  • GPU는 Core 갯수가 엄청 많습니다.
  • CPU는 8개에서 16개인데 비해 GPU는 몇 천개 이상입니다.
  • 즉 이를 이용한 Many-Core dependent 연산을 진행하고, Video RAM에 있는 데이터를 연산합니다.

 

CUDA 장점

  • CUDA의 장점은 다음과 같습니다.
    • 높은 연산 처리능력
    • 병렬 프로그램의 확장성
    • 편리한 설치
  • CUDA의 연산 능력
    • 1TFLOP/s 기준으로 10년전 슈퍼컴퓨터와 동등한 수준, 인텔 i7 CPU를 10개 합쳐야 나오는 성능입니다.
  • 병렬 프로그램의 확장성
    • 잘 설계된 CUDA 프로그램은 GPU의 성능에 비례하여 연산 능력을 발휘합니다.
    • 대규모 데이터를 멀티스레드로 실행하여 처리하기 때문에 그래픽카드가 발전하여 코어 수가 증가하면 자동으로 연산에 필요한 시간이 줄어들게 됩니다.
반응형