다운로드
작성자: donotgetgreed@gmail.com 작성일시: 2018-11-28 16:04:51 조회수: 378 다운로드: 27
카테고리: 기타 태그목록:

구글 Colaboratory 사용법

구글 Colaboratory(이하 Colab)은 구글 드라이브에 연결하여 사용할 수 있는 주피터 노트북 호환 서비스이다. 2017년 10월에 공개된 Colab은 별다른 설치 없이 웹 브라우저 만을 이용해 주피터 노트북과 같은 작업을 할 수 있고 다른 사용자들과 공유가 쉬워 연구 및 교육용으로 많이 사용되고 있다. Colab의 특징은 다음과 같다.

  1. 무료로 GPU를 사용할 수 있다.
  2. Tensorflow, keras, matplotlib, scikit-learn, pandas 등 데이터 분석에 많이 사용되는 패키지들이 미리 설치되어 있다.
  3. 코드 셀 내에서 필요한 패키지를 설치하고 환경설정을 할 수 있다. 이 점은 서로다른 환경을 가진 다수의 사람이 협업을 할 때 환경을 동일하게 구성해야 하는 수고를 덜어 준다.
  4. 구글 독스나 구글 스프레드시트 등과 같은식으로 공유와 편집이 가능하다. 만약 두 명 이상의 사람이 동시에 같은 파일을 수정 하더라도 변경사항이 모든 사람에게 즉시 표시된다.

Colab 사용법

Colab을 사용하려면 구글 드라이브(https://drive.google.com/)에 접속하여 메뉴에서 "새로 만들기" > "더보기" > "Colaboratory"를 클릭한다. 다음과 같이 파이썬 버전을 확인할 수 있다.

In [1]:
!python --version
Python 3.6.7

운영체제나 하드웨어 사양은 다음처럼 확인할 수 있다.

In [2]:
# OS
!cat /etc/issue.net
Ubuntu 18.04.1 LTS
In [3]:
# CPU 사양
!head /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 63
model name	: Intel(R) Xeon(R) CPU @ 2.30GHz
stepping	: 0
microcode	: 0x1
cpu MHz		: 2299.998
cache size	: 46080 KB
physical id	: 0
In [4]:
# 메모리 사양
!head -n 3 /proc/meminfo
MemTotal:       13335212 kB
MemFree:        11217716 kB
MemAvailable:   12646976 kB
In [5]:
# 디스크 사양
!df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay         359G  8.8G  332G   3% /
tmpfs           6.4G     0  6.4G   0% /dev
tmpfs           6.4G     0  6.4G   0% /sys/fs/cgroup
tmpfs           6.4G  8.0K  6.4G   1% /var/colab
/dev/sda1       365G   12G  354G   4% /opt/bin
shm             6.0G     0  6.0G   0% /dev/shm
tmpfs           6.4G     0  6.4G   0% /sys/firmware

Colab에서 GPU 사용하기

Colab에서 GPU를 사용하기 위해서는 런타임 유형을 변경해야 한다. Colab 화면 상단의 툴바에서 "런타임" > "런타임 유형 변경" > "하드웨어 가속기" 설정을 None 에서 GPU로 변경한다. (TPU로도 변경이 가능하다.)

Colab에서 제공하는 GPU는 Tesla K80로 !nvidia-smi 명령어로 확인 할 수 있다. 이 명령어는 GPU의 실행을 모니터링 할 때 사용한다.

그림 3.1.14 : GPU 사용 설정
In [6]:
!nvidia-smi
Fri Dec  7 12:31:51 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 396.44                 Driver Version: 396.44                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K80           Off  | 00000000:00:04.0 Off |                    0 |
| N/A   68C    P8    34W / 149W |      0MiB / 11441MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

Colab 환경 설정

Colab 환경에는 데이터 분석에 자주 사용되는 패키지들이 이미 설치되어 있다. 다음 코드로 이 책에서 많이 사용되는 패키지들을 임포트한다.

In [7]:
import matplotlib.pyplot as plt
import seaborn as sns
import statsmodels as sm
import sklearn as sk 
import tensorflow as tf
import pandas as pd
import numpy as np
import keras
import scipy
import sympy
import datetime
import xgboost as xgb
Using TensorFlow backend.

만약 새로운 패키지가 필요하면 !와 Shell 명령어를 실행하여 설치할 수 있다. 예를 들어 OpenCV 패키지 다음처럼 설치한다.

In [8]:
!pip install opencv-contrib-python
Collecting opencv-contrib-python
  Downloading https://files.pythonhosted.org/packages/b7/b9/26ddaf22a96b61f90c80305446db65a44a95273b9bcfa0880f0ed1119ca3/opencv_contrib_python-3.4.4.19-cp36-cp36m-manylinux1_x86_64.whl (31.0MB)
    100% |████████████████████████████████| 31.0MB 1.4MB/s 
Requirement already satisfied: numpy>=1.11.3 in /usr/local/lib/python3.6/dist-packages (from opencv-contrib-python) (1.14.6)
Installing collected packages: opencv-contrib-python
Successfully installed opencv-contrib-python-3.4.4.19

Colab의 코드는 계정 전용 가상머신에서 실행되는데, 이 가상 머신은 한동안 유휴 상태가 되면 다시 리셋되므로 그때마다 다시 다운로드 받아야 한다. 따라서 Colab을 이용해 협업을 할 때는 이렇게 필요한 패키지 설치와 환경 설정하는 코드를 유의하여 작성해두어야 한다. 또한 GPU를 사용하여 딥러닝 모델을 학습 할 때는 학습시간이 꽤 길어질 수 있는데 오랫동안 연산이 실행되다 보면 학습 도중에 가상머신이 리셋될 수도 있다. 따라서 긴 학습을 할 때는 로컬이나 GPU가 있는 환경과 연결하여 사용해야 한다. 만약 GPU가 있다면 이 링크(https://research.google.com/colaboratory/local-runtimes.html)를 참고하여 로컬 런타임 설정을 한다.

시스템 파일을 실수로 덮어썼거나 호환되지 않는 소프트웨어를 설치한 경우에는 상단 툴바의 "런타임" > "모든 런타임 재설정"을 클릭하여 사용자가 직접 가상머신을 리셋 할 수도 있다. Colab 서비스는 과도한 리소스 소모를 방지하기 위해 이 작업을 실행할 수 있는 횟수를 제한한다. 재설정에 실패한 경우에는 나중에 다시 시도하면 된다.

구글 드라이브 연동

Colab을 사용할 때 구글 드라이브와 연동하면 데이터나 모델을 불러오거나 저장할 수 있고 필요시 로그를 구글 드라이브에 저장할 수 있다.

구글 드라이브와 연동하려면 다음 코드를 실행한다. 출력되는 URL에 접속하여 verification code를 발급 받고 이를 입력한다.

In [9]:
!apt install -y -qq --fix-broken python-pycurl python-apt 2> /dev/null
!apt install -y -qq software-properties-common module-init-tools 2> /dev/null
!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
!apt update -qq 2>&1 > /dev/null
!apt install -y -qq google-drive-ocamlfuse fuse 2> /dev/null

from google.colab import auth
from oauth2client.client import GoogleCredentials

auth.authenticate_user()
creds = GoogleCredentials.get_application_default()

!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL

from getpass import getpass

vcode = getpass()

!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}
Suggested packages:
  python-apt-dbg python-apt-doc libcurl4-gnutls-dev python-pycurl-dbg
  python-pycurl-doc
The following NEW packages will be installed:
  python-apt python-pycurl
0 upgraded, 2 newly installed, 0 to remove and 8 not upgraded.
Need to get 193 kB of archives.
After this operation, 860 kB of additional disk space will be used.
Selecting previously unselected package python-apt.
(Reading database ... 26397 files and directories currently installed.)
Preparing to unpack .../python-apt_1.6.3_amd64.deb ...
Unpacking python-apt (1.6.3) ...
Selecting previously unselected package python-pycurl.
Preparing to unpack .../python-pycurl_7.43.0.1-0.2_amd64.deb ...
Unpacking python-pycurl (7.43.0.1-0.2) ...
Setting up python-pycurl (7.43.0.1-0.2) ...
Setting up python-apt (1.6.3) ...
software-properties-common is already the newest version (0.96.24.32.5).
The following additional packages will be installed:
  kmod libkmod2
The following NEW packages will be installed:
  kmod libkmod2 module-init-tools
0 upgraded, 3 newly installed, 0 to remove and 8 not upgraded.
Need to get 131 kB of archives.
After this operation, 381 kB of additional disk space will be used.
Selecting previously unselected package libkmod2:amd64.
(Reading database ... 26434 files and directories currently installed.)
Preparing to unpack .../libkmod2_24-1ubuntu3.1_amd64.deb ...
Unpacking libkmod2:amd64 (24-1ubuntu3.1) ...
Selecting previously unselected package kmod.
Preparing to unpack .../kmod_24-1ubuntu3.1_amd64.deb ...
Unpacking kmod (24-1ubuntu3.1) ...
Selecting previously unselected package module-init-tools.
Preparing to unpack .../module-init-tools_24-1ubuntu3.1_all.deb ...
Unpacking module-init-tools (24-1ubuntu3.1) ...
Setting up libkmod2:amd64 (24-1ubuntu3.1) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Setting up kmod (24-1ubuntu3.1) ...
Setting up module-init-tools (24-1ubuntu3.1) ...

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

The following additional packages will be installed:
  libfuse2
The following NEW packages will be installed:
  fuse google-drive-ocamlfuse libfuse2
0 upgraded, 3 newly installed, 0 to remove and 11 not upgraded.
Need to get 1,347 kB of archives.
After this operation, 6,887 kB of additional disk space will be used.
Selecting previously unselected package libfuse2:amd64.
(Reading database ... 26481 files and directories currently installed.)
Preparing to unpack .../libfuse2_2.9.7-1ubuntu1_amd64.deb ...
Unpacking libfuse2:amd64 (2.9.7-1ubuntu1) ...
Selecting previously unselected package fuse.
Preparing to unpack .../fuse_2.9.7-1ubuntu1_amd64.deb ...
Unpacking fuse (2.9.7-1ubuntu1) ...
Selecting previously unselected package google-drive-ocamlfuse.
Preparing to unpack .../google-drive-ocamlfuse_0.7.1-0ubuntu2~ubuntu18.04.1_amd64.deb ...
Unpacking google-drive-ocamlfuse (0.7.1-0ubuntu2~ubuntu18.04.1) ...
Setting up libfuse2:amd64 (2.9.7-1ubuntu1) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Setting up fuse (2.9.7-1ubuntu1) ...
Setting up google-drive-ocamlfuse (0.7.1-0ubuntu2~ubuntu18.04.1) ...
Please, open the following URL in a web browser: https://accounts.google.com/o/oauth2/auth?client_id=32555940559.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&response_type=code&access_type=offline&approval_prompt=force
··········
Please, open the following URL in a web browser: https://accounts.google.com/o/oauth2/auth?client_id=32555940559.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&response_type=code&access_type=offline&approval_prompt=force
Please enter the verification code: Access token retrieved correctly.

그 다음 자신의 구글 드라이브와 Colab의 디렉토리를 연결하여 사용한다. 다음 코드는 Colab 가상머신 내에 google_drive라는 폴더를 만들고, 이를 구글드라이브와 연결한다.

In [0]:
!mkdir -p google_drive
!google-drive-ocamlfuse -o nonempty google_drive

다음 코드는 사용자의 구글 드라이브에 test_colab이라는 디렉토리를 생성하고 그 아래에 데이터프레임을 csv 형식으로 저장한다.

In [11]:
!mkdir -p google_drive/test_colab
df = pd.DataFrame(np.random.rand(10, 5))
df.to_csv("google_drive/test_colab/df.csv")
!ls -Fcal google_drive/test_colab
total 9
drwxr-xr-x 2 root root 4096 Dec  7 12:22 ./
drwxr-xr-x 2 root root 4096 Dec  7 12:33 ../
-rw-r--r-- 1 root root  987 Dec  7 12:33 df.csv

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!