OkayuTech

情報系大学生の技術的なこと

複数の計算機上のGPU使用率をモニタリングできるツールを作った

タイトルのままです。

github.com

f:id:okayu_k:20180429075256p:plain

複数の計算機上にあるGPUを複数人で共有するような場合、使用前に空いているGPUを探す必要があります*1

1つ1つ手動で探すのも面倒ですし、自動で空いたGPUに割り当てる方法もパッと思いつかなかったので、1つのWebページに複数の計算機上のGPU使用率を表示できるツールを作成しました。

仕組みは非常に簡単で、各計算機上で"ssh hoge nvidia-smi ..."を実行してその結果を集めてくるだけです。
そのためアクセスする度にssh接続とnvidia-smiが実行されるのであまり効率的ではないかもしれませんが、そんなに大人数が頻繁にアクセスすることもないと思うので妥協しました。

GPU使用率をモニタリングしていると、GPUメモリ上にモデルを載せたまま何も処理をしていない状態が発生していることに気づきます。 そうなると計算資源自体は空いているもののメモリが足りないので他の人がモデルを載せられず、実質的にGPUが使えない状態になります。
かく言う私もJupyter Notebookで学習させる際に、モデルを待避させるコードを書かないことがあるので、数分から数時間の間そのような状態にしてしまうことがあります。
そのような死んだGPUが長時間存在して、他に空いているGPUが無い場合に通知を送る、なんてこともしてみたいですね。

*1:もちろんクラスタ化すればその必要はありませんし、そちらの方が理想的ですが、色々な事情でそれが出来ない場合のことです