Deep Learningの訓練終了をSlackに通知する方法
Deep Learningの訓練終了など任意のメッセージを特定のSlackチャネルに投稿できるボットを作りました。
プログラミングは不要で curl
というコマンドラインツールから簡単に投稿できるので非常に便利です。可愛いくて便利なので作り方を紹介します。
職場などでみんなが使っているワークスペースで実験すると迷惑がかかる可能性があるので、最初は個人の実験用ワークスペースを作ってしまうのが良いと思います。無料でできます。
1. Incoming Webhookをインストール
SlackアプリのページからIncoming Webhookをインストールします。Slackアプリページは、 https://[workspace name].slack.com/apps/
から行けます。 workspace name
はワークスペース名です。 Incoming Webhook
で検索すると出てきます。
設定を追加ボタン
で投稿先のチャンネルを選択してから Incoming Webhook インテグレーションの追加
ボタンを押します。
randomやgeneralに個人的な通知が行くとみんなに迷惑をかけるので、自分だけの times
や通知用のチャンネルを指定します。
2. Webhook URLを控える
Incoming Webhookの鉛筆ボタンを押してセットアップの手順ページを開きます。Webhook URLが表示されるのでメモします。このURLにPOSTリクエストを送るとSlackの先ほど指定したチャンネルにメッセージが投稿されます。簡単ですね!
3. curlコマンドでPOSTリクエストを送る
試しに何か送ってみましょう。curlコマンドを使うとPOSTリクエストを簡単に送ることができます。Web APIのテストなどでよく使うコマンドです。Slackのチュートリアルに表示されているメッセージをPOSTしてみます。
curl -X POST https://hooks.slack.com/services/XXXXXX -d '{"text": "これは、チャンネル内のテキスト行です。そしてもう1つテキスト行があります。"}'
XXXXXX
の部分は先ほど控えたWebhook URLのIDに置き換えてください。先ほど指定したチャンネルに投稿されます。
4. 絵文字を使う
-d
で渡すJSONを修正するとアバターなどを変更できます。
curl -X POST https://hooks.slack.com/services/XXXXXX -d '{"text": "Slackって面白いな!", "username": "Smile Kun", "icon_emoji": ":smile:"}'
icon_emoji
には、そのワークスペースで使える任意の絵文字を指定できます。
5. Deep Learningの訓練終了に使う
Deep Learningの訓練結果の通知に使いたい場合は、
python train.py; curl -X POST https://hooks.slack.com/services/XXXXXX -d '{"text": "aws0001での訓練が終了したよ!やったね!", "username": "Yatta Kun", "icon_emoji": ":yatta:"}'
みたいに訓練スクリプトの後に呼び出されるようにします。シェルスクリプトにしてもいいかと思います。
私はこのコマンドの後に sudo shutdown -h now
でインスタンスを自動シャットダウンするようにしています。
(おまけ)Dashにショートカットを登録する
上のcurlコマンドを.bashrcなどにaliasで登録してもいいかと思いますが、私は Dash というMacのキーボードショートカットアプリに登録して使っています。
# ;yatta curl -X POST https://hooks.slack.com/services/XXXXXX -d '{"text": "__name__", "username": "Yatta Kun", "icon_emoji": ":yatta:"}'
;yatta
と打ち込むと自動的に補完されます。 __name__
のところにキーボードフォーカスが当たるためどのマシンで何のスクリプトが終了したのか記入してから使います。
可愛いアイコンが訓練終了を報告してくれるととても癒されますね!自分はいつも :うふふ:
でリプライしています。
ただ、アプリから投稿されたメッセージは自分では消せないようなので誤爆は要注意です!