たそらぼ

日頃思ったこととかメモとか。

Google ColabのGPUメモリについて

最近、機械学習のジョブを回すのにGoogle Colabを利用しているのですが、日によってGPUメモリ周りの挙動が異なるので調べて見ました。


Google ColabではGPUが無料で割り当ててもらえます。ただ、日によってGPUメモリの割り当てが異なるような挙動をします。
例えば、作ったモデルで学習をして、テストデータを流してみようとすると、昨日は動いたのに、今日はresourceexhaustederrorを吐かれて止まるとか...。

ジョブ開始時点でメモリを確認すると良さそう

調べると、ちょくちょく気にしている人がおり、stackoverflowを中心に報告が上がっていました。
ja.stackoverflow.com

以下のコードのように、ジョブの実行前にメモリの割当量を確認しておくと良さそうでした。

#上記URLから引用

!ln -sf /opt/bin/nvidia-smi /usr/bin/nvidia-smi
!pip install gputil
!pip install psutil
!pip install humanize
import psutil
import humanize
import os
import GPUtil as GPU
GPUs = GPU.getGPUs()
# XXX: only one GPU on Colab and isn’t guaranteed
gpu = GPUs[0]
def printm():
    process = psutil.Process(os.getpid())
    print("Gen RAM Free: " + humanize.naturalsize( psutil.virtual_memory().available ), " | Proc size: " + humanize.naturalsize( process.memory_info().rss))
    print("GPU RAM Free: {0:.0f}MB | Used: {1:.0f}MB | Util {2:3.0f}% | Total {3:.0f}MB".format(gpu.memoryFree, gpu.memoryUsed, gpu.memoryUtil*100, gpu.memoryTotal))
printm()

今日は以下のような結果でした。

Gen RAM Free: 12.8 GB  | Proc size: 155.9 MB
GPU RAM Free: 11441MB | Used: 0MB | Util   0% | Total 11441MB

何日か調べてみた

一日一回、Google Colabでノートブックを開いて調査して見ました。

日にち GPU RAM Free / GB
1日目 11.4
2日目 11.4
3日目 15.0

3日だけしか見ていないので、resourceexhaustederrorになるくらい割当量が少ない日がありませんでしたが、逆に15GBと多く割り当てられている日があることがわかりました。
ほかの方の報告を見ていても、11〜12GBが割り当てられていることが多いので、この辺りを通常の割当量と見て、これより少ない割当量のときは計算を別の環境に移すのが良いのではないかと思われます。