ターミナルでnvidia-smi
コマンドを打つことで、GPU使用状況を確認していることと思いますが、SSH接続なしでスマホやPCでも確認したいときありますよね?
Slack Boltを使って簡単に確認できるようにしましょう!
$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI XXX.XX.XX Driver Version: YYY.YY.YY CUDA Version: ZZ.Z |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA RTX A6000 On | 00000000:18:00.0 Off | Off |
| 37% 67C P2 250W / 300W | 24591MiB / 48685MiB | 83% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 1000000 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 1000001 C python 24583MiB |
+-----------------------------------------------------------------------------+
↑ この出力結果をslackに通知します。
slackの設定
とても分かりやすくまとまっている記事があります。
【実際にやってみましょう】~【BOTをチャンネルへの追加】を記事の通りに設定してみてください。
GPU使用状況を確認するpythonのコード
参照した記事では発言のあったチャンネルに返事をするという機能を実装していましたが、GPUの使用状況を書き込む機能を実装します!
まず、slack_boltをインストールしてください。
condaだったら、conda install -c conda-forge slack-bolt
でインストールできます。
#必要なライブラリをインポート
import os
import subprocess
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
#[OAuth Token] と [App-Level Token]を記載する
SLACK_BOT_TOKEN = "xoxb-*******"
SLACK_APP_TOKEN = "xapp-*************"
#[OAuth Token]読み込み
app = App(token=SLACK_BOT_TOKEN)
#反応する発言内容を記載する
@app.message("^gpu")
def message_hello(message, say):
#発言のあったチャンネルへメッセージを送信する
result = subprocess.run(["nvidia-smi"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=True)
gpu_info = result.stdout
say(f"```\n{gpu_info}\n```")
#アプリの起動
if __name__ == "__main__":
SocketModeHandler(app,SLACK_APP_TOKEN).start()
上のコードに自分のBOT_TOKENとAPP_TOKENを入力して.pyファイルとして保存し、pythonで実行してみてください。
アプリを追加したチャンネルで「gpu」と発言すると、
このように、使用状況を確認することができました!
ここで、slackで送信したコマンドをターミナルで直接実行させるという事も可能ですが、セキュリティ上めちゃめちゃ良くないので、やめておきましょう。
gpu
というメッセージだけ(その他任意に設定可能)を受け入れるというところがポイントです。
常時実行しておく必要があるので、nohupコマンドを使ってバックグラウンド実行しておくのが良いかもしれませんね。