Jupyter NotebookからGPUの占有状況をワンタッチで調べる

技術研究所(技研)のまつけんです。

技研では現在、2台のゲーミングデスクトップPCにLinux (Ubuntu)とJupyterをインストールして、共有で計算サーバとして使っています。2台のPCにグラフィックボードが2枚ずつ搭載しているのですが、技研メンバ全員が使うので、GPUやGDDR RAMなどのリソースの順番待ちが発生します。

グラフィックボードのステータスはnvidia-smiコマンドで確認するのですが、タスクの詳細(オーナなど)については、別途psコマンドなどで調べる必要があります。そこで今回、nvidia-smiコマンドの結果から自動的にpsコマンドで詳細を調べるシェルスクリプトを作ってみました(nvidia-smiのバージョンが450の場合は、awk ‘{print $5}’ ):

実行結果は、このようになります:

nvidia-smiコマンドでは、プロセス毎のRAM使用量は表示されますが、その他のオーナなどの情報はわかりません。しかし、PIDをキーにしてps auxとgrepを組み合わせると各種の情報を得ることが出来ます。今回のスクリプトでは、nvidia-smiコマンドの結果からPIDを順に読み込んで各々のpx auxの結果を表示します。

勿論、このスクリプトは、Jupyter Notebook上でも実行できます。Jupyter上で、shellを呼び出すには、行頭に「!」を付ければよいので、先程のスクリプトの全ての行頭(スクリプトとしての行頭)に「!」を付け、複数行に渡る部分には、行末に「; \」を付けます(ただし、doのあとに「;」を付けると構文エラーになります):

ちなみに、これだと少し動作が遅いので、全てを1行に纏めてしまうのがお勧めです(Jupyter Notebookでは!毎にshellを呼び出すようです)。纏めたものがこちらです:

また、セルの先頭に「%%bash」を付けることで「!」と「; \」を使わずに記述する方法もありますね:

如何でしたか? 今回は計算サーバのGPUのステータスをJupyter上から自動で詳細に調べる方法について紹介しました。よろしければ、使ってみてください。

  • このエントリーをはてなブックマークに追加