2015년 6월 8일 월요일

딥러닝 공부 가이드 (HW / SW 준비편)

뭐든지 시작이 중요합니다. 시험공부를 시작하기 전에 갑자기 책상 정리하고, 방청소를 하는게 괜한 이유가 있는게 아니죠. 그만큼 정갈하게 시작하고 싶고, 완벽한 시작을 꿈꾸니까요. (물론 그러다가 정작 공부를 못하기는 합니다만...)

딥러닝 공부도 마찬가지일 것입니다. 여러분들도 아마 공부를 시작하진 않고 관련 자료만 디립다 저장해 놓으셨겠지만 (ㅋㅋㅋ) 이 모든건 아직 장비빨이 갖춰지지 않았기 때문이죠. 일단 딥러닝을 공부하겠다는데 딥러닝 공부를 위한 완벽한 환경부터 갖추어야 하지 않겠습니까? ㅎㅎ

딥러닝을 위한 새로운 GPU, GTX Titan X를 발표하는 NVIDIA CEO의 모습 (사진출처) 

그래서 "딥러닝 공부 가이드" 시리즈를 준비했습니다.
   [딥러닝 공부 가이드]



   3.  딥러닝 공부자료 모음편

오늘은 그 첫번째로 딥러닝을 위해 필요한 하드웨어들과 소프트웨어들을 어떻게 선택하고 준비할지에 대해 알아보도록 하죠.

딥러닝을 위한 하드웨어 가이드

사실 저도 여러 하드웨어를 설치해 이용해보진 않았습니다. 하지만 딥러닝을 위해 하드웨어를 구성하시는 분들께 좋은 자료가 있어 소개드립니다.
A Full Hardware Guide to Deep Learninghttps://goo.gl/wrc9Is
Which GPU to get for Deep Learning, https://goo.gl/VF2RxR 
한줄요약 : 돈 많으면 좋은거 쓰세요;;;

이렇게 끝내시면 아마 화내시겠죠...? ㅎㅎ 그래서 위에 언급한 글의 내용을 간략하게 요약해 드리겠습니다. 먼저, GPU부터 살펴보도록 하죠.


GPU는 딥러닝에 있어 연산을 병렬처리하게 끔 해주는 가장 핵심적인 하드웨어 요소입니다. 딥러닝의 큰 발전 원인 중 하나로 GPGPU(General-Purpose Computing on GPU)의 등장을 꼭 꼽으니 말이죠. 예전엔 빅데이터의 처리가 너무도 오래걸렸지만, 요즘은 그냥 많은 양의 데이터만큼 많은 GPU를 꽂아서 병렬처리를 하면 몇 백만개의 데이터도 두렵지 않답니다. 게다가 딥러닝 라이브러리를 이용한다면 병렬처리를 간단하게 구현할 수 있으니, 그것 또한 엄청 큰 매력이죠.

우선 돈이 무척 많으시다면 GTX Titan X를 쓰십시오. 만약에 다니시는 회사에서 지원을 빵빵하게 해주신다면 말이죠. 현재시점(15년 6월)을 기준으로 가격도 함께 말씀드리면요, GTX Titan X는 140만원 이상으로 거의 컴퓨터 한 대 값이네요 ㅎㄷㄷ 다다익선! 데이터가 많다면 더 많이 꽂아서 주변의 부러움을 사시기 바랍니다.

요거보다 한단계 낮은 걸 쓰신다면 GTX 980을 고르셔도 충분할 것 같습니다. (70~90만원) 제가 쓰고있는게 바로 요놈이지요. 제 생각엔 연구에는 GTX 980 하나만 있어도 충분하지 않을까 싶습니다. 무슨 구글처럼 수백개의 머신을 돌릴게 아니라면 말이죠.

만약에 돈이 없으시다면 GTX 960 (30만원)을 쓰셔도 좋을 것 같고요. 더 없으시면 더 낮은 걸로 쓰실 수 밖에 없겠지요. (참고로 GTX 960은 GTX 980의 약 절반의 성능을 보여줍니다.) 만약 제가 제시해드린 것 외의 다른 GPU를 고르신다면 먼저 그 GPU가 CUDA 프로그래밍을 지원하는지 꼭 확인해보셔야 합니다. GPU 이용에 있어 엔비디아의 CUDA 지원은 거의 필수적인 기술이거든요.
CuDA 지원 GPU 리스트 : https://developer.nvidia.com/cuda-gpus 
어떤 분들은 라데온 제품을 쓰면 안되느냐 하시는 분들도 계실텐데... 그르지 마요...;; 그냥 딥러닝은 엔비디아로 가는겁니다. 딥러닝에 맞춘 하드웨어나 소프트웨어 지원이 빵빵하거든요. (CuDNN이란게 라이브러리도 제공해 줄 정도니까요)

GPU간의 성능 비교가 궁금하신 분들은 gpuboss.com 이란 사이트가 매우 유용하실 것입니다. 한가지 더 말씀드리자면 GTX 970은 960보다 훨씬 빠르고 980보다 약간 느린 성능을 보이지만 메모리를 3.5G 이상 사용할 경우 효율저하의 문제가 발생한다고 하네요. 구매에 참고하세요.

GTX980 vs. GTX960 (gpuboss.com)

딥러닝을 노트북에서 돌리고 싶으신 분들도 아마 계실텐데요, 노트북은 발열문제로 인해 GPU가 풀 성능을 발휘하지 못하는 경우가 많습니다. 예를 들어 GTX980을 노트북 버전으로 개량한 GTX980M 제품은 발열을 조절할 수 있도록 클럭수를 제한하고 있죠. 따라서 아키텍쳐는 GTX980과 거의 같지만 그 성능은 GTX960보다 살짝 나은 수준 정도라고 하네요. (가격은 GTX980과 비슷한데 말이죠ㅠ)

참고로 그냥 알고리즘 공부를 하신다면 굳이 하드웨어까지 챙겨서 하실 필요는 없고요, 정말 많은 데이터를 다루고 싶은 분들만 GPU를 구매하시는게 좋지 않을까 싶습니다. 인내심이 여러분의 머니를 아껴줍니다ㅎㅎ 만약 GPU를 사신다면 웬만하면 4G 이상의 메모리를 가진 GPU를 사시길 권합니다.

GPU 외에 다른 하드웨어 조건들은 사실 크게 까다롭지 않습니다. 그래도 꼽아보자면, 먼저 파워가 충분해야합니다. GPU가 파워를 많이 소모하기 때문에 최소 500W 이상이어야 하고요 (GPU와 CPU의 요구 Watt를 더한 후 100~300W 여유를 가져주세요.), 메인보드도 PCIe를 많이 지원해주는 좋은 메인보드면 좋겠네요. (전 PCIe 3.0 소켓이 부족해서 SSD를 떼어내야만 했던 아픔이...ㅠ GPU 하나 당 2개의 PCIe가 필요합니다.)

CPU는 딥러닝에서 주로 GPU에 변수값들을 복사하며 주고받을 때 사용되는데 GPU하나 당 2개의 2GHz 이상의 클럭이면 좋다고 하고요 (뭐 요즘 쿼드코어면 충분하죠), 본체가 너무 뜨거워져서 성능이 저하되지 않도록만 쿨링만 조심해주시면 된다고 합니다.

이 정도면 하드웨어 선택에 도움이 좀 되셨으려나요? 그럼 그 다음, 소프트웨어 선택 부분으로 넘어가 보도록 하죠.

딥러닝 라이브러리  

먼저 딥러닝 관련 자료들을 모은 사이트부터 하나 보고 가실게요~
[딥러닝 코드 모음]  http://deeplearning.net/software_links/
위에 소개해드린 deeplearning.net은 코드들 말고도 읽기자료, 데모 등도 잘 소개되어 있으니 딥러닝을 공부하며 종종 참고하시기 바랍니다.

딥러닝을 입문하시는 분들이라면 Matlab으로 입문하시는 것도 나쁘지 않을 것 같습니다. Matlab은 언어도 쉽고 변수값을 확인하기도 쉬우며 관련 코드들도 많이 존재하니까요. 저도 사실 알고리즘을 처음 이해할 때는 먼저 Matlab 코드를 보면서 따라가는 편입니다. 워낙 프로그램 인터페이스가 잘 되어있어 값 확인하기가 쉽거든요.

Matlab 자료 중에는 간단한 Neural Network부터 Deep belief network까지 다양한 알고리즘이 있는 DeepLearnToolbox를 추천해 드립니다.
[코드] https://github.com/rasmusbergpalm/DeepLearnToolbox
만약 Convolutional Neural Network를 Matlab으로 공부하는 분이시라면 다음의 자료를 추천드립니다.
[튜토리얼] http://www.robots.ox.ac.uk/~vgg/practicals/cnn/
[코드] https://github.com/vedaldi/practical-cnn


하지만 여러분들께서 만약 큰 용량의 데이터를 다루신다면 MATLAB은 너무 느리죠. 그리고 GPU 서포트도 쉽지 않고요. 이 경우엔 딥러닝 전문 라이브러리를 쓰시는 것이 좋습니다. 대표적으로는 Theano, Torch, Caffe가 있죠.

Theano는 딥러닝 대가 Yoshua Bengio교수가 이끄는 몬트리올 대학 LISA 연구실에서 개발된 라이브러리입니다. 파이썬을 사용하고 있고 내부적으로는 속도를 위해 C로 구현이 되어있죠. 당연히 GPU가 지원되고요, Bengio 교수가 워낙 좋은 논문/문서들을 쏟아내는 만큼, Theano와 Theano 기반의 딥러닝에 대해서도 좋은 튜토리얼을 제공하고 있네요. 특히 주요 알고리즘들이 예제코드로 제공되어 있어 딥러닝을 공부하시는 분들껜 매우 유용한 라이브러리가 아닐까 생각합니다. 다양한 라이브러리가 존재하는 "파이썬"을 기반으로 한다는 점도 장점이고요.
[Theano 튜토리얼] http://deeplearning.net/software/theano/
[Deep Learning 튜토리얼] http://deeplearning.net/tutorial/
Torch7은 딥러닝 대가 Yann LeCun교수가 페이스북과 함께 중점적으로 사용하고 있는 라이브러리입니다. 스크립트 언어인 Lua를 기본으로 하고 있고 Theano와 거의 유사한 기능을 제공하고 있습니다. Theano보다 더 빠르다고 주장하는데 그것에 대해서는 논란이 있고요, 아무래도 페이스북이란 대기업이 키우다보니 향후 발전성이 클 것으로 기대됩니다.
[Torch7] http://torch.ch/
[Torch7 튜토리얼] http://code.cogbits.com/wiki/doku.php


Caffe는 버클리대학의 비전 연구그룹(BVLC)에서 개발한 C++ 라이브러리입니다. C++을 이용하다보니 자유도가 높고 속도가 빠른 반면, 약간의 언어적 번거로움이 있고, 튜토리얼이 아직은 풍성하지 않은 것이 단점입니다.
[Caffe] http://caffe.berkeleyvision.org/
 Reddit에는 이런 커맨트가 있네요. 
"Caffe는 다른 타겟을 가지고 있다. Caffe는 보다 큰 마켓에 딥러닝을 적용하려는 목적을 가지고 있는 반면 Torch나 Theano는 딥러닝 그 자체 연구에 더 적합하다."
좀더 자세한 Theano/Torch7/Caffe의 비교는 다음의 블로그 글(영문)을 참고해주세요.


여기에 또 굿뉴스가 추가됐네요. 바로 구글이 발표한 TensorFlow입니다.
[TensorFlow] https://www.tensorflow.org/
TensorFlow의 가장 큰 특징은 복잡한 코딩 없이 다이어그램으로 쉽게 딥러닝을 적용해 볼 수 있다는 것입니다! 아주 최상의 성능은 내지 못하더라도 '딥러닝을 적용하면 어떻게 되지?'라는 질문에 대해서 쉽고 빠르게 적용해 볼 수 있는 솔루션인거죠. (성능도 곧 최고의 성능에 가깝게 따라잡을 것이라고 생각합니다.)

다음 편에서는 본격적으로 TensorFlow를 한번 설치하고 시작해보겠습니다. 다음편에서 만나요~



* T-Robotics의 글은 facebook과 rss reader로도 받아보실 수 있습니다.
[facebook] http://facebook.com/trobotics
[rss] http://t-robotics.blogspot.kr/feeds/posts/default