クラウドエンジニアのノート

情報技術系全般,自分用メモを公開してます。

GPUクラスタの使用状況をログインノードから一発で確認するシェルスクリプト

はじめに

うちの研究室にはGPUクラスタがありますが、各GPUノードの使用率を見るには、各GPUノードにsshしてnvidia-smiをしなければいけません。

これでは不便なので、ログインノードから一発で確認できるシェルスクリプトを作成・公開しました。

cluster-smi

GitHubで公開しました。

github.com

使用方法

リポジトリのREADME.mdにも書いてあるのですが簡単に

submodule (prettytable.sh)があるので、それを取得し、cluster-smi.shを実行するだけです。

もしパスを通したかったら、cluster-smi.shをどこかパスの通っている場所にシンボリックリンクを貼って下さい。

(もちろん、.bashrcに追加でもOKです)

技術的な話

単純に各GPUノードにsshしてnvidia-smiを実行して、その情報を切り取っているだけです。

シンボリックリンク

cluster-smi.shprettytable.shを参照しているので、cluster-smi.sh だけでシンボリックリンクを貼ると参照できなくなります。

そこで以下の記事を参考に、シンボリックリンクを解決しながら絶対パスを取得しています。

シェルスクリプトでシンボリックリンクを解決しながらその絶対パスを取得するには | hydroculのメモ

なので、 cluster-smi.shだけシンボリックリンクを貼っても動くわけです。

並列化

それぞれのノードから情報を取ってくる部分を関数化し、単純に&付けるだけで並列化しています。

bashのfor文の中身を並列処理させる · sacre

なので、結果がバラバラに帰ってきます。 これをなんとかしたかったのですが、シェルスクリプトでは厳しかったです。(もし方法があれば教えて頂きたい…)

なぜシェルスクリプト

移植性が高いからです。 完全にこの本に影響を受けています。

www.ohmsha.co.jp