클라우드 플랫폼 기반 Deep Learning 연구, 개발시 고려사항
AlphaGo 후폭풍으로 구글을 비롯한 IT회사들은 Deep Learning에 대한 플랫폼, 기술 비즈니스 주도권을 잡기 위한 빠른 움직임을 보이고 있다.
특히, 손쉬운 접근과 싼 CapEx를 무기미끼로 Deep Learning과 클라우드 플랫폼을 결합한 일종의 PaaS(Platform as a Service)를 내놓고 있다.
참고로 클라우드 서비스 시장 점유율은 아마존 AWS가 30%로 1위, MS Azure가 11%로 2위, IBM이 7%로 3위, 구글 GCP(Google Cloud Platform)가 5%로 4위라고 한다. (출처 - 아마존 5년 연속 클라우드 시장 1위 고수)
먼저 구글이 지난 3월 23일 자체 컨퍼런스에서 Cloud Machine Learning 서비스를 발표했다. 이 서비스는 Tensorflow의 cloud 버전이라고 할 수 있을 듯 하다. Tensorflow를 온오프라인 상의 seamless한 Deep Learning 표준 도구로 어필할 수 있고, 여기에 구글의 Vision API, Speech API, Translate API 까지 같이 사용한다면 뭐든 해낼 수 있을것만 같다. 굉장히 공격적이고 매력적이다.
반면, IBM은 AlchemyAPI 인수 후 몇가지 Deep Learning을 해볼 수 있는 API를 선보였지만, 인상적이거나 시장에 어필될만한 부분은 없어 보인다.
MS는 Azure ML이라는 이름으로 사실 가장 먼저 Machine Learning과 클라우드가 결합된 서비스를 내놓았고, 훌륭한 studio와 R, Python의 인터페이스까지 제공하지만 Deep Learning 알고리즘 제공이 부실(아래 링크 참조)하고, 작년 하반기 부터 지원된다던 GPU가 아직까지 지원되고 있지 않다. 이러면 ImageNet 데이터 학습하는데만 40일을 돌려야 하는데... 어쩌란 말이냐
https://azure.microsoft.com/ko-kr/documentation/articles/machine-learning-algorithm-cheat-sheet/
그리고, 클라우드 시장의 최강자 아마존은 자체 Machine Learning 서비스를 작년에 출시했으나 아직 제공하는 알고리즘은 단순 Classification, Regression 수준이다. 그래서, 아마도 AWS EC2에 직접 툴을 설치해서 손쉽고 저렴하게 Deep Learning을 할 수 있다는 점을 어필하는 듯 하다. 아직 PaaS는 준비되지 않았으니 IaaS(Infra as a Service)를 밀고 있다. 아래 링크 참조.
http://www.zdnet.co.kr/column/column_view.asp?artice_id=20160322181122
위에서 살펴본 Deep Learning/Machine Learning 클라우드 플랫폼들은 분명 매력적인 부분이 많다. 아, IBM은 빼주세요
그렇지만, Deep Learning에 deep dive하고자 하는 연구자, 개발자들은 클라우드 사용 전에 몇가지 고려해야할 사항이 있다.
아마존 AWS의 EC2 서비스를 기준으로 꼼꼼하게 따져 보자.
물론 AWS를 폄하할려는 의도가 아니다. 단지 Deep Learning 연구자들의 현명한 소비를 위한 가이드 정도라고 생각해 주었으면 한다.
개인적으로도 AWS를 사용하고 있고, AWS가 개발자들에게 제공하는 기회의 폭과 깊이에 감명하고 서비스의 정교함에 두번 놀라고 있다. 이런 서비스 역량이 결국 시장 점유율로 증명되고 있는게 아닐까 한다.
클라우드 서비스가 저렴하다고 하는데 CapEx는 그렇겠지만, OpEx도 정말 싼지는 진행하는 연구에 따라 다르다.
위 링크의 컬럼에서 언급하는 비용은 저렴한게 맞지만, Deep Learning 연구를 1시간만 하지는 않는다.
참고로, 버지니아 AWS 리전 g2.2xlarge 인스턴스 기준으로 보면 EC2 인스턴스(가상 서버) 하나가 시간 당 약740원 정도 한다. 자세한 요금은 아래 링크를 참조.
https://aws.amazon.com/ko/ec2/pricing/
Example이나 Tutorial과 같은 이미 풀린 문제를 따라하는 것은 길어봐야 1~2주 내외로 학습시키고 완료할 것이다. 이 경우 인스턴스 하나 사용시 아무 문제없이 알고리즘 학습(training)이 잘 끝난다는 가정 하에 약 12만원에서 25만원 정도 소요된다. 따라서, 인스턴스 하나를 약 1달간 띄어 놓으면 50만원 비용 청구가 날라온다(VAT 별도). 또한, 기본 스토리지 용량(60GB, AWS g2.2xlarge 기준) 부족시 추가적인 EBS(Elastic Block Storage)를 사용하면 이에 대한 비용도 추가된다.
이렇게 나이브한 경우를 제외한 현실의 연구를 시작하면, 이른바 삽질의 연속이고 알고리즘이 잘 학습되기 까지 인고의 시간이 소요되어 알고리즘 학습에만 몇 주 이상 걸릴 수도 있다.
시간이 비용인 관계로 싸게 시작했지만 비싸게 끝날 수 있다는 점을 염두해 두어야 한다. (참고로 NVidia Titan X가 약130만원)
클라우드 서비스의 GPU 퍼포먼스는 하이엔드 급이 아닐 수 있다. 예를 들어 AWS의 GPU는 Nvidia compute capability 3.5를 넘지 못 한다. 이는 Tensorflow 0.6 버전을 설치조차 못 한다는 이야기다(Tensorflow 최신 버전은 capability 3.0까지 지원하고, 0.6버전도 소스를 살짝 수정하면 가능하다). 즉, Nvidia Titan 또는 K 시리즈처럼 하이엔드급이 아니다.
또한 GPU 메모리가 4GB(g2.2xlarge 기준) 밖에 되지 않아, VGGNet, GoogleNet을 적정 batch size로 학습 시킬 수 없다(ResNet은 말할 것도 없다). 결국, Deep Learning 연구용으로 사용하기에는 낮은 사양이라 위에서 말한 1~2주가 2~4주로 늘어날 수 있다.(실제 경험 상 ImageNet을 AlexNet으로 학습시 2주 소요. 로컬 데스크탑 Titan X로 학습시 2일 소요)
큰 모델을 연구, 개발할 때는 좋지 못한 옵션이다. (기존 모델에 fine-tuning만 하겠다면 가능하다)
case by case지만 클라우드 서비스로 장비 성능 문제가 한방에 해결되는 것은 아니라는 점을 알아야 한다.
종국엔 Deep Learning에서 데이터가 주요 경쟁력이 된다. 그런데 클라우드 서비스를 사용한다면, 데이터가 저장되어 있는 서비스에 종속되기 쉽고 늘어나는 데이터 크기에 비례하여 관리 비용도 증가한다. (AWS의 EBS 기준으로 한달에 1GB당 114원이다.)
이게 속수무책인게 인스턴스야 잠시 꺼두면 과금이 안되는데, EBS는 지우기 전까지 계속 과금된다. 정산은 월 단위지만 과금은 시간 단위다... 인스턴스 시간 절약했다고 좋아했다가 미처 생각하지 못 한 EBS 때문에 고지서를 받아 들고 눈물을 흘린적이 놀란적이 있다.
클라우드에 있는 데이터가 정말 내 소유인가?에 대한 현실적 이해가 필요하다. 몇백 GB야 언제든 로컬로 옮길 수 있다고 착각하지만, 그렇게 시작된 GB가 수TB가 되고 또 수백 TB가 되고... 감당이 안된다. 눈덩이처럼 불어나고 있는 큰 데이터를 다시 로컬로 옮기는데는 많은 비용과 시간이 소요된다. 그래서, 작정하고 Large-Scale 규모를 지향한다면 클라우드 사용에 대해 종속 및 비용 문제를 냉철하게 고민해야 한다.
Deep Learning 연구 또는 개발에 있어 가볍게 알고리즘을 살펴보거나 테스트, 교육용으로 클라우드 플랫폼/서비스를 활용하는 것은 효율적이나, 본격적인 연구를 진행한다면 한번쯤은 위에서 설명한 고려사항을 따져 봤으면 한다.