2.1.5. 딥러닝 프레임워크 소개

프레임워크(Framework)란 응용 프로그램을 개발하기 위한 여러 라이브러리나 모듈 등을 효율적으로 사용할 수 있도록 하나로 묶어 놓은 일종의 패키지를 말합니다. 앞에서 소개한 머신러닝, 딥러닝이 복잡한 문제를 해결하고 정교한 작업을 수행할 수 있다면, 딥러닝 시스템을 구축하는 것은 데이터 과학자 및 소프트웨어 엔지니어들 에게 큰 과제입니다. 다행히도 딥러닝 솔루션을 쉽게 구축할 수 있도록 많은 오픈소스 프레임워크가 공개되어 있습니다. 현재 소개된 딥러닝 프레임워크들은 각각 다른 목적으로 제작되었으며, 각각의 고유한 기능과 특성을 제공합니다. 딥러닝 프레임워크들에 대한 간단한 소개를 해 봅니다.

1) 텐서플로(TensorFlow)

가장 인기 있는 딥러닝 라이브러리 중 하나인 텐서플로우[TensorFlow]는 구글에서 개발했으며 2015년 오픈소스로 공개됐습니다. 2세대 머신러닝 시스템으로도 불리는 텐서플로우는 파이썬[Python] 기반 라이브러리로 여러 CPU 및 GPU와 모든 플랫폼, 데스크톱 및 모바일에서 사용할 수 있습니다. 또한 C++ 과 R 과 같은 다른 언어도 지원하며 딥러닝 모델을 직접 작성하거나 케라스(keras)와 같은 래퍼 라이브러리를 사용하여 직접 작성할 수 있습니다. 지금 텐서플로는 독자적인 생태계를 갖출 정도로 발전했습니다. 텐서플로 전문 블로거도 나오고, 텐서플로를 테마로 한 사용자 커뮤티들도 생겨났다. 따라서 자원도 많고 튜토리얼도 풍부합니다. 텐서플로 사이트(https://www.tensorflow.org/)에만 들어가도 충분한 정보를 얻을 수 있습니다.

2) 케라스(Keras)

케라스(Keras)는 파이썬으로 작성된 오픈 소스 신경망 라이브러리입니다. 텐서플로는 매우 훌륭한 딥러닝 라이브러리 이지만 이를 직접 사용하여 딥러닝 모델을 만드는데 기초 레벨부터 작업해야 하기 때문에 사용하는데 어려울 수 있습니다. 이러한 문제를 해결하기 위해 케라스는 효율적인 신경망 구축을 위한 단순화된 인터페이스로 개발되었습니다. 케라스는 딥러닝 비전문가라도 각자 분야에서 손쉽게 딥러닝 모델을 개발하고 활용할 수 있도록 직관적인 API를 제공하고 있습니다. “케라스는 사용자들이 어떻게 하면 코딩을 더 쉽게 할 수 있을까?” 에 기반하여 만들어진 라이브러리입니다. 실제로 케라스에서는 다양한 뉴럴 네트워크 모델을 미리 지원해주고 있으므로, 그냥 블록을 조립하듯이 네트워크를 만들면 되는 식이라, 전반적인 네트워크 구조를 생각하고 작성한다면 빠른 시간 내에 코딩을 할 수 있는 엄청난 장점이 있습니다. 내부적으로는 텐서플로우(TensorFlow), 티아노(Theano), CNTK 등의 딥러닝 전용 엔진이 구동되지만 케라스 사용자는 복잡한 내부 엔진을 알 필요가 없습니다. 직관적인 API로 머신러닝의 필수 학습 모델(다층퍼셉트론 모델, 컨볼루션 신경망 모델, 순환 신경망 모델 또는 이를 조합한 모델)을 쉽게 구성할 수 있으며, 다중 입력 또는 다중 출력 등 다양한 구성을 할 수 있습니다. 그러나 너무 케라스에만 의존하다 보면 텐서플로를 완전하게 익히지 못하게 된다는 단점도 존재합니다. 케라스 공식 사이트(https://keras.io/)에서 더 많은 정보를 접할 수 있습니다. 케라스는 파이썬 기반으로 작성되었으며 매우 가볍고 배우기 쉽습니다.

3) 테아노(Theano)

'최초의 딥러닝 라이브러리' 중 하나인 테아노는 파이썬 기반이며 CPU 및 GPU의 수치계산에 매우 유용합니다. 파이선 라이브러리의 하나로 다차원 배열과 관계가 있는 수학적 표현을 정의하고, 최적화 하며, 평가하도록 해줍니다. 오픈소스 프로젝트로 캐나다 몬트리얼대학의 머신 러닝 연구 그룹 중 하나가 제일 먼저 개발했습니다. 공식 사이트(https://pypi.org/project/Theano/#history)에 들어가면 다운로드가 가능합니다.

텐서플로우와 마찬가지로 테아노는 저수준 라이브러리로 딥러닝 모델을 직접 만들거나 그 위에 래버 라이브러리를 사용하여 프로세스를 단순화 할 수 있습니다. 그러나 다른 확장 학습 프레임워크와 달리 확장성이 뛰어나지 않으며 다중 GPU지원이 부족합니다.

4) 파이토치(Pytorch)

토치(Torch)는 Lua기반의 딥러닝 프레임워크로서 페이스북/트위터/구글 과 같은 회사들이 사용하고 개발한 라이브러리입니다. GPU 처리를 위해 C/C++ 라이브러리와 CUDA(NVIDIA의 GPU라이브러리)를 사용합니다. 토치는 Lua 스크립트 인터페이스 때문에 처음 딥러닝을 시작하는 사람들에게 인기가 많지는 않았습니다. 하지만 최근 파이토치(PyTorch)라고 불리는 Torch의 파이썬 구현은 인기를 얻었고 빠른 채택을 얻고 있습니다. 파이토치는 토치(Torch)라는 머신 러닝 라이브러리에 바탕을 두고 만들어진 파이선용 오픈소스 머신 러닝 라이브러리입니다. 페이스북의 AI 연구 팀이 개발한 것에서부터 출발했습니다. 파이토치 공식 웹사이트(https://pytorch.org/)에 의하면 파이토치 라이브러리는 “빠르고 유연한 실험을 하게 해주는 딥 러닝 프레임워크”입니다. 심층 신경망(deep neural network)과 강력한 GPU 가속을 가진 텐서 컴퓨팅(tensor computing)이 포함된 파이선 패키지 형태로 제공됩니다.

5) 아파치(Apache) MXNet

아파치 MXNet은 오픈소스 딥 러닝 프레임워크로, 아파치 소프트웨어 재단(Apache Software Foundation)에서 개발 중에 있습니다. Apache MXNet은 빠르고 확장 가능한 교육 및 추론 프레임워크로서 머신러닝을 위해 사용이 쉽고 간단한 API가 제공됩니된다.

이 프레임워크가 주목을 받는 이유는 AWS(Amazon Web Service)가 아파치 MXNet을 딥러닝 엔진으로 선택했기 때문입니다. MxNet은 확장성이 좋고 다중 GPU와 컴퓨터로 작업할 수 있기 때문에 대중적입니다. 기업용으로도 매우 유용합니다. 이것은 아마존이 MxNet을 딥러닝을 위한 참조 라이브러리로 사용한 이유 중 하나이기도 합니다. 아마존은 MXNet 커뮤니티에 참여해 프레임워크 개발에 적극 참여했으며, 상당한 투자를 감행했습니다.

6) CNTK

CNTK라는 약어로 알려져 있는 Microsoft Computational Network Toolkit은 딥러닝 모델을 교육하기 위한 오픈소스 딥러닝 도구입니다. CNTK는 MS 리서치 팀이 만든 기술입니다. MS는 번역 기술, 음성인식, 이미지 음식 등과 관련한 트레이닝을 할 때 CNTK를 직접 이용했다고 설명했습니다. MS 리서치 팀은 CNTK를 2015년 4월에 처음 공개하고 코드는 자체 코드 저장소 ‘코드플렉스‘에 올렸습니다. 앞으로 CNTK 관리는 깃허브 프로젝트 안에서 할 예정입니다. MS는 “깃허브로 소스코드를 옮겨서 더 폭넓은 개발자에게 CNTK를 제공할 것”이라고 설명했습니다. 그만큼 CNTK 생태계를 넓히고 싶다는 의미입니다. 높은 확장성과 성능을 발휘하도록 설계되었고 여러 시스템에서 실행 될 때 Theno 및 텐서플로우와 같은 다른 툴킷과 비교할 때 높은 성능을 제공합니다.

Last updated