11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Google ColaboratoryのGPUをしゃぶり尽くす。

Posted at

概要

「Google ColabratoryでGPUを使い倒したい!!」
と思ってるけど、下のようなお悩みをお持ちでないですか...?

  • 90分 & 12時間ルールでセッション切れする...
  • Google DriveにMountしたファイルの読み書きにやけに時間がかかる...
  • Colab使いすぎてGPU使えなくなった!

そんな貴方達に捧ぐ、Colabをしゃぶり尽くすTipsになります!

執筆日 : 2020/02/03

Colabの90分ルールのセッション切れ対策

課題

Colabは90分なんのセッションもないとセッションが切れて12時間使い切れない。
上記課題に対応するために二つやることがある。

  • macのスリープ対策
  • ブラウザのセッション対策

スリープ対策のために「環境設定」->「省電力設定」といってスリープ対策をしてもうまくいかなかったりする。

またセッション対策としてColabのファイルになんどもアクセスするスクリプト書いたり、Autoreloadを入れたりするやり方もあるが、1回目はちゃんとリロードしてもいいか押す必要があったりして面倒臭い。

解決策

  • スリープ対策
    「Amphetamine」というアプリを入れれば簡単にスリープの永続化をしてくれる!
    スリープしない時間も設定できるので、環境設定触ってPCがスリープしない状態なの忘れてて久々にPC開いたら「Oh...」ってこともない!

  • セッション切れ対策

実はColabのRamとか書いてるところを押すと、再接続になる。
これを活用して、そこを定期的にクリックするスクリプトを書いてあげればOk!

  1. Cmd + option + i でブラウザのコンソールを開く。
  2. コンソールで以下を実行。
function ClickConnect(){
    console.log("Working!"); 
    document.querySelector("colab-toolbar-button#connect").click() 
}
setInterval(ClickConnect, 1200000) // 20分ごと

これでセッション対策も完璧!

Google DriveにMountしたファイルの読み書き問題

課題

多くの人がGoogle Driveのファイル群をColabに以下のコマンドでマウントさせて使っていると思います。

from google.colab import drive
drive.mount('/gdrive')

しかし!Google DriveのマウントによるファイルのIOってかなり遅いんですよね...。

なんで画像のトレーニングなどで大量の画像ファイルやjsonファイル(annotation)を扱いたいとき、めちゃ遅かったりします。
これが非常にまどろこっしい!!トレーニング関係ないことですら遅い!!

解決法

1GB以上とかのファイル群なら、Google Driveにzipで固めて、
GoogleDriveのファイル群をColab内の環境に直でダウンロードしてしまった方が早い場合が多いです。
しかも!実はGoogle Driveのファイルは、少し手間を踏めばwgetでダウンロードできちゃいます。
そうすればAWSとかGCPとかのストレージファイルにあげなおす必要もないし、お金もかからないし、最高!!

【具体的なやり方】

  1. ダウンロードしたいファイルをzipで固める。
  2. 対象ファイルを右クリックして、「web上の全ての人に共有」にする。
    「共有」->「詳細設定」->「特定のユーザーがアクセスできます」の横の「変更」->「web上の誰でも」
  3. 「共有可能なリンクを取得」からリンクを見て、ファイルのIDを取得。
    https://drive.google.com/open?id=abc123ならFILEID=abc123
  4. 以下のbashを実行。
# /content/dataset.zipとして対象ファイルをダウンロードする。

# そこまで重くない場合
wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=<FILE_ID>' -O /content/data.zip

# まあまあ重い場合
wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=<FILE_ID>' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=<FILE_ID>" -O /content/dataset.zip && rm -rf /tmp/cookies.txt

# /content にデータを展開する。
unzip -q /content/dataset.zip -d /content

参考 : https://medium.com/@acpanjan/download-google-drive-files-using-wget-3c2c025a8b99

共有設定が全世界に公開になるので、データが機密情報の時は試さないでね!

Colab使いすぎてGPU使えなくなる問題

課題

GPUを使い倒し続けていると、急にGoogleから「アカウントにGPU割り当てられないよ〜」ってメッセージが届く。
その間しばらくGPUは使えない...。悲しい...。
「でもでもどーしてもGPU使いたいの!!」って諸君。

解決策

Gmailアカウントを別のでやろう!
...ん?「そら、それならできるだろう」と?「ファイル構成そのアカウントに作り直さなきゃじゃん」と?

一つ目はごもっともです、流石に同じアカウントではできない、多分。大人しくGmailアカウント作ってください。

二つ目に関して。
ファイルの構成は元のアカウントのものを使えればいいはず。
そして、Google Driveのマウントは「別のアカウントのGoogle Drive」にも実はできてしまう。
ということで、以下のステップを踏めば簡単に別アカウントでipynbを動かせる。

  1. 実行したいipynbを新しく作ったアカウントに共有する。
  2. 新しく作ったアカウントから、共有されたipynbを開く。
  3. mountする際に選択するアカウントを元のアカウントにする。

以上で、GPUを使えなくても別アカウントのGPUで簡単にノートブックを実行できる!

最後に

以上いろいろ書いたが、
どれもどこまで許されてるかわからないし、
急に禁止になるかもしれないので自己責任でお願いします。

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?