# 개념

요즘은 콘퍼런스나 세미나에 다녀보면 머신러닝에 대해 언급하지 않는 곳이 없다. 하물며 비IT 쪽으로 가도 4차 산업혁명이라며 여전히 언급되는데, 그러다보니 다양한 분야의 사람들이 이 분야로 뛰어들고 있는 것이 현실이다. 하지만 그간 *vim* 만 돌아가면 되는 낮은 사양의 PC로도 문제 없었던 Low 레벨 개발자들에게 이 분야는 잔인하기 그지없다. 머신러닝 분야에서 뭔가 해보려면 *GPU* 는 아니더라도 최소한 적당히 좋은 *CPU* 가 필요하기 때문인데, 내 경우가 그랬다. 구식 *i3 cpu* 로 할 수 있는 것이라고는 *TensorFlow* 에 첫 번째 예제로 등장하는 *MNIST* 가 전부였으니까. 다른 오픈소스를 돌려보기 위해 회사에서 몰컴(?)을 해보기도.

여튼 이런 환경에 단비 같은 소식이 있다. 바로 *Google Cloud Platform ( GCP )* 에서 제공되는 *CloudML* 서비스가 그것이다. 더 이상 회사에서 눈치보며 자원을 사용하거나, 어느 퍼블릭 클라우드의 스팟 인스턴스를 이용하여 저렴하게 러닝하는 등의 꼼수는 하지 않아도 된다. (내가 꼭 그렇다는 것은 아니다..)

![](https://t1.daumcdn.net/cfile/tistory/2430B8475950400B08)

많은 블로그에서 *CloudML* 의 개념과 사용법을 다루고 있지만 이론적으로 생략되는 부분이 많기 때문에 글만 읽고는 이해하기 힘든 구석이 있다. 당연히 백문이 불여일타겠지만 앞으로 그런 것들을 해소하는 글을 써보고자 한다. 특히 *Google* 서비스는 한글 문서가 많이 부족하기 때문에 누구나 부담없이 이해하고 쉽게 사용할 수 있는 교과서 같은 메뉴얼이 필요한 시점이다.

본격적으로 서비스 소개를 시작해보자. *CloudML* 은 *GCP* 에서 제공하는 클라우드 머신러닝 서비스이다. *TensorFlow* 를 지원하며 최신 *CPU, GPU* 등의 환경을 선택적으로 사용할 수 있다. ( 알파고에 사용되었다는 *TPU* 에 대한 언급도 요즘 빠지지 않는다 ) 이 서비스를 가장 쉽게 이해를 하자면, 자신이 로컬에서 만든 머신러닝 모델을 클라우드에 던져서 학습시키는 것이다. 그게 끝이다. 로컬 PC는 모델을 클라우드에 던져놓고 자유로워지며 높은 사양도 필요하지 않다 ( 사실 *Google Cloud SDK* 를 쾌적하게 운영할 정도의 스펙은 되면 좋다. )

![](https://t1.daumcdn.net/cfile/tistory/22256735595043A603)

학습에 대한 결과는 로컬에서 받아볼 수도 있고 *GCP* 콘솔에서 확인할 수도 있다. 또한 여러가지 `job` 을 병렬로 수행 하는 것에 대한 부담도 적다. 학습에 필요한 데이터가 있다면 *Google Storage* 에 모두 올려두고 *CloudML* 에 데이터의 경로만 지정해주면 된다. 사용자의 역할은 그저 `job` 별로 오류가 나지 않는지 나중에 모니터링 하는 것이 전부다. (최초 셋업은 어느정도 사용자의 리소스를 필요로 한다. 어렵지 않으며 바로 다음 글에서 바로 언급할 예정이다. 이 부분에 대한 자동화 이야기도 차차 하는 것으로. )

![](https://t1.daumcdn.net/cfile/tistory/247E023E5950464A24)

위에서 모델이 오류가 나지 않는지 모니터링이 필요하다고 했는데, *CloudML* 서비스는 *magic* 이 아니다. 그렇기 때문에 몇 가지 오류가 발생하는 상황이 있는데 우선 첫 번째로는 개똥같은 input 이 들어오면 당연히 정상적인 결과가 나올 수 없다. *CloudML* 에 모델을 던지기 전에 로컬에서 우선 가볍게 학습을 돌려보고 코드의 결함을 찾는 행위는 매우 중요하다. (이게 다 돈을 아끼는 행위다) 두 번째로는 *CloudML* 은 로그 출력을 위해 *GCP* 의 *stackdriver* 를 사용한다. 그렇게 때문에 *stackdriver* 에 쓰기 권한이 있어야 한다. 이 부분은 *stackdriver* 를 사용 함으로 변경하고 프로젝트에 대한 권한을 맞춰주면 해결 된다. 끝으로 세 번째는 *TensorFlow* 의 버전 문제이다. 로컬에서 정상적으로 학습 된 것이 클라우드에서 되지 않는다면 대부분 이 경우에 해당 될 것이다. 모델 상단에 *tf.**version*** 을 입력해두면 좋다. 로컬과 *CloudML* 의 TF 버전을 맞춰주면 더욱 좋고. 이 글을 작성하는 시점에, *CloudML* 도큐먼트에서 제공되는 예제가 정상적으로 학습되지 않는다. 이유는 예제에 있는 *TF* 함수가 *CloudML* 에서는 제공되지 않기 때문이다. 현재 *CloudML* 은 *TF 1.0.1* 을 사용중이다. ( default 로 제공되는 버전이고, 명시적으로 `--runtime-version 1.2` 처럼 버전을 지정할 수 있다. 버전을 지정하면 예제는 정상동작 한다. )

사실 이렇게 윤택한 서비스의 유일한 문제는 돈 이다. 사업적으로 진행하는 것이 아니라면 돈이 가장 큰 문제인데 이런 부분에서 구글은 대인배스러운 면모를 보여주고 있다. 그것은 바로 계정을 새로 만들면 제약 없이 무료 크레딧 300 달러를 받을 수 있다는 것. 1인당 한 번의 무료 크레딧으로 끝나는게 아니라 계정별로 관리한다. 공부를 위해 클라우드 환경을 사용하고 싶다면 재량껏 계정을 생성해서 윤택한 클라우드 환경을 맘껏 사용해보자. 가격정책에 대해서는 아래 링크를 보면 좋다.

<https://cloud.google.com/ml-engine/pricing?hl=ko>

링크에서 알 수 있듯이 사용 가격은 *US zone* 을 이용하는 것이 *Europe/Asia* 일 이용하는 것보다 상대적으로 저렴하므로 상황에 맞게 운영하면 되겠다. 다음편에서는 실제로 *CloudML* 을 통해 모델을 학습시키고 결과를 확인하는 과정에 대해 다뤄보도록 한다.
