CS231n 8강 요약
딥러닝 프레임워크에 대해서 알아보자!
0. Today’s Goal
- CPU vs GPU
- Deep Learning Framework
1. 강의 및 강의 자료
강의를 들어볼 수 있는 링크와 강의 자료를 pdf형식으로 준비했다.
한글 자막이 필요하신 분은 다음의 링크를 확인해주세요. :)
- 한글 자막을 첨부하고 싶으면 여기를 눌러주세요.
2. 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
이렇게 3가지를 많이 사용한다.
그렇다고 딥러닝을 위해서 위의 코드를 직접 작성할 일은 거의 없다.
CUDA는 Higher-level API로 cuBLAS, cuFFT, cuDNN등등을 제공하는데, cuDNN을 함께 사용하여 딥러닝 training 하는데 사용하면 속도가 훨씬 빨라진다.
GPU를 사용할 때, 한 가지 고려해 주어야 하는 것이 있는데 바로 CPU / GPU communication이다.
보통 Data를 컴퓨터 하드드라이브에 넣고 딥러닝을 모델을 GPU로 돌리려고 하면 GPU RAM에 있는 경우가 있다.
이 때, Data를 읽어드리는데 Bottleneck현상이 일어날 수도 있으니, 데이터의 전송에도 신경을 써야한다.
- 모든 data를 RAM으로 읽어드리기
- HDD 대신 SSD 사용하기
- CPU의 멀티 쓰레드를 이용하여 prefatch된 data 사용하기
이러한 방법들로 Bottleneck현상을 해결한다.
3. Deep Learning Framework
최근에 정말 수 많은 딥러닝 프레임워크들이 나오고 있다..
강의가 2017년 기준이니, 현재는 더 많이 나왔을 것이다.
그럼 우리가 딥러닝 프레임워크를 사용하는 이유는 무엇일까?
바로
- Computational Graph를 쉽게 build하기 위해
- Gradient 계산을 쉽게 하기 위해
- GPU에서 효과적으로 딥러닝을 돌리기 위해
이렇게 3가지 이유를 들 수 있다.
최근 많이 쓰이고 있는 딥러닝 프레임워크인 Tensorflow부터 한 번 알아보자.
(나도 자세히는 모르니 이 강의를 요약해서 적어보면..)
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의 특징을 한 번 적어보면,
- c++로 작성되어 있다.
- python으로 모델을 training을 시키고 serialize와 deploy는 python없이 진행할 수 있다.
- iOS / Android 에서도 동작한다.
- Facebool에서 직접 딥러닝을 적용하여 실제 제품을 만들 때 사용한다.
이렇게 여러가지 딥러닝 프레임워크에 대해서 간단하게 알아보았다.
강의하시는 분은 Pytorch는 연구용으로 가장 적합하고, 제품에 직접 적용을 해보려면 Tensorflow, Caffe2를 추천하였다.
각자 상황에 맞게 딥러닝 프레임워크를 사용해야겠다.
댓글남기기