[CS231n 8강] Deep Learning Software

[CS231n 8강] Deep Learning Software

Tags
AI
CS231n
Published
November 8, 2024
Author
JH
태그
종류
학문 분야

CPU vs GPU

notion image
CPU는 더 높은 clock 속도를 가지지만, GPU는 더 많은 코어 수를 가지고 있고, 병렬 계산 처리에 있어서 더 뛰어난 성능을 보이기 때문에 딥러닝에 유리하다.
GPU programming을 할 때는 보통
  1. CUDA (NVIDIA only)
  1. OpenCL
  1. Udacity
이렇게 3가지를 많이 사용한다. 그러나 딥러닝을 하면서 이를 코딩할 일은 거의 없다.
notion image
CUDA는 Higher-level API로 cuBLAS, cuFFT, cuDNN 등을 제공하는데, cuDNN를 함께 사용하면 속도가 훨씬 빨라진다.
GPU를 사용할 때, 한 가지 고려해 주어야 하는 사항은 바로 CPU/GPU communication이다.
보통 Data를 HDD에 넣고 딥러닝 모델을 GPU로 구동시키려고 하면 모델과 가중치는 GPU RAM에 있는 경우가 많다.
이 때, Data를 읽어들이는데 Bottleneck 현상이 일어날 수도 있으니, 데이터의 전송에도 신경을 써야 한다.
Bottleneck 현상을 해결하기 위해 아래와 같은 방법들을 사용해볼 수 있다.
  • 모든 data를 RAM으로 읽어들이기
  • HDD 대신 SSD 사용하기
  • CPU의 멀티 쓰레드를 이용하여 prefetch된 data 사용하기

Deep Learning Framework

notion image
최근에 정말 수많은 딥러닝 프레임워크들이 나오고 있다. 해당 강의가 2017년 시점인 것을 고려하면, 현재는 더 많이 나왔을 것이다.
우리가 딥러닝 프레임워크를 사용하는 이유는 다음과 같다.
  1. Computational graph를 쉽게 build하기 위해
  1. Gradient 계산을 쉽게 하기 위해
  1. GPU에서 효과적으로 딥러닝을 돌리기 위해

Tensorflow

Tensorflow는 Neural Network를 먼저 정의하고 그 다음 run을 통해 training을 시킨다. Graph가 굉장히 static 하다는 특징을 가지고 있다.
Static graph는 computational graph를 정의하고 정의한 그래프를 매 훈련마다 재사용한다는 특징이 있다.
notion image

Keras

Keras는 Tensorflow에서 제공하는 high-level wrapper이다.
Keras는 코드가 굉장히 간단하고 직관적인 특징을 갖는다.
notion image

PyTorch

PyTorch에는 세 가지의 abstraction 수준이 존재한다.
  • Tensor은 GPU에서 돌아가게끔 만든 다차원 배열이다.
  • Variable이란 computational graph의 하나의 노드라고 생각하면 되며, data와 gradient 값을 가지고 있다.
  • Module이란 neural network의 하나의 layer이다.
PyTorch는 Tensorflow와 다르게 graph가 dynamic graph이다. Training을 시킬 때마다, 매번 새로운 그래프를 구성한다.
따라서 코드를 깔끔하게 작성할 수 있다.
notion image
notion image
Module을 새로 만들어 주고, 내가 만든 모델을 이용하여 학습을 진행할 수 있다.
DataLoader를 사용하여 쉽게 dataset을 불러올 수도 있다.

Caffe2

마지막으로, Caffe2의 특징은 다음과 같다.
  • C++로 작성되어 있다.
  • Python으로 모델을 training 시키고, serialize와 deploy는 Python 없이 진행할 수 있다.
  • iOS / Android에서도 동작한다.
  • 제품 개발에 특화되어 있다.