Google Colab 사용하기


Google Colab


  • 풀 네임은 Google Colaboratory
  • Google Drive + Jupyter Notebook
    • Google Drive처럼 협업 가능(동시에 수정 가능)
  • https://colab.research.google.com/로 접속시 사용 가능
  • 컴퓨터 사양(19년 12월 기준)
    • Ubuntu 17.10
    • CPU 제논 2.3GHz
    • 메모리 13G
    • GPU : K80 또는 T4 :
    • TPU도 사용 가능
  • GPU 사용시 최대 12시간
  • Github의 소스 코드를 Colab에서 사용 가능

UI

  • 붉은 부분
    • 해당 노트북의 목차
    • 코드 스니펫
      • 재사용 가능한 소스 코드로 다양한 예제 코드가 있음
      • Uploading files from your local file system, Using BigQuery, Listing files in Google Drive, Install library, etc
    • 연결된 파일
  • 노란 부분
    • 헤더 보이기 유무
  • 파란 부분
    • 코드 부분

상단 설정

  • 새 Python2, 3 노트 : Notebook 파일 생성(GPU 없는 설정)
  • 노트 업로드 : 로컬에 있는 노트북 업로드
  • Github Gist에 사본 저장 : Gist에 Secret으로 저장(처음에 연동 설정 필요)
  • Github에 사본 저장 : Github Repo의 특정 브랜치에 저장

  • 런타임 유형 변경 클릭시 GPU 사용 가능

Colab 사용하기


  • OS 확인

      !cat /etc/issue.net
    

하드웨어 사양

  • CPU

      !cat /proc/cpuinfo
    
  • Memory

      !cat /proc/meminfo
    
  • Disk

      !df -h
    
  • GPU

      !nvidia-smi
    

구글 드라이브와 Colab 연동

from google.colab import auth
auth.authenticate_user()

from google.colab import drive
drive.mount('/content/gdrive')
  • colab에서 구글 드라이브 권한 획득
    • 위 명령어 복사 붙여넣기
    • 그 후 나오는 URL로 접속한 후, verification code 입력
    • 단, 매번 이 작업을 해줘야 함….(일정 시간 이후엔 끊김)
  • colab에서 drive란 폴더를 만든 후, 우리 구글 드라이브의 root와 drive 폴더를 연결(mount)
!cd gdrive/data; ls-al;
  • 구글드라이브의 root에 data란 폴더가 있었음
  • train_activitiy.csv 데이터를 읽어오기
import pandas as pd
df = pd.read_csv("./gdrive/data/train_activity.csv")
  • 만약 apt-key output should not be parsed (stdout is not a terminal)란 Warning이 나오면 이미 인증이 완료되었다는 뜻이므로 바로 mount하면 됨

구글 드라이브와 로컬 연동

  • 파일을 하나씩 업로드하지 말고 대량의 파일을 한꺼번에 업로드하고 싶은 경우
  • BackupAndSync를 사용해 로컬과 구글 드라이브를 연동
    • Dropbox처럼 내 로컬의 특정 폴더를 연동
    • 맥북 환경에서 진행
  • 위 링크를 클릭해 백업 및 동기화 다운로드
  • InstallBackupAndSync.dmg라는 파일을 클릭한 후, (열리지 않으면 우클릭 후 열기) 프로그램 설치
  • 맥북 환경이 한글이신 분은 Google에서 백업 및 동기화라는 응용 프로그램이 추가됨(이것도 실행이 안되면 우클릭 후 실행)
  • 환경 설정에서 동기화할 폴더 선택
  • “폴더 위치”라고 써있는 곳이 이제 Google Drive와 동일하게 연동
  • 이제 “폴더 위치”에 원하는 데이터를 저장해두면 Colab에서 사용 가능
    • 단, 크기가 큰 파일은 동기화 시간이 오래 걸릴 수 있음

Tensorflow 설치하기

  • 2019년 12월 기준 Colab에 설치된 Tensorflow는 1.15.0입니다
    • Tensorflow 2.0을 설치하고 싶으면 아래처럼 입력하시면 됩니다
      !pip install tensorflow==2.0.0-rc1
    
    • 그 후, 런타임 - 런타임 다시 시작을 누르셔서 런타임을 다시 실행시키면 Tensorflow 2.0.0-beta1 설치된 것을 알 수 있습니다
      import tensorflow as tf
      print(tf.__version__)
    

PyTorch 사용하기

  • 2019년 1월 26일부터 Colab에 기본적으로 PyTorch, torchvision, torchtext가 내장되었습니다
  • 출처 : PyTorch 트위터
import torch
import torchvision
import torchtext
print(torch.__version__)

KoNLPy 설치

  • 공식 문서엔 openjdk-7-jdk로 작성되어 있으나, 우분투 17.04에선 ppa를 추가해야 설치 가능
  • ppa를 추가하지 않고 8 버전을 설치
!apt-get update
!apt-get install g++ openjdk-8-jdk 
!pip3 install konlpy
  • 예제 코드

      from konlpy.tag import Twitter
    
      twitter = Twitter()
      twitter.pos("질문이나 건의사항은 깃헙 이슈 트래커에 남겨주세요")
    

Github 코드를 Colab에서 사용하기

BigQuery 사용하기

  • google.colabauth를 통해 클라우드 권한을 얻은 후, 다양한 라이브러리 사용
  • google.cloud.bigquery 사용시

      from google.cloud import bigquery
      from google.colab import auth
    	
      project_id = '[your project ID]'
    	
      auth.authenticate_user()
    	
      client = bigquery.Client(project=project_id)
      for dataset in client.list_datasets():
        print(dataset.dataset_id)
    
  • pandas_gbq 사용시 (개인적으로 이 방법 추천)

      import pandas as pd
      from google.colab import auth
      auth.authenticate_user()
    	
      query = "SELECT * FROM <YOUR TABLE> LIMIT 10"
      df = pd.read_gbq(query=query, project_id=<your project id>, dialect=‘standard’))
    

Matplotlib에서 한글 사용하기

  • 폰트 설치

      !apt-get install fonts-nanum*
      !apt-get install fontconfig
      !fc-cache -fv
      !cp /usr/share/fonts/truetype/nanum/Nanum* /usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data/fonts/ttf/
      !rm -rf /content/.cache/matplotlib/*
    
  • 그래프 그리기

      import matplotlib.pyplot as plt
      import matplotlib as mpl
      import matplotlib.font_manager as fm
      import numpy as np
    	
      %matplotlib inline
      %config InlineBackend.figure_format = 'retina'
    	
      mpl.rcParams['axes.unicode_minus'] = False
      # 그래프에서 마이너스 폰트 깨질 경우 대비
    	
      path = '/usr/share/fonts/truetype/nanum/NanumGothicBold.ttf'
      font_name = fm.FontProperties(fname=path, size=18).get_name()
      plt.rc('font', family=font_name)
      fm._rebuild() # 이걸 해줘야 plt.rc가 작동
    
      plt.plot(np.random.randn(4, 8), np.random.randn(4,8), 'bo--')
      plt.title('타이틀')
      plt.xlabel('X 라벨')
      plt.ylabel('Y 라벨')
      plt.show()
    	
    

Tensorboard 사용하기

  • Tensorboard 사용 준비
    • LOG_DIR를 ‘drive/tb_logs’로 설정하면 내 구글드라이브 root에 tb_logs 폴더가 생성
    • 저는 ‘drive/data/tb_logs’로 지정
      LOG_DIR = 'drive/data/tb_logs'
    	
      !wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
      !unzip ngrok-stable-linux-amd64.zip
    	
      import os
      if not os.path.exists(LOG_DIR):
        os.makedirs(LOG_DIR)
    	  
      get_ipython().system_raw(
          'tensorboard --logdir {} --host 0.0.0.0 --port 6006 &'
          .format(LOG_DIR))
    	
      get_ipython().system_raw('./ngrok http 6006 &')
    	
      !curl -s http://localhost:4040/api/tunnels | python3 -c \
          "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
    
  • 아래 예제 코드 실행 후, Epoch 지나고 위 코드에서 나온 URL 클릭하면 TensorBoard로 이동

      from __future__ import print_function
      import keras
      from keras.datasets import mnist
      from keras.models import Sequential
      from keras.layers import Dense, Dropout, Flatten
      from keras.layers import Conv2D, MaxPooling2D
      from keras import backend as K
      from keras.callbacks import TensorBoard
    
      batch_size = 128
      num_classes = 10
      epochs = 12
    	
      ### input image dimensions
      img_rows, img_cols = 28, 28
    	
      ### the data, shuffled and split between train and test sets
      (x_train, y_train), (x_test, y_test) = mnist.load_data()
    	
      if K.image_data_format() == 'channels_first':
          x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
          x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
          input_shape = (1, img_rows, img_cols)
      else:
          x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
          x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
          input_shape = (img_rows, img_cols, 1)
    	
      x_train = x_train.astype('float32')
      x_test = x_test.astype('float32')
      x_train /= 255
      x_test /= 255
      print('x_train shape:', x_train.shape)
      print(x_train.shape[0], 'train samples')
      print(x_test.shape[0], 'test samples')
    	
      ### convert class vectors to binary class matrices
      y_train = keras.utils.to_categorical(y_train, num_classes)
      y_test = keras.utils.to_categorical(y_test, num_classes)
    	
      model = Sequential()
      model.add(Conv2D(32, kernel_size=(3, 3),
                       activation='relu',
                       input_shape=input_shape))
      model.add(Conv2D(64, (3, 3), activation='relu'))
      model.add(MaxPooling2D(pool_size=(2, 2)))
      model.add(Dropout(0.25))
      model.add(Flatten())
      model.add(Dense(128, activation='relu'))
      model.add(Dropout(0.5))
      model.add(Dense(num_classes, activation='softmax'))
    	
      model.compile(loss=keras.losses.categorical_crossentropy,
                    optimizer=keras.optimizers.Adadelta(),
                    metrics=['accuracy'])
    	
    	
      tbCallBack = TensorBoard(log_dir=LOG_DIR, 
                               histogram_freq=1,
                               write_graph=True,
                               write_grads=True,
                               batch_size=batch_size,
                               write_images=True)
    	
      model.fit(x_train, y_train,
                batch_size=batch_size,
                epochs=epochs,
                verbose=1,
                validation_data=(x_test, y_test),
                callbacks=[tbCallBack])
      score = model.evaluate(x_test, y_test, verbose=0)
      print('Test loss:', score[0])
      print('Test accuracy:', score[1])
    

JDK 설치하기

  • Python을 사용해 JDK 설치하기
  • 아래 코드 입력

      import os      
      def install_java():
        !apt-get install -y openjdk-8-jdk-headless -qq > /dev/null      #install openjdk
        os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-8-openjdk-amd64"     #set environment variable
        !java -version       #check java version
      install_java()
    

Google Storage에서 파일 읽기

  • gcsfs를 활용한 방법
    • storage에서 땡겨오기 때문에 colab에 파일을 옮기지 않아도 됨. 그러나 약간 시간 소요됨. 빠른 방법은 아래 gsutil 참고
      !pip3 install gcsfs dask 
    	
      import gcsfs
    	
      from google.colab import auth
      auth.authenticate_user()
    	
      fs = gcsfs.GCSFileSystem(project='project_name')
      with fs.open('주소') as f:
          df = pd.read_csv(f)
    
  • 위 방법보다 빠른 방법(gsutil 사용)
    • 단, 세션이 초기화되면 매번 gsutil로 파일을 땡겨와야 합니다
      from google.colab import auth
      auth.authenticate_user()
    	
      import pandas as pd
    	
      file_path = 'data.csv'
      !gsutil cp gs://<your_bucket>/{file_path} {file_path}
      df = pd.read_csv(query_result_path)
    

Kaggle 연동하기

  • 1) Kaggle beta API Json Key 다운
    • Kaggle - My Account - Dataset 옆에 있는 …을 클릭한 후, Account로 이동
    • 하단에 API 부분에 Create New API Token을 클릭하면 Json Key가 다운로드 됨
    • 이 Json 키를 매번 Colab에서 올려서 할 수도 있지만, 더 편하게 사용하고 싶어서 Google Storage에 Json 파일을 올리고, 거기서 키를 복사해오는 방법으로 진행합니다
  • 2) Google Storage에 Json Key 저장
    • Google Storage로 이동한 후, Storage 버킷 선택 (버킷이 없다면 생성!)
    • Colab에서 아래 명령어 입력
      from google.colab import auth
      auth.authenticate_user()
    	
      !mkdir -p ~/.kaggle
      !mv ./kaggle.json ~/.kaggle/
      !chmod 600 ~/.kaggle/kaggle.json	
    
  • 3) Kaggle 설치 및 데이터 다운로드

      !pip install kaggle
    
    • Competition 확인하기
      !kaggle competitions list
    
    • 데이터 다운로드는 각 대회 Data 부분에 나와있는 API 명령어를 입력하면 됨
      !kaggle competitions download -c elo-merchant-category-recommendation
    
    • 아래 명령어로 압축을 풀면 data 폴더에 파일들이 저장됨
      !unzip '*.zip' -d ./data
    
    • 복사하기 편하게 한번에 작성
      from google.colab import auth
      auth.authenticate_user()
    	
      !pip install kaggle
      !mkdir -p ~/.kaggle
      !mv ./kaggle.json ~/.kaggle/
      !chmod 600 ~/.kaggle/kaggle.json	
    	
      !kaggle competitions download -c elo-merchant-category-recommendation
      !unzip '*.zip' -d ./data
    

코기 모드

  • Colab을 조금 더 귀엽게 만드는 방법
  • 도구 - 환경설정 - 기타에 코기 모드 / 아기고양이 모드 체크
  • 조금 기다리면 귀여운 친구들이 뿅!
  • 기타에 파워 레벨을 Many power로 설정하시면 코드를 칠 때마다 이팩트가 생깁니다 :)

런타임 연결

  • RAM, 디스크가 나오는 부분의 우측 삼각형을 클릭하면 아래와 같은 메뉴가 보입니다
  • 호스트된 런타임에 연결(Connect to Hosted Runtime)
    • Google Cloud의 새로운 머신 인스턴스에 연결
    • 라이브러리를 다시 설치해야할 수도 있음
    • Colab의 연결이 끊길 경우 해당 버튼을 클릭해서 다시 연결할 수 있습니다(같은 인스턴스인지는 아직 확인해보지 못했습니다)
  • 로컬 런타임에 연결(Connect to Local Runtime)
    • 내 PC(로컬)을 사용

Reference


카일스쿨 유튜브 채널을 만들었습니다. 데이터 사이언스, 성장, 리더십, BigQuery 등을 이야기할 예정이니, 관심 있으시면 구독 부탁드립니다 :)

PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다

이 글이 도움이 되셨거나 다양한 의견이 있다면 댓글 부탁드립니다 :)

Buy me a coffeeBuy me a coffee





© 2017. by Seongyun Byeon

Powered by zzsza