TensorFlow Python

프레임워크 비교 : Deeplearning4j, Torch, Theano, TensorFlow, Caffe, Paddle, MxNet, Keras 및 CNTK

kjun.kr 2018. 3. 15. 00:25
728x90
728x170

정리가 잘되어있는것 같아서 퍼왔다.

원본 링크 : https://deeplearning4j.org/kr/compare-dl4j-torch7-pylearn

Lua

Torch & Pytorch

Torch는 Lua언어로 작성된 API를 제공하는 계산 프레임 워크로 머신러닝 알고리즘을 지원합니다. Torch의 어떤 버전들은 페이스 북이나 트위터와 같은 대형 기술 회사에서 자체 버전을 개발하여 사용하고 있습니다. Lua는 다중 패러다임 스크립팅 언어로 1990 년대 초 브라질에서 개발되었습니다.

Torch7은 많은 장점이 있지만 파이썬 기반의 학계나 자바 언어를 사용하는 소프트웨어 엔지니어에게 쉽게 접근할 수 있도록 설계되지는 않았습니다. 반면에 Deeplearning4j는 업계에서의 사용 편의성을 반영하여 자바로 작성되었습니다. 우리는 상용성이 보다 광범위한 딥러닝 구현을 방해하는 요소라고 믿습니다. 우리는 하둡이나 스파크처럼 오픈 소스 분산 런타임을 통해 확장성을 자동화해야 한다고 생각합니다. 또한 상업적 지원이 가능한 오픈 소스 프레임워크야말로 작업 도구(working tools)를 보장하고 커뮤니티를 구축하는 데 가장 적합한 솔루션이라고 생각합니다.

Pytorch로 알려진 Torch용 Python API는 2017 년 1 월 Facebook에서 오픈 소스화되었습니다. PyTorch는 가변 길이 입력 및 출력을 처리 할 수 있는 다이나믹 컴퓨테이션 그래프를 제공하며 특히 RNN을 사용할 때 유용합니다. 다이나믹 컴퓨테이션 그래프를 지원하는 다른 프레임 워크로는 CMU의 DyNet과 PFN ‘s Chainer가 있습니다.

장점과 단점:

  • (+) 결합하기 쉬운 많은 모듈 조각
  • (+) 자신만의 레이어 유형을 작성하고 GPU에서 실행하기 쉬움
  • (+) Lua. ;) (대부분의 라이브러리 코드는 Lua로 되어있음, 읽기 쉬움)
  • (+) 사전 학습된 모델 대거 존재
  • (+) PyTorch
  • (-) Lua
  • (-) 보통 스스로 학습 코드를 작성해야 함 (적은 플러그 앤 플레이)
  • (-) 상업적 지원 없음
  • (-) 미완성 문서

파이썬 프레임워크

Theano와 생태계

많은 딥러닝 분야의 학술 연구자들은 파이썬으로 작성된 딥러닝 프레임 워크의 대부로 불리는 Theano에 의존합니다. Theano는 Numpy와 같은 다차원 배열을 다루는 라이브러리입니다. Theano는 데이터 탐색에 적합하며 다른 라이브러리와 함께 연구용으로 개발되어 사용됩니다.

Keras, Lasagne, Blocks 등 수많은 오픈 소스 딥러닝 라이브러리가 Theano를 기반으로 탄생했습니다. 이 라이브러리들은 Theano의 일부 비직관적인 인터페이스 위에 API를 사용하기 쉽게 레이어를 추가하는 방식입니다. (2016 년 3 월 현재 Pylearn2는 더이상 유효하지 않은 것 같습니다.)

반면에 Deeplearning4j는 JVM언어인 Java 및 Scala로 솔루션을 생성하며 딥러닝을 프로덕션에 최적화 하였습니다. 병렬 GPU나 CPU에서 가능한 한 많은 노브(knobs)를 자동화하고 확장 가능한 방식(Scalable Fashion)으로 필요에 따라 Hadoop 및 Spark와 통합하는 것을 목표로 합니다.

장점과 단점

  • (+) Python + Numpy
  • (+) 컴퓨테이셔널 그래프에 적합한 추상화
  • (+) 컴퓨테이셔널 그래프에 RNN이 잘 맞음.
  • (-) Raw Theano는 수준이 낮은 편임.
  • (+) 고급 래퍼 (Keras, Lasagne) 의 어려운 부분을 완화
  • (-) 오류 메시지는 도움이 되지 않는 경우가 있음.
  • (-) 대형 모델은 컴파일 시간이 오래 걸릴 수 있음.
  • (-) 토치보다 훨씬 “복잡함”
  • (-) 사전 학습 된 모델에 대한 패치 지원
  • (-) AWS에서 잦은 버그가 발생
  • (-) 단일 GPU

TensorFlow

  • Google은 Theano를 대체하고자 TensorFlow를 만들었습니다. 사실 두 라이브러리는 아주 비슷합니다. Ian Goodfellow와 같은 Theano의 창시자 중 일부는 OpenAI로 떠나기 전에 Google에서 Tensorflow를 만들었습니다.
  • 현재 TensorFlow 는 소위 “인라인” 행렬 연산을 지원하지 않지만 실행을 위해서는 행렬을 복사해야 합니다. 매우 큰 행렬을 복사하는 것은 모든 면에서 비용이 많이 듭니다. Tensorflow는 최신 딥러닝 도구에 비해 네 배나 시간이 더 걸립니다. 구글은 이 문제에 대해 연구하고 있다고 이야기 합니다.
  • 대부분의 딥러닝 프레임 워크와 마찬가지로 TensorFlow는 C / C ++ 엔진에 Python API로 작성되어 빠른 실행이 가능합니다. Java 및 Scala 커뮤니티를 위한 것은 아닙니다.
  • TensorFlow 는 CNTK와 같은 다른 프레임워크 보다 속도면에서 많이 느립니다.
  • TensorFlow는 딥러닝 이상의 것입니다. TensorFlow에는 실제로 강화학습(Reinforcement Learning) 및 기타 알고리즘을 지원하는 도구가 있습니다.
  • Tensorflow가 인정한 Google의 목표는 연구원들이 짠 코드를 공유하고 소프트웨어 엔지니어가 딥러닝에 접근하는 방법을 표준화하며 TensorFlow가 최적화 된 Google Cloud 서비스에 대한 추가적인 그리기를 창출하는 것입니다.
  • TensorFlow는 상업적 지원이 되지 않으며 향후에도 Google은 엔터프라이즈를 위한 오픈 소스 소프트웨어 지원사업에 뛰어들 것 같지 않습니다. 현재는 그저 연구원들에게 툴을 제공할 뿐입니다.
  • Theano와 마찬가지로 TensforFlow는 컴퓨테이션 그래프 (예 : z = sigmoid (x)와 같이 x와 z가 행렬인 일련의 행렬 연산)를 생성하고 자동으로 미분합니다. 자동 미분이 중요한 이유는 신경망을 업데이트 시키기 위한 역전파(Backpropagation) 변화량을 매번 수동으로 계산하고 반영할 필요가 없기 때문입니다. Google의 생태계에서 컴퓨테이션 그래프는 구글 브레인 (Google Brain)이중추적인 역할을 하였지만 아직 오픈 소스화 하지는 않았습니다. Google의 사내 딥러닝 솔루션의 절반은 Tensorflow로 구축되어 있습니다.
  • 기업의 관점에서 볼 때, 생각해봐야 할 문제는 이러한 도구를 Google에 전적으로 의존하여 사용해야 하는가의 여부입니다.
  • 주의 사항: Tensorflow의 모든 작업이 Numpy에서 하는 것처럼 작동하는 것은 아닙니다.

장점과 단점

  • (+) Python + Numpy
  • (+) 컴퓨테이션 그래프 앱스트랙션, Theano와 비슷
  • (+) Theano보다 컴파일 시간이 빠름
  • (+) TensorBoard 시각화
  • (+) 데이터 및 모델 병렬 처리
  • (-) 다른 프레임 워크보다 느림.
  • (-) Torch보다 훨씬 “더 복잡”하지만 기능이 많음.
  • (-) 사전 학습된 모델 부족.
  • (-) 컴퓨테이션 그래프는 순수 파이썬으로 속도가 느림.
  • (-) 상업적 지원 없음.
  • (-) 파이썬으로 드롭 아웃되어 각각의 새로운 트레이닝 배치를 로드
  • (-) 툴로 사용하기 어려움.
  • (-) 다이나믹 타이핑은 대형 소프트웨어 프로젝트에서 오류가 발생하기 쉬움.

Caffe

Caffe는 머신 비전 라이브러리로 Matlab이 C 및 C ++에 고속 컨볼루션 신경망을 구현한 것으로서 널리 사용되고 있습니다. (속도와 기술적인 빚(Technical Debt)의 트레이드오프를 알고 싶다면 칩에서 칩으로 C ++ 포팅에 대한 Steve Yegge의 이야기)를 참조할 것). Caffe는 문자, 음성, 또는 시계열 데이터와 같은 다른 딥러닝 응용 프로그램을 위한 것이 아닙니다. 여기 언급된 다른 프레임 워크와 마찬가지로 Caffe는 API로 Python을 선택했습니다.

Deeplearning4j와 Caffe는 모두 최신의 컨볼루션 신경망을 사용하여 이미지를 분류합니다. Caffe와 달리 Deeplearning4j는 임의의 수의 칩에 대해 병렬 GPU를 지원 할뿐만 아니라 여러 GPU 클러스터에서 딥러닝을 보다 원활하게 진행할 수있는 많은 기능을 제공합니다. Caffe는, 논문에서 광범위하게 인용되었지만, 주로 Model Zoo 사이트에서 호스팅되는 사전 학습 모델의 소스로 사용됩니다. Deeplearning4j는 Caffe 모델을 Spark로 가져오기 위한 파서(parser)를 구축하고 있습니다.

장점과 단점

  • (+) 피드 포워드 네트워크 및 이미지 처리에 적합.
  • (+) 기존 네트워크 미세 조정에 적합.
  • (+) 코드 작성 없이 모델 트레이닝 가능.
  • (+) 파이썬 인터페이스가 매우 유용.
  • (-) 새로운 GPU 레이어에 C ++ / CUDA를 작성해야 함.
  • (-) 회귀망에 적합하지 않음
  • (-) 큰 네트워크를 다루기에는 불편함 (GoogLeNet, ResNet)
  • (-) 확장성이 없음
  • (-) 상업적 지원 없음
  • (-) 개발이 느려지고 있으며, 곧 유효하지 않을 수 있음

CNTK

CNTK는 Microsoft의 오픈 소스 딥러닝 프레임 워크입니다. Computational Network Toolkit”의 약자이며, 피드 포워드 DNN, 컨볼루션 넷 및 회귀망이 포함됩니다. CNTK는 C ++ 코드로 Python API를 제공합니다. CNTK는 허용 라이센스가있는 것처럼 보이지만 놀랍게도ASF 2.0, BSD 또는 MIT와 같은 일반적인 라이선스 중 하나를 채택하지는 않았습니다. 이 라이센스는 CNTK가 분산 교육을 쉽게 수행 할 수있는 방법 (1 bit SGD)에 적용되지 않으며, 상업적 용도로 부여되지도 않았습니다.

Chainer

CChainer는 Python API를 제공하는 오픈소스 신경망 프레임워크로, 개발자들 중 코어팀이 Preferred Networks에서 일하고 있습니다. Preferred Networks는 도쿄에 기반을 두고 있는 기계학습 스타트업이며 대부분의 엔지니어들이 도쿄대학 출신입니다.  Chainer는 CMU의 DyNet과 Facebook의 PyTorch가 출현하기 전까지 다이나믹 컴퓨테이션 그래프나 가변 길이의 입력을 지원하는 신경망으로 NLP 작업에 많이 사용되는 최고의 프레임워크였습니다. 벤치마크에 따르면 Chainer는 다른 Python 기반 프레임워크보다 눈에 띄게 빠릅니다 TensorFlow는 MxNet 및 CNTK를 포함하는 테스트 그룹 중 가장 느린 속도를 보입니다.

DSSTNE

Amazon의 Deep Scalable Sparse Tensor Network Engine (DSSTNE)은 머신러닝 및 딥러닝 모델 구축을 위한 라이브러리입니다. Tensorflow와 CNTK 이후 출시 된 많은 오픈 소스 딥러닝 라이브러리 중 가장 최근의 것이라고 볼 수 있습니다. Amazon은 AWS로 MxNet을 지원했기 때문에 미래가 명확하지 않지만, C ++로 작성된 DSSTNE는 속도 면에서 우수하다고 할 수 있습니다. 단, 다른 라이브러리만큼 큰 커뮤니티가 구축된 것은 아닙니다.

DyNet

Dynamic Neural Network ToolkitDyNet은 Carnegie Mellon University에서 나왔으며 cnn이라고 불려 왔습니다. 주목할만한 특징은 NLP에 적합한 가변 길이의 입력을 지원하는 다이나믹 컴퓨테이션 그래프입니다. PyTorch와 Chainer도 같은 것을 제공합니다

  • (+) 다이나믹 컴퓨테이션 그래프
  • (-) 작은 사용자 커뮤니티

Keras

Keras는 Theano와 TensorFlow를 백엔드(back-end)로 사용하는딥러닝 라이브러리로서 Torch에서 영감을 얻어 직관적 API를 제공합니다. 아마도 이것은 현존하는 최고의 파이썬 API 일 것입니다. Deeplearning4j는 Keras를 통해 Theano와 Tensorflow에서 혹은 Keras자체의 모델을 가져옵니다. 창시자는 Google의 소프트웨어 엔지니어인 Francois Chollet입니다.

  • (+) Torch에서 영감을 얻은 직관적 API
  • (+) Theano와 작업 가능, TensorFlow와 Deeplearning4j 백엔드 (CNTK 백엔드 예정)
  • (+) 빠르게 성장하고 있는 프레임워크
  • (+) 신경망의 표준 Python API이 될 가능성이 큼

MxNet

MxNetAmazon Web Services에서 채택한 R, Python 및 Julia와 같은 언어를 API로 사용하는 머신러닝 프레임 워크입니다. 애플의 일부가 2016 년에 Graphlab / Dato / Turi가 인수된 후에도 사용하고 있다는 소문이 돌고 있습니다. MxNet은 빠르고 유연하며 현재 Pedro Domingos와 워싱턴 대학 연구원 팀이 참여하고 있습니다. MxNet과 Deeplearning4j의 장단점 비교는 여기에서 확인할 수 있습니다.

Paddle

PaddleBaidu가 만들고 지원한 딥러닝 프레임 워크로, “PArallel Distributed DeepLEarning”의 약자입니다. Paddle은 출시된 주요 프레임 워크 중 가장 최근의 것이며 다른 프레임 워크와 마찬가지로 Python API를 제공합니다.

BigDL

BigDL은 Apache Spark에 초점을 맞춘 새로운 딥러닝 프레임 워크로서 Intel 칩에서만 작동합니다.

라이센싱

각각의 오픈소스들의 라이센싱 정책은 다음과 같습니다. Theano, Torch 및 Caffe는 특허 및 특허 분쟁을 다루지 않는 BSD 라이센스를 사용합니다. Deeplearning4j 및 ND4J는 Apache 2.0 라이센스 하에 배포되며 특허권 부여 및 피소송 조항을 모두 포함합니다. 즉, 누구나 자유롭게 Apache 2.0 라이센스 코드를 기반으로 한 파생물을 만들 수 있지만 원래 코드 (이 경우 DL4J)와 관련하여 다른 사람이 특허 청구를 제기하면 즉시 모든 특허 청구를 잃게됩니다. (즉, 소송에서 자신을 지키기 위한 자원은 제공되지만 다른 사람들을 공격하는 데에는 사용될 수 없습니다.) BSD는 일반적으로이 문제는 다루지 않습니다.

728x90
그리드형