본문 바로가기
ML & DL/CS231n (Stanford Univ.)

[CS231n] Lecture 8 | Deep Learning Software

by 남르미누 2020. 11. 28.

 

딥러닝 프레임워크에 대해서 알아보자!

 


< CPU vs GPU >

 

CPU는 central processing unit, GPU는 graphics processing unit이다.

 

이 둘은 어떤 차이가 있는 것일까?

 

CPU는 컴퓨터의 뇌에 해당하는 부분이라고 생각하면 된다.
컴퓨터에서 구성 단위 중 기억, 해석, 연산, 제어부분을 수행하는 중요한 녀석이다.
좀 더 적은 core의 수로 연속적인 일을 처리하는데 CPU가 자주 쓰인다.

 

GPU는 computer graphics를 Rendering하기 위해 쓰이는 녀석이다.
더 많은 core로 일을 병렬적으로 수행하고 싶을 때 GPU가 자주 쓰인다.
GPU는 내부적으로 자체적인 RAM을 가지고 있다.

 

아래 표를 보면 차이점을 알 수 있다.

 

 

GPU에도 여러 종류가 있는데 딥러닝을 하는데 특화된 녀석은 NVIDIA이다.

 

GPU programming을 할 때는

보통 CUDA (NVIDIA only), OpenCL, Udacity 이렇게 세가지를 많이 사용한다.

 

CUDA는 Higher-level API로 cuBLAS, cuFFT, cuDNN등등을 제공한다.

cuDNN을 함께 사용하여 딥러닝 training 하는데 사용하면 속도가 훨씬 빨라진다.

 

 

GPU를 사용할 때, 한 가지 고려해 주어야 하는 것이 있는데 바로 CPU / GPU communication이다.

보통 Data를 컴퓨터 하드드라이브에 넣고 딥러닝을 모델을 GPU로 돌리려고 하면 GPU RAM에 있는 경우가 있다.

이 때, Data를 읽어드리는데 Bottleneck현상이 일어날 수도 있으니, 데이터의 전송에도 신경을 써야한다.

 

다음과 같은 방법들로 Bottleneck현상을 해결한다.

 

1. 모든 data를 RAM으로 읽어드리기

2. HDD 대신 SSD 사용하기
3. CPU의 멀티 쓰레드를 이용하여 prefatch된 data 사용하기


< Deep Learning Framework >

 

 

그럼 우리가 딥러닝 프레임워크를 사용하는 이유는 무엇일까?

 

아래와 같은 3가지 이유를 들 수 있다.

 

1. Computational Graph를 쉽게 build하기 위해

2. Gradient 계산을 쉽게 하기 위해

3. GPU에서 효과적으로 딥러닝을 돌리기 위해


< Tensorflow >

 

tensorflow에서는 Neural Network를 먼저 정의하고 그 다음 run을 통해 training을 시켜야 한다.

 

Graph가 굉장히 static하다는 특징을 가지고 있다.

 

static graph의 특징을 한 번 살펴보면,

한번 model을 구성해 놓으면 재사용이 쉽고, run을 하기 전에 최적화 과정을 진행할 수 있다.

 

 

처음에 Neural Net을 만든다.

placeholder라는 곳에 input값과 weights들의 값을 넣어준다.

Xavier에 의해 weight의 초기화 값을 설정해준다.

그리고 y_pred 를 이용해 자동적으로 weight값이 바뀌도록 설정해준다.

그리고 optimizer를 이용해 gradient값을 계산하고,
loss값이 최소가 되도록 계속 update를 해준다.

 

with tf.Session() as sess:

 

부분 이후에 실제 data값을 넣어주고, training을 시키는 과정이다.


< Keras >

 

Keras란 Tensorflow에서 제공하는 high-level wrapper이다.


굉장히 직관적으로 모델을 짤 수 있도록 구성되어 있어 처음 딥러닝 모델을 배울 때 좋은 것 같다.

 

 

딱 봐도 tensorflow로 구현을 한 것보다 훨씬 쉬워보인다.

model.fit을 하면 알아서 모델을 합치고 training을 하게끔 한다.


< Pytorch >

 

pytorch에는 3가지의 abstraction이 존재하는데,

Tensor란 쉽게 말하면 다차원 배열인데 GPU에서 돌아가게끔 만든 배열이다.


Variable이란 computational graph의 하나의 노드라고 생각하면 된다.

data와 gradient값을 가지고 있다.

 

Module이란 neural network의 하나의 layer라고 생각하면 된다.

 

pytorch는 tensorflow와 다르게 graph가 dynamic graph이다.


training을 시킬 때, 매번 새로운 그래프를 구성한다. 따라서 코드를 깔끔하게 작성할 수 있다.

 

 

모듈을 새로 만들어 주고, 내가 만든 모델을 이용하여 학습을 진행할 수 있다.
optimizer를 이용해서 learning rate를 쉽게 정할 수도 있다.

 

 

DataLoader를 이용하여 쉽게 dataset을 불러올 수도 있다.


< Caffe2 >

 

그 다음 많이 쓰는 프레임워크인 caffe2의 특징들은 다음과 같다.

 

1. c++로 작성되어 있다.

2. python으로 모델을 training을 시키고 serialize와 deploy는 python없이 진행할 수 있다.

3. iOS / Android 에서도 동작한다.

4. Facebook에서 직접 딥러닝을 적용하여 실제 제품을 만들 때 사용한다.


이렇게 여러가지 딥러닝 프레임워크에 대해서 간단하게 알아보았다.
강의하시는 분은 Pytorch는 연구용으로 가장 적합하고,

제품에 직접 적용을 해보려면 Tensorflow, Caffe2를 추천하였다.
각자 상황에 맞게 딥러닝 프레임워크를 사용해야겠다.

 

오늘은 여기까지 :)


(참고자료)

 

leechamin.tistory.com/search/cs231n

 

참신러닝(Fresh - Learning)

이차민의 iOS/ML/DL 공부 블로그 Computer Vision과 iOS개발에 대한 전반적인 공부를 합니다. "Be The First Penguin"

leechamin.tistory.com

lsjsj92.tistory.com/

 

꿈 많은 사람의 이야기

안녕하세요. 이수진이라고 합니다. 이 블로그는 AI(인공지능), Data Science(데이터 사이언스), Machine Learning, Deep Learning 등의 IT를 주제로 운영하고 있는 블로그입니다.

lsjsj92.tistory.com

taeyoung96.github.io/categories/CS231n/

 

CS231n Summary

한 발자국씩 앞으로 나아가자

taeyoung96.github.io

 

댓글