まひろ量子のハックログ

プログラミングや機械学習などの知識を記録・共有します

Google Colaboratory のTips集その1 (GoogleDriveマウント、セッション継続、TensorBoard接続)

Google Colaboratory、すごいです。 誰でも、Tesla K80のGPUを無料ですぐに使うことができる。Tensorflow環境もすぐに手に入れることができる。

https://colab.research.google.com/

この記事では、Google Colaboratoryを使って深層学習をまわすときのちょっとしたTipsを紹介する。

Google Colaboratoryの時間制限ルール

2018年9月7日時点で、以下のようなルールとなっている

  • インスタンスの連続稼働時間は12時間
  • セッションが途切れて90分立つとセッション初期化

長時間の学習で12時間を超えてしまう場合、途中の学習結果をGoogle Drive等に保存できるようにしておく必要がある。また、セッションが途切れてしまわないように、定期的にアクセスする必要がある。

Google driveをマウントしてモデルを保存

ノートブックに以下のコードを追加する。

!apt-get install -y -qq software-properties-common python-software-properties module-init-tools
!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
!apt-get update -qq 2>&1 > /dev/null
!apt-get -y install -qq google-drive-ocamlfuse fuse

from google.colab import auth
from oauth2client.client import GoogleCredentials
import getpass
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
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}

!mkdir -p drive
!google-drive-ocamlfuse drive

途中で2回、Googleにログインするのためのコード入力が要求される。 無事、ログインできれば、driveというディレクトリにgoogle driveがマウントされる。

わたしはいつも、Google driveでプロジェクトごとにディレクトリを分けている。

%cd /content/drive/work/project_A

こんな感じで、ディレクトリ移動できるようになる。

モデルを保存するときは、上述のようにディレクトリを移動して普通にカレントディレクトリに保存するか、モデルの保存先として/content/drive/work/project_AなどのGoogleDriveマウント先のディレクトリを指定すればOK。

セッションが途切れないように定期アクセス

クライアントPCで定期的にアクセスする。以下の例では、Macのopenコマンドで定期的にColaboratoryを開いている。

for i in `seq 0 12`
do
  open https://colab.research.google.com/drive/xxxxxxxxxxxxxxxxxxxxx
  sleep 100
done

AWS等から定期的にアクセスする方法も、のちほど記事化したい。乞うご期待。

Google ColaboratoryでTensorBoardを使う。

ノートブックに以下のコードを追加する。

# ngrokというツールをもちいて、Colaboratoryのローカル環境に立つサーバにインターネットからアクセスできるようにする。
! wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip 
! unzip ngrok-stable-linux-amd64.zip 

get_ipython().system_raw('./ngrok http 6006 &') 
get_ipython().system_raw('tensorboard --logdir=logs --host 0.0.0.0 --port 6006 &')
# ↑ --logdir=logsの右辺にTensoBoardのログの名前を書くこと。

! curl -s http://localhost:4040/api/tunnels | python3 -c "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])" 

# 表示されるURLにアクセスするとTensorBoardの画面が見れる。

以上、Google ColaboratoryのTipsその1でした。その2では、AWSをもちいたセッション継続や、GPU使用状況の確認などについて書こうと思います。

この記事が役に立ったという方は、下の「★+」ボタンのクリック、SNSでのシェア、「読者になる」ボタンのクリックをお願いします!!

Kozuko Mahiro's Hacklog ―― Copyright © 2018 Mahiro Kazuko