Jupyter上でメモリ使用量とかプロットしたい → 自分で作ってみた


動機的なところ

ふと、WindowsのPCから、別のUbuntu環境のJupyterを使ったりする(個人利用なりJupyterHub的なもので)際に、メモリやらディスク使用量などを見ながら作業したいと感じる時がありました。

通常はそのままUbuntuのマシンで作業していれば、コマンドラインを起動してメモリやらを定期的に表示するコマンドを打てば済む話なのですが、別のPCの場合Jupyter上で対応が必要になります。
!マークの記号を使ったりすれば、Jupyter上でもコマンドは直接実行できますが、定期実行などにすると他のセルの実行がブロックされてしまう一方で、他の計算などを実行しながら並行して使用量を確認したいと感じます。

クラウドのサービス(Google ColaboratoryやKaggle Kernelなど)では、ノート上でメモリやディスク使用量が表示されるようにカスタマイズされています。

Kaggle Kernel上の表示例 :

そういった表示が欲しい・・ということで、自分で使う目的半分、遊びとD3.jsとかの勉強目的半分で、自分で作ってみました。

なお、ほとんどデバッグはしていない模様。

こんな形になりました

  • 定期的に実行され、自動でプロットの表示が更新されていきます。
    • 最大値に応じて、軸も自動でスケールしていきます。
  • 他のセルの実行をブロックしません。
  • 基本、UbuntuとかのLinux環境専用です。
  • ローカルPCだったり、Kaggle Kernelなんかで使えます。ColaboratoryやAzureNotebooksなんかでは動きません。
    • ※色々頑張って対応しようと、何度か大きくコード書きなおしたりして試していたけど結局駄目でした。Python側で取得した値をColaboratory上のjsで定期的に参照するのが鬼門。。うまいこと実現できる方法をご存じの方コメントなどでご教示ください。
  • 基本的なメモリやディスク使用量に加えて、GPUメモリの使用量なども表示されます(GPUが刺さっていれば)。Kaggle KernelではGPUメモリは現在表示されていないので、もし確認したい・・というケースに少し便利かもしれません。(バッチサイズ調整なんかで)
  • NVidia以外のGPUでは十中八九動きません(環境的に、試してもいません)。
  • IEとかEdgeとかでは対応していないSVGなんかの設定を使っているので、それらではきっと表示が崩れます(EdgeはChromiumベースになったら改善しそう)。ChromeとかFireFoxとか使ってね。
  • Python3系のみのサポートです。

使い方

PyPI登録してあるプロットライブラリに追加してあるので、pipでインストールできます。(0.2.1以降のバージョンで追加済み)

$ pip install plot_playground

また、GPUの値取得用に、以下のライブラリも利用しています。他のライブラリだけを使う際のことも考えて、デフォルトでは前述のpipコマンド実行時に自動で勝手にインストールされるようにはしていない(Dependencies指定にはしていない)ので、手動でインストールをお願いします。

$ gpustat==0.5.0

あとはノート上でimportして関数を実行するだけです。

from plot_playground.stats import linux_stats_plot
linux_stats_plot.display_plot()

Kaggle Kernelで使うときは

右のメニューの、Internetの設定を「Internet connected」にしないと、pipコマンドやらjsライブラリの読み込みやらで弾かれてしまうので、事前に設定をお願いします。(デフォルトではそうなっていません)

どんな感じか試してみたい!そんなときは・・

KaggleでPublicなKernelを追加しておきました。
Kaggleアカウントがあれば、forkしてセルを全部実行すれば動くと思いますのでお試しください。
PlotPlayground - Linux stats plot example.