목차

  1. 할당량 증가 요청
  2. GPU 인스턴스 생성
  3. CUDA 설치
  4. Tensorflow 설치
  5. Caffe 설치
  6. 실제 가격

저번 주말동안 Machine Learning Challenge Korea 2017에 참가하면서 처음으로 Google Cloud Platform을 이용해보았는데, 주어진 API Call만을 이용해 학습과 이런저런 전/후처리를 하는 것이 그닥 편리하진 않았다. 그래서 아예 VM 인스턴스를 만들어서 사용했는데, 이를 위해 삽질한 기록을 정리해 보았다.

1. 할당량 증가 요청

이 글을 쓰는 2017년 8월 기준 아직 Compute Engine에서의 GPU Instance는 베타 테스트 중이라 모든 유저의 할당량(quota)이 0으로 제한되어있다. 즉, 기본적으로는 GPU Instance를 생성할 수 없다. 이를 해결하려면 조금 귀찮은 일을 몇 가지 해야 한다:

1. 언어 변경(한국어 -> 영어)

2. 할당량 증가 요청

다시 GCP 콘솔의 첫 화면으로 와서 아래 그림처럼 IAM & admin -> Quotas를 선택해서 들어가면

이렇게 NVidia K80 GPU Quota 항목을 찾을 수 있다. Region별로 따로 있음에 주의하자. EDIT QUOTAS를 누르고 GPU 항목을 선택하면 이름, 메일 주소, 전화 번호를 적는 칸이 나온다. 적고 NEXT를 누르자.

다음에는 바꿀 할당량 값과 Justification을 적어야 하는데, 간단히 적어주면 된다.

3. 메일이 오기를 기다린다

기다리면 할당량 증가 요청이 허가됐다는 메일이 온다. 이걸 받았다면 이제 GPU가 달린 인스턴스를 만들 수 있다는 뜻이다(할당량이 1이란 뜻은 동시에 동작중인 GPU 인스턴스가 1개 이하여야 한다는 뜻이다).

2. GPU 인스턴스 생성

다시 콘솔 첫 화면에서 Compute Engine Console로 가서, Create Instance를 선택하고, 다음 그림처럼 asia-east1-a를 고르고 GPU를 추가하자. OS는 취향에 맞게 고르면 되는데, 이후 항목에서는 Ubuntu 16.04 LTS를 이용한다.

접속을 위해 꼭 SSH Public Key를 추가해두자.

기다리면 인스턴스가 생성되고, 발급받은 External IP를 통해 SSH로 접속할 수 있게 된다.

3. CUDA 설치

귀찮은 일을 줄이기 위해 CUDA도 Network Setup을 이용하자.

$ curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
$ sudo dpkg -i ./cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
$ sudo apt update
$ sudo apt install -y cuda
$ sudo reboot # reboot is required!

4. TF 설치

CUDA가 설치됐다면 간단하게 설치할 수 있다. 우선 cuDNN을 다운로드 하고(현재 TF는 cudnn 6을 이용한다), 이를 클라우드로 적당히 업로드 해서 설치하자. 런타임용 패키지를 먼저 설치한 다음 개발용 패키지를 설치하면 된다.

$ sudo apt install -y build-essential python-dev python-pip
$ sudo pip install tensorflow-gpu

5. Caffe 설치

*여기서는 caffe의 release 버전 기준이 아닌 master branch 버전의 설치를 다루기에 Released version과는 약간 다를 수 있으니 주의 바랍니다.

에서 cuDNN의 설치를 마쳤다면 여기선 일이 비교적 간단하다. 우선 빌드에 필요한 패키지를 설치한 다음 저장소를 클론하자.

$ sudo apt install -y build-essential cmake git pkg-config
$ sudo apt install -y libprotobuf-dev libleveldb-dev libsnappy-dev
$ sudo apt install -y libhdf5-serial-dev protobuf-compiler
$ sudo apt install -y libatlas-base-dev
$ sudo apt install -y --no-install-recommends libboost-all-dev
$ sudo apt install -y libgflags-dev libgoogle-glog-dev liblmdb-dev
$ sudo apt install -y python-dev python-pip
$ sudo apt install -y libopencv-dev
$ sudo pip install scipy numpy scikit-image
$ git clone https://github.com/BVLC/caffe

이제 Makefile.config를 수정하자.

$ cd caffe
$ cp Makefile.config.example Makefile.config

대충 이 부분들을 수정하면 된다.

...
USE_CUDNN := 1 #CUDNN을 사용하자: 주석 제거
...
PYTHON_INCLUDE := /usr/include/python2.7 \
                /usr/local/lib/python2.7/dist-packages/numpy/core/include
...
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial/
...

다 수정했으면 빌드, 설치와 테스트를 돌려보자.

$ make -j8
$ make -j8 pycaffe
$ make -j8 distribute
$ sudo cp distribute/lib/* /usr/lib/
$ make -j8 runtest

만약 여기서 cannot find library 'libcaffe-1.0.0-rc3.so' 같은 오류가 발생한다면, sudo ln -s /usr/lib/libcaffe.so /usr/lib/libcaffe-1.0.0-rc3.so처럼 심볼릭 링크를 만들어서 해결하면 된다.

마지막으로 Python 인터페이스도 테스트 해보자.

$ python
>>> import caffe
>>> exit()

여기서 오류가 나지 않는다면 성공! 하지만 여기서 주의: pycaffe는 기본적으로 CPU 모드로 동작한다. GPU를 이용하기 위해선 import caffe를 할 때 꼭 아래처럼 하는 습관을 들이자.

import caffe
caffe.set_gpu_mode()

6. 실제 가격

CPU, MEM: Intel N1-instance, GPU: 1x NVIDIA Tesla K80 을 이용하면 이 정도의 요금이 청구된다. 물론 최초 사용시 Free Trial의 $300가 우선적으로 차감되므로 꽤 오랜 시간을 무료로 이용할 수 있다.