개념
Last updated
Last updated
요즘은 콘퍼런스나 세미나에 다녀보면 머신러닝에 대해 언급하지 않는 곳이 없다. 하물며 비IT 쪽으로 가도 4차 산업혁명이라며 여전히 언급되는데, 그러다보니 다양한 분야의 사람들이 이 분야로 뛰어들고 있는 것이 현실이다. 하지만 그간 vim 만 돌아가면 되는 낮은 사양의 PC로도 문제 없었던 Low 레벨 개발자들에게 이 분야는 잔인하기 그지없다. 머신러닝 분야에서 뭔가 해보려면 GPU 는 아니더라도 최소한 적당히 좋은 CPU 가 필요하기 때문인데, 내 경우가 그랬다. 구식 i3 cpu 로 할 수 있는 것이라고는 TensorFlow 에 첫 번째 예제로 등장하는 MNIST 가 전부였으니까. 다른 오픈소스를 돌려보기 위해 회사에서 몰컴(?)을 해보기도.
여튼 이런 환경에 단비 같은 소식이 있다. 바로 Google Cloud Platform ( GCP ) 에서 제공되는 CloudML 서비스가 그것이다. 더 이상 회사에서 눈치보며 자원을 사용하거나, 어느 퍼블릭 클라우드의 스팟 인스턴스를 이용하여 저렴하게 러닝하는 등의 꼼수는 하지 않아도 된다. (내가 꼭 그렇다는 것은 아니다..)
많은 블로그에서 CloudML 의 개념과 사용법을 다루고 있지만 이론적으로 생략되는 부분이 많기 때문에 글만 읽고는 이해하기 힘든 구석이 있다. 당연히 백문이 불여일타겠지만 앞으로 그런 것들을 해소하는 글을 써보고자 한다. 특히 Google 서비스는 한글 문서가 많이 부족하기 때문에 누구나 부담없이 이해하고 쉽게 사용할 수 있는 교과서 같은 메뉴얼이 필요한 시점이다.
본격적으로 서비스 소개를 시작해보자. CloudML 은 GCP 에서 제공하는 클라우드 머신러닝 서비스이다. TensorFlow 를 지원하며 최신 CPU, GPU 등의 환경을 선택적으로 사용할 수 있다. ( 알파고에 사용되었다는 TPU 에 대한 언급도 요즘 빠지지 않는다 ) 이 서비스를 가장 쉽게 이해를 하자면, 자신이 로컬에서 만든 머신러닝 모델을 클라우드에 던져서 학습시키는 것이다. 그게 끝이다. 로컬 PC는 모델을 클라우드에 던져놓고 자유로워지며 높은 사양도 필요하지 않다 ( 사실 Google Cloud SDK 를 쾌적하게 운영할 정도의 스펙은 되면 좋다. )
학습에 대한 결과는 로컬에서 받아볼 수도 있고 GCP 콘솔에서 확인할 수도 있다. 또한 여러가지 job
을 병렬로 수행 하는 것에 대한 부담도 적다. 학습에 필요한 데이터가 있다면 Google Storage 에 모두 올려두고 CloudML 에 데이터의 경로만 지정해주면 된다. 사용자의 역할은 그저 job
별로 오류가 나지 않는지 나중에 모니터링 하는 것이 전부다. (최초 셋업은 어느정도 사용자의 리소스를 필요로 한다. 어렵지 않으며 바로 다음 글에서 바로 언급할 예정이다. 이 부분에 대한 자동화 이야기도 차차 하는 것으로. )
위에서 모델이 오류가 나지 않는지 모니터링이 필요하다고 했는데, 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 을 통해 모델을 학습시키고 결과를 확인하는 과정에 대해 다뤄보도록 한다.