1. 서 론
Machine Learning, Deep Learning에서는 매우 많은 종류의 프레임워크끼리 전국시대를 맞이했고, 그 중 승자라고 한다면 가장 많은 컨트리뷰터와 Star, Fork 수를 지닌 Google의 Tensorflow가 압도적 1위일 것이다.
하지만 CS 세계에서 가장 많은 사람들이 Python, 혹은 Java, 혹은 C++을 사용한다고 해서 그 언어가 <전세계 사용률 1위> 타이틀을 가져갈 수는 있을지언정 <최강의 프로그래밍 언어> 타이틀을 가져갈 수는 없을 것이다.
딥러닝 프레임워크도 크게 다를 것은 없다.
그렇다면 대표적인 4가지의 딥러닝 프레임워크의 비교를 해보도록 하겠다.
(이것은 지극히 개인적이며 주관적인 견해가 포함되어 있다.)
2. 프레임워크
2-1. 텐서플로우
- 구글이 만들었고, 사용자가 효율적인 구현을 위해 C++ 또는 CUDA 코드를 작성하지 않고도 신경망 구조를 쉽게 설계할 수 있는 수준 높은 머선러닝/딥러닝 라이브러리
- Theano처럼 자동 도출을 지원하고, 사용자가 다시 역전파법을 통해서 기울기를 구할 필요가 없음
- 핵심 코드는 C++로 작성되어있음
- 핵심 코드인 C++ 인터페이스를 제외하고, 텐서플로우에는 SWIG(Simplified Wrapper and Interface Generator)를 통해 구현되는 공식적인 Python, Golang, Java 인터페이스가 있음 (즉, 하드웨어가 좋은 환경이라면 Python, 상대적으로 안 좋다면 C++로 작성 가능)
- 데이터 병렬 모드에서 텐서플로우와 매개변수 서버는 매우 유사하지만, 텐서플로우는 독립적인 변수 노드가 있고, 하나의 전체적으로 통일된 매개변수 서버가 있는 것이 다른 프레임워크와 다름 (매개변수 동기화가 더욱 자유로움)
- 텐서플로우와 Spark의 핵심은 데이터 계산의 흐름도
- Spark의 핵심은 데이터 계산의 흐름도. Spark가 지향하는 것은 최대 규모의 데이터. SQL 등의 작업 지원
- 텐서플로우가 주로 지향하는 메모리는 모델 매개변수를 장착한 환경을 만족하는 것으로 계산 효율을 최대화 하는 것
- 뛰어난 이식성
- 가장 뛰어난 벤치마크
2-2. Caffe
- BVLC(Berkeley Vision and Learning Center)에서 관리 중이며, C++로 활용 가능
- 사용이 간편한 네트워크 구조는 구성 파일 형식으로 정의되며, 네트워크를 설계하는 데에 코드가 필요 없음
- 학습 속도가 빠르며, 전설은 아니고 레전드급의 모델을 갖고 있음
- 대규모 데이터 훈련에 적합
- 모듈식 구성 요소로 새로운 모델 및 훈련 관제로 쉽게 확장 가능
- 핵심 개념: 레이어 - 각 신경망의 모듈은 모두 레이어
- 역전파법 알고리즘 부분의 계산 과정을 C++/CUDA로 사용자가 작성해야함
- 잘 훈련된 전형적인 모델(AlexNet/VGG/Inception)과 전설은 아니고 레전드급의 모델(ResNet 등)을 지니고 있음
2-3. Theano
- 몬트리올 대학의 Lisa Lab팀이 개발 및 유지 관리
- 고성능의 기호 계산 및 딥러닝 라이브러리
- GPU에서 성능이 매우 좋지만 CPU에서 성능이 비교적 저조
- NumPy를 통합하여 직접 NumPy의 ndarray를 사용 가능, API 인터페이스를 낮은 비용으로 훈련시킴
- 계산 안정성이 좋으며, 출력 값이 매우 작은 함수(log(1+x) 같은 함수)를 정밀하게 계산하여 출력 가능
- 효율적인 기계 코드로 컴파일하기 위해 C or CUDA 코드를 동적으로 생성
2-4. Torch/PyTorch
- LuaJIT의 고효율 과학 계산 라이브러리로써 대량의 머신러닝 알고리즘을 지원하면서 GPU에서의 계산을 우선적으로 수행
- Facebook에서 딥러닝의 모듈을 개발한 후로 매우 빠르게 발전
- Torch 1에서는 Lua 스크립트로 작성 가능하였지만, Torch와 Caffe2의 프레임워크를 활용하여, 파이썬을 스크립팅 언어로 사용하며, 진화된 토치 C/CUDA 백엔드를 사용
- 강력한 GPU 가속이 적용되는 파이썬으로 된 텐서와 동적 신경망
3. 결 론
이 포스트는 하루이틀 안에 끝내는 것이 아니라 주기적으로 업데이트하며 더 많은 정보를 추가하도록 하겠다.
생각보다 정리하다보니 놓치는 것도 많고 더 공부를 해야할 부분이 많은 것 같다.
'AI & Big Data > AI' 카테고리의 다른 글
[AI 이론] Layer, 레이어의 종류와 역할, 그리고 그 이론 - 2 (BatchNormalization) (2) | 2020.07.07 |
---|---|
[AI 이론] Layer, 레이어의 종류와 역할, 그리고 그 이론 - 1 (Conv2D) (2) | 2020.07.06 |
[Keras] SqueezeNet Model (CNN) 이란? - 2 (실전편, 소스코드 첨부) (0) | 2020.02.13 |
[Keras] SqueezeNet Model (CNN) 이란? - 1 (이론편) (0) | 2020.02.12 |
[딥러닝] 합성곱 신경망, CNN(Convolutional Neural Network) - 이론편 (0) | 2020.01.17 |