Google Colabで定期的にGoogle Driveにバックアップにとる方法を紹介します。Linuxコマンドだけでできる単純な方法で、追加の課金は必要ありません。
目次
こんなことないだろうか
もちろん、全部自分でコードを書く前提なら、エポック単位でGoogleドライブに吐き出すような処理を追加すれば良い。しかし、他人が書いたコードだとそうもいかないこともあります。
問題点は、Google Colab(Jupyter Notebook)で訓練実行中は、訓練部分のセルがずっとブロッキングしていて、他のセルが実行できないことです。
バックアップに求められる要件は、
別にNotebookを起動してバックアップ処理を走らせる方法もありますが、自分が確認したときは同じGPUランタイムで2つのノートブックを起動しても、別ランタイムが割り当てられてしまいました。
!nohup bash -c 'while true; do cp -r -f logs /content/drive/MyDrive/Snapshot; sleep 300; done' &
sleepの部分は実行頻度(秒数)。この場合は5分ごとに実行
バックアップコード
!nohup bash -c 'while true; do cp -r -f logs /content/drive/MyDrive/Snapshot; sleep 300; done' &
ファイル生成コード
import datetime
import time
import os
while True:
contents = datetime.datetime.now().strftime('%Y%m%d %H%M%S')
if not os.path.exists("logs"):
os.mkdir("logs")
with open("logs/"+contents+".txt", "w") as fp:
fp.write(contents)
time.sleep(60)
こちらはPythonで無限ループしているので、処理がブロッキングされます。
結果(Google Drive)
5分おきにどんどんファイルが生成されており、想定した挙動です。上書きもされており、係数やログファイルの保存では便利そう。
ファイルの書き込みと、バックアップ側のファイル読み込みの衝突を考えていない結構ガバガバな仕様ですが、定期的にスナップショットをとる分には使えるのではないでしょうか。