0%

深度学习实验通常需要运行几个小时或者更久, 在这一段时间中通常需要安排其他工作, 如看paper, 写其他model的代码等. 为了使计算资源的利用率最大化, 加快调参进度, 我们需要在一组实验结束后立即开始下一组实验. 但是, 在看paper写代码时关注实验是否跑完是很影响效率的. 解决这一问题的方法就是让实验跑完后推送通知给我们.

ntfy是一个能够在长时间的命令执行完毕后发送桌面通知或者发送到消息推送服务的工具. 它能够和很多消息推送服务配合, 例如Pushbullet, Simplepush, Telegram, Pushjet, Slack, Instapush等. 由于用于跑实验的服务器上通常没有桌面环境, 所以只能通过这些服务推送消息. 考虑到国内的网络环境以及在移动设备上的可用性, Slack是最佳选择.

为了搭建这样的一个推送系统, 首先需要拥有一个Slack账号, 以及创建一个Slack Workspace. 具体过程在这里不再描述, 可以参考官方帮助文档.

注册完成并登陆后, 可以看到如下界面

然后我们需要在这个workspace中创建一个api token, 让外界的程序使用这个token与slack进行交互. 在这里, 找到token generator, 可以看到类似于下图的表格

创建token后, 把它记录下来. 这里使用legacy token的原因是ntfy不支持新版本的Slack api.

在服务器上, 首先安装ntfy:

1
$ pip install ntfy ntfy[slack]

然后创建配置文件~/.config/ntfy/ntfy.yml(仅限Linux), 在配置文件中写入

1
2
3
4
5
backends:
- slack
slack:
token: xoxp-??????????-??????????-?????????-????????????????????
recipient: "#general"

其中token处填入之前创建的token, recipient填入想要接收信息的频道.

之后可以进行测试:

1
$ ntfy send test

执行完毕后应该可以在slack上接收到信息.

ntfy提供了在长时间的命令执行完毕后自动推送的功能, 只需要把

1
eval "$(ntfy shell-integration)"

加入到.bashrc.zshrc中. 执行时间大于10秒的所有命令都会自动向slack发送一条消息, 可以用sleep 15测试.

为了避免交互式的程序产生通知, 可以加入如下环境变量

1
export AUTO_NTFY_DONE_IGNORE="vim tmux"

这样整个推送系统就搭建完成了, 只要在电脑和手机上打开Slack的推送, 就能在程序运行结束的第一时间得到通知了.

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment