人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

Deep Learningの訓練終了をSlackに通知する方法

Deep Learningの訓練終了など任意のメッセージを特定のSlackチャネルに投稿できるボットを作りました。

f:id:aidiary:20190409153726p:plain
Yatta Kun

プログラミングは不要で curl というコマンドラインツールから簡単に投稿できるので非常に便利です。可愛いくて便利なので作り方を紹介します。

職場などでみんなが使っているワークスペースで実験すると迷惑がかかる可能性があるので、最初は個人の実験用ワークスペースを作ってしまうのが良いと思います。無料でできます。

1. Incoming Webhookをインストール

SlackアプリのページからIncoming Webhookをインストールします。Slackアプリページは、 https://[workspace name].slack.com/apps/ から行けます。 workspace name はワークスペース名です。 Incoming Webhook で検索すると出てきます。

f:id:aidiary:20190409154358p:plain
Incoming Webhook

設定を追加ボタン で投稿先のチャンネルを選択してから Incoming Webhook インテグレーションの追加 ボタンを押します。

f:id:aidiary:20190409154604p:plain
Incoming Webhook インテグレーションの追加

randomやgeneralに個人的な通知が行くとみんなに迷惑をかけるので、自分だけの times や通知用のチャンネルを指定します。

2. Webhook URLを控える

Incoming Webhookの鉛筆ボタンを押してセットアップの手順ページを開きます。Webhook URLが表示されるのでメモします。このURLにPOSTリクエストを送るとSlackの先ほど指定したチャンネルにメッセージが投稿されます。簡単ですね!

f:id:aidiary:20190409155006p:plain
Webhook URL

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に置き換えてください。先ほど指定したチャンネルに投稿されます。

f:id:aidiary:20190409170151p:plain
投稿されたメッセージ

4. 絵文字を使う

-d で渡すJSONを修正するとアバターなどを変更できます。

curl -X POST https://hooks.slack.com/services/XXXXXX -d '{"text": "Slackって面白いな!", "username": "Smile Kun", "icon_emoji": ":smile:"}'

f:id:aidiary:20190409170613p:plain
アバターを :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:"}'

みたいに訓練スクリプトの後に呼び出されるようにします。シェルスクリプトにしてもいいかと思います。

f:id:aidiary:20190409170749p:plain
訓練終了通知

私はこのコマンドの後に 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__ のところにキーボードフォーカスが当たるためどのマシンで何のスクリプトが終了したのか記入してから使います。

可愛いアイコンが訓練終了を報告してくれるととても癒されますね!自分はいつも :うふふ: でリプライしています。

ただ、アプリから投稿されたメッセージは自分では消せないようなので誤爆は要注意です!