はじめに
Pythonの実行環境構築はJupyter labやVScode、docker、GCPのAI Platformなど色々使ってきましたが、一周回ってGoogle Colab Proが構築の楽さと費用面から良いなあと感じているこの頃。
特に自分のメインの学習内容が、画像データなのでGPUが使えることはマストなのです。
GCPのAI platformは一々立ち上げて、終了してってやるのがめんどくさい。
Google Colabならブラウザで立ち上げるだけで楽ちんです。
と、散々褒めちぎってますが、不便な部分(90分制限、12時間制限など)があるのも確かです。
なんとか快適に画像分類などのタスクを行えないか試行錯誤して今の形に落ち着いたのでメモ。
Google Driveと連携する
元となる画像データなどは全てGoogle Driveにアップロードしておきます。
左のフォルダマークをクリックして上部の一番右のアイコンをクリックすればDriveと連携できます。
drive
フォルダの中にMyDrive
というフォルダがありここから、GoogleDrive上のデータにアクセスできます。
データをcontent直下にコピーする
MyDrive
上から画像データを持ってきてndarray形式にしたり、データセットを作ってもいいですが、めちゃくちゃ遅いです。
そのためdrive
の上の階層のcontent直下にデータをコピーすることでで読み込み速度を速くします。
使うものはフォルダのコピーや移動、削除を行えるshutil
というライブラリを使います。
import shutil
shutil.copytree(data_path, '/content/datasets')
datapathはコピーしたい元データのパス
第二引数にコピー先のパスを指定して使用します。
90分制限に対応する
コチラの記事に詳しく書いています。
要は自動的にマウスが動く仕組みならなんでもいいと思います()
12時間(proなら24時間)制限に対応する
これは強制的にストップしてしまうのでどうしようもないです。
従って、途中から学習が再開できる仕組みを整えればokです。
TensorFlowであればcallbackのModelCheckpointを設定しておけばいいですね。
filepath = '/content/drive/MyDrive/checkpoint/epoch_{epoch:02d}-loss_{val_loss:.2f}-psnr_{val_psnr:.4f}-ssim_{val_ssim:.4f}.h5'
checkpoint = tf.keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0,
save_best_only=False, save_weights_only=False, mode='auto', period=100)
モデルの保存もGoogleDrive上に保存するようにします。
またモデルのパスにはエポック数や評価指標の値を含むようにします。
こんな感じで指定のエポックごとにモデルが保存されていきます。
もし学習が途中で止まったらここからload_modelすればokです。
その他便利なコマンドなど
gpu_info = !nvidia-smi
gpu_info = '\n'.join(gpu_info)
print(gpu_info)
上記コマンドで割り当てられているGPUの種類が確認できます。
def set_seed(seed=46):
os.environ['TF_DETERMINISTIC_OPS'] = '1'
tf.random.set_seed(seed)
学習の再現性担保のため乱数シードの設定はマストです。
いちいち環境変数とTensorFlowのシード設定を書くのが面倒なので関数化しています。
Jupyter Labをメインで使ってたので、予測をTabキーを押して表示するのに慣れているので「コード入力時の候補を自動的に表示する」はオフにしています。
まとめ
上記設定というか、やり方でかなり快適に学習を行えるようになりました。これで月額1000円ほどはもはや無料では(?)
Colab Proから抜け出せそうにないですね。Pro+にアップグレードも検討中です。
Colabユーザーの参考になれば幸いです。