Tensorflow 딥러닝 준비 모음 with. CUDA

CUDA

GPU 가속 애플리케이션을 만들기 위한 개발 환경
(JAVA로 비유하면 가상머신 컴파일러 / 파이썬 코드를 GPU가 계산하기 위한 바이트 코드로 변환)


그래픽카드의 compute capability 확인하기

https://developer.nvidia.com/cuda-gpus#collapse2

compute capability와 맞는 CUDA버전 확인하기

https://en.wikipedia.org/wiki/CUDA

CUDA 설치하기 (위에서 버전 확인하고 설치 진행)

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


cuDNN

딥러닝 작업에 해당되는 컨볼루션(Convolution), 풀링(Pooling), 표준화(Nomarlization), 활성화(Activation) 등을 빠르게 이행할 수 있도록 하는 라이브러리

cuDNN 다운로드 (CUDA 버전과 맞는 파일 다운로드)

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


Tensorflow

딥러닝 작업에 필요한 여러 알고리즘들이 담겨 있는 라이브러리
(머신러닝의 Scikit-learn라이브러리와 비슷한 개념)


CUDA, cuDNN과 맞는 Tensorflow버전 확인하기

https://www.tensorflow.org/install/source_windows#tested_build_configurations


준비 모음 설치 (with.Ubuntu 20.04)


제공) ‘PinkWink Korea’ 님
참고 자료) https://pinkwink.kr/1339


리눅스 명령어

nvcc –version
CUDA의 버전을 확인할 수 있다.

cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
cuDNN의 버전을 확인할 수 있다. (위는 버전이 8 이상, 아래는 8 미만)

nvidia-smi
현재 GPU의 사용량을 체크할 수 있다. (정적 체크)

watch -n 1 nvidia-smi
GPU의 사용량을 동적으로 체크할 수 있다. (1초마다 체크)

htop
CPU와 메모리의 사용량을 동적으로 체크할 수 있다.


파이썬 코드

텐서플로우 코드를 실행할 수 있는 하드웨어를 찾는다.

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

텐서플로우 버전을 출력하고 GPU가 잘 동작하는지 체크한다.

import tensorflow as tf
tf.__version__
tf.test.is_gpu_available()

gpu_available이 False
‘~/.bash_profile’에 아래 내용을 입력하고 ‘source ~/.bash_profile’을 명령한다. (cuda:10.0 기준)
오류가 계속 발생 시 [링크]를 참조한다.

export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64

학습 데이터를 VRAM에 효율적으로 저장해서 ‘Out of Memory’를 덜 발생시킨다.
-> [권장] 소스의 맨 앞에 삽입

import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
    try: # Currently, memory growth needs to be the same across GPUs 
        for gpu in gpus:
            tf.config.experimental.set_memory_growth(gpu, True)
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
    except RuntimeError as e: # Memory growth must be set before GPUs have been initialized print(e)
        print(e)

프로세스를 종료해서 VRAM을 비운다.
-> [권장] 소스의 맨 뒤에 삽입

import IPython
app = IPython.Application.instance()
app.kernel.do_shutdown(True)

Leave a Reply

Your email address will not be published. Required fields are marked *