© 2017 by Doran Bae 

Subscribe!
You are reading Coding Otter, stuffed with articles about big data, data science development, ML in production, managing data science projects, and many more. ​
About the host
I'm Doran Bae, Data Scientist @TVB turning data into products and stories. More about me.

GPU-backed Google Compute Engine Instance - Part 1 of 3

Updated: Nov 27, 2018

내가 처음 data science를 배우고 있을때, 세상에서 가장 어려운 것이 environment setting 이었다. 숙제를 하거나 프로젝트를 하기 위해선 required environment을 세팅해야 했는데 (줄줄이 copy & paste 하도록 cheat sheet가 제공되었음에도 불구하고), 새벽 4시까지 울면서 shell을 쳐다보며 한숨을 푹푹 쉬었던 기억이 난다 😰. Data science에서 가장 어려운 것이 data cleansing이라면, programming에서 가장 어려운것은 당연히 installation일 것이다. Computer Science BS가 없거나, 처음 하는 사람들에게setting 만큼 부담되는 것도 없다 (GUI가 왜 위대하고 소중한 것인지 새삼 Microsoft의 존재에 대하여 감사하게 생각하게 된다).

Google Compute Engine

여기에선 Google Compute Engine instance를 세팅하는 시간을 갖어보기로 한다. Neural network를 연습하거나, 작은 규모로 모델을 training시키는 케이스는, 물론 GCE 없이도 그냥 본인 컴퓨터 (또는 노트북)에서 해도 문제가 없을 것이다. Scale up을 하기 위해서 cloud를 사용하는데, 개인 컴퓨터에 (아직까진) 흔히 장착되어 있지 않는 GPU를 cloud에서는 손쉽게 쓸 수 있기 때문이다. GPU가 무엇인지 궁금하면 인문계를 위한 GPU와 CPU 차이를 참고하자.


Part 1 - Setting up your VM instance - You are here!

Part 2 - Logging into VM instance

Part 3 - Setting up environment


이미 GPU backed GCE를 세팅하는 많은 포스트가 있지만, 인문계 관점에서 설명을 한다는 것이 이 포스트의 특징이다. 때문에 포스트가 조금 길어졌고, navigate을 위하여 특별히 목차를 제공한다. 별 문제가 없는 한 30분 이내에 설치 완료가 가능할 것이다.

1. Create project

2. Create VM instance

3. Log into VM instance

4. Set up environment



1. Create project

엔지니어라면 terminal 이라는 친구들을 몇몇 보았지만 난 피곤하게 인생 살고 싶지 않은 인문계다. 쉬운 방법이 있다면 어려운 길로 돌아가지 않는다. 좋은 GUI가 있다면 힘들게 terminal을 사용하고 싶지 않기에 여기에서는 web interface를 이용하여 세팅을 할 것이다. 만약 terminal에서 하고 싶다면, 하단 링크 리소스를 확인하면 instruction을 찾을 수 있다.


1-1. (Optional) Utilize your free tier option

Instance를 만들기 위해서는 우선 Project가 있어야 한다. 만약 GC를 처음 사용한다면, $300 공짜 tier가 있으니 놓치지 말자 💃. 상단에 메세지를 클릭하라. 단 free-tier에 적용되는 몇가지 제한조건이 있다. 연습용 크게 영향을 받지 않고 free tier 안에서 왠만한 작업은 다 할 수 있다. 그 조건은 시기에 따라 바뀔 가능성이 있으니 혹시 궁금한 사람은 여기를 확인한다. 그리고 무언가 하고 싶은데 pay wall에 막혀 있다면 구글이 알아서 alert를 줄테니, 크게 고민하지 않고 넘어가도 좋다.

단 free-tier에 적용되는 몇가지 제한조건이 있다. 연습용 크게 영향을 받지 않고 free tier 안에서 왠만한 작업은 다 할 수 있다. 그 조건은 시기에 따라 바뀔 가능성이 있으니 혹시 궁금한 사람은 여기를 확인한다. 그리고 무언가 하고 싶은데 pay wall에 막혀 있다면 구글이 알아서 alert를 줄테니, 크게 고민하지 않고 넘어가도 좋다.

🎁 Your free trial is waiting: activate now to get $300 credit to explore Google Cloud products.


Click 'activate' for GCP free tier trial

주소와 Payment 정보를 넣고 나면 GCP console page로 redirect 된다.

GCP console page

1-2. Create project

프로젝트는 업무폴더 같은 개념이다. 회사에서 프로젝트를 많이 하는 사람이라면, 프로젝트 별로 따로 폴더를 만들어, 각 프로젝트 별로 파일을 관리한 경험이 있을 것이다. GCP의 프로젝트도 비슷한 컨셉이다. ML 프로젝트를 진행하다 보면 (특히 data service 관련해서) 다양한 연관된 리소스가 있다: API, storage, compute engine, billing, etc. 연관된 리소스를 한 폴더 내에 저장하면 관리에 용이한 장점이 있다. 물론 폴더를 만드는 것은 별로 어려운 일이 아니므로 GCP에 프로젝트를 생성하는 공짜다.

상단에 My First Project (이미 사용한 이력이 있다면 그냥 My Project)를 클릭하여 NEW PROJECT를 생성한다.

Project quota가 얼마 안 남았다는 warning이 보인다면, 말 그대로 구글에서 처음 제공하는 project 생성 횟수가 얼마 안 남았다는 뜻이다. 이 quota는 increase 할 수 있으며 자세한 설명은 인문계를 위한 GCP quota request에서 확인 가능하다.

1-3. (Optional) Request GPU quota increase

GPU를 달은 VM을 만들기 위해서는 GPU quota를 신청해야 한다. 왜 하는지 알고 싶으면 인문계를 위한 GCP quota request를 확인한다. GPU를 사용하지 않을 것이라면 안 해도 된다.


Hamburger menu > IAM & admin > Quota

Quota 리스트에서 Compute Engine API NVIDIA K80 GPUs를 찾으면 된다. 왜인지는 모르겠으나 난 이 리스트에 GPU가 뜨는데에 꼬박 하루가 걸렸다. 인터넷 커뮤니티에서 이슈에 대해 찾아보니 자기도 그랬다는 사람이 있는것으로 보아... 그럴 수도 있나보다. 당장 GPU를 넣어야 겠다면 구글에 연락을 시도해 보아도 좋다.


Request has been submitted


2. Create VM instance

여기부터는 potentially 돈이 나갈 수도 있는 부분이다. 신규 사용자라서 free tier라면 걱정할 필요 없고, 혹시 유료 사용라도 단순히 VM을 만드는 작업이라면 거의 비용이 없을 것이니, 걱정하지 말고 튜토리알을 진행해도 좋다.

2-1. Navigate to VM instance create page

상단 프로젝트 switcher를 사용하여 해당 프로젝트 DASHBOARD로 들어간다. 햄버거 메뉴 클릭 후 Compute Engine > VM instances를 클릭한다.


Compute engine > VM instances

Create VM instance

2-2. Configure instance

내가 만들고자 하는 instance를 주문한다. 주문을 할 때는 내가 뭘 원하는지 알아야 하는데, 컴퓨터에 관한 대부분의 것이 그렇듯이, 남들이 하는 따라가도 반은 간다. 아래는 가장 대중적인 configuration이다. 각 옵션에 대해서 최대한 얕고 넓게 설명을 달 예정이니, 혹시 바꾸고 싶은 옵션이 있다면 바꾸어도 좋다.

2-2-1. 필수 항목 설정

  • Name: 무얼로 해도 상관 없다.

  • Region & Zone: 클라우드라고 해서 모든 것이 가상이 아니다. 사용자에겐 클라우드지만, 서비스 제공자는 실제로 지구 어딘가에 서버를 갖고 있어야 한다. 구글은 전세계에 널리 서버를 갖고 있기에 사용자에 따라 가까운 곳에 있는 서버를 사용하도록 권유하고 있다. 이를 위해서 region과 zone을 선택하는 것이다. 대부분의 region은 다 비슷하지만, 특정 서비스는 한정된 region에서 불가능 한 경우도 있다. 이 튜토리알의 목적상 GPU support가 된다면 아무 region이나 상관없다. 난 us-west1의 us-west1-b를 골랐다. Region & Zone에 대해서 더 알고 싶다면 인문계를 위한 GCP Region & Zone을 참고하자.

  • Machine type: Customize버튼을 누르면 GPU를 달 수 있도록 되어 있다. Number of GPU와 GPU type 메뉴를 통해 원하는 GPU를 단다. 나는 4 vCPUs, 15GB RAM, 1 NVIDIA Tesla K80을 달았다.

  • Boot disk: Change 버튼을 눌러 instance에 맞는 OS와 SSD Persistent Disk를 고른다. 내가 고른 세팅: OS - Ubuntu 16.04 LTS; Boot disk type: SSD Persistent Disk; Size: 20GB. 주의: 50GB 이상일 경우, Instance를 삭제할 때까지, $8/월 storage 비용을 내야 한다.

Configuration for your VM instance

Configure your boot disk

2-2-2. 옵션 항목 설정

꼭 지금 설정 하지 않아도 되는 항목이다.

2-2-2-1. Networking

'Management, security, disks, networking, sole tenancy'를 누른다. Networking 섹션에 jupyter를 Network tags로 넣는다.

Network tags

2-2-2-2. SSH key

SSH key를 instance에 붙이는 것이다. Terminal에서 VM에 접근하고 싶다면 꼭 해줘야 하는 작업이다. 본인의 home directory에 가서 ssh key를 확인하여 열어보면 아마 아래와 같은 포맷으로 이루어져 있을 것이다.

<protocol> <key-blob> <username@example.com>

What is my SSH public key?

SSH key를 잘못 attach 하면 나중에 나올 SSHing에서 고생을 한다. 내 ssh key리스트를 확인하려면, terminal에서 다음 command를 실행시킨다.

$ cd ~/.ssh/
$ cat ~/.ssh/id_rsa.pub  # 또는 사용할 키 폴더이름을 사용한다

전체 텍스트를 복사해서 아래 박스에 붙여넣기 한다.

Attach your SSH key to the instance

페이지 하단에 위치한 Create 버튼을 누르면 성공적으로 VM instance를 만든 것이다. 화면에 보이는 External IP를 잘 기억해 두자.

2-3. Adding a firewall rule

Jupyter notebook이 접속 가능할 수 있게 하기 위해서는 firewall rule이 port 8888에서 오는 incoming traffic을 allow해야 한다. 햄버거 메뉴를 누르면 나타나는 왼쪽 메뉴바에서 VPC network > Firewall rules를 차례로 클릭한다. CREATE FIREWALL RULE을 클릭한다. 아래와 같은 values를 넣고 Create 한다.

  • Name: default-allow-jupyter

  • Network: default

  • Direction of traffic: Ingress. We are only interested in allowing incoming traffic in

  • Action on match: Allow. We want to allow traffic that matches that specific rule

  • Targets: Specified target tags. We don’t want to apply this rule to all instances in the project, only to a select few

  • Target tags: jupyter. Only the instances with the jupyter tag will have this firewall rule applied

  • Source filter: IP ranges

  • Source IP ranges: 0.0.0.0/0. Traffic coming from any network will be allowed in. If you want to make this more restrictive you can put your own IP address

  • Protocols and ports: tcp:8888. Only allow TCP traffic on port 8888

VPC network > Firewall rules > Create firewall rule

2-4. Check from the dashboard page

Instance Dashboard 페이지에서 지금까지 작업한 결과물을 확인한다.

만들음과 동시에 Instance는 running 상태가 된다. Free tier가 아니라면 돈이 나갈 수도 있다는 의미이다. (물론 아주 작은 금액이지만...) VM에서 작업을 한 뒤에는 항상 파란 화살표를 눌러 stop 상태로 전환 시키는 것을 추천한다. 녹색 동그라미를 눌러 stop 상태로 전환해도 된다.

Part 1 - Setting up your VM instance - You are here!

Part 2 - Logging into VM instance

Part 3 - Setting up environment