写在前面
一入炼丹深似海,希望天下没有空闲的GPU
每次训练开始跑起来总是要不断看什么时候结束,永远副屏都要开着终端实时查看GPU占用情况
原本想着能不能服务器有空闲时给我发邮件提醒呢,简单搜索了一番发现了更优雅的解决方案
最终效果
训练结束之后会报告训练结果(这里只是个测试例子,不会有人训完还188的loss吧)
这才有点高科技程序员人才该有的样子
开始配置
【预备知识】
Python | 阿里云对象存储OSS图床上传图片
Python | SM.MS作为免费图床上传图片
- 在钉钉中新创建一个组织(企业微信同理,大同小异)
- 电脑端钉钉在群 设置-智能群助手 中添加一个「自定义机器人」
- 其中「安全设置」部分必须设置一项,否则机器人无法启用
- 自定义关键词:发送的信息中必须有指定关键词才能收到(最方便最高效,我最终选的这个√)
- 加签:一个时间码(有点复杂没细看)
- IP地址:只有在IP列表中的服务器发的消息才能收到(服务器不知道为什么只有IPv6具复杂的那串地址,没能识别只能作罢,但笔记本的ip成功被捕获)
- 创建好之后就得到一个Webhook,保存好之后要用
- 钉钉的自定义机器人接入文档也写的很好,我还是举几个小例子
- 可以通过命令行直接发送消息做个冒烟测试,记得把
[ ]
换成上面的Webhook即可,按理说钉钉就会收到信息(手机、电脑、手表都会自动同步这点很方便)
curl 'https://oapi.dingtalk.com/robot/send?access_token=[Webhook]' \-H 'Content-Type: application/json' \-d '{"msgtype": "text","text": {"content":"Hello world from doubleZ!"}}'
- 常用的消息对我来说就是text和markdown,自己看下文档就好
- 有一点坑是text对于变量的支持不是很好,如果消息比较复杂推荐用markdown格式,会友好很多
- 推荐用python调用os模块发送cmd指令,而不是直接用python的request发请求(实测不是很稳定),例如⬇️
- 这样的好处一个是cmd指令快
- 另一个是python处理变量要比shell方便太多太多!!
- 而且python的字典默认数据结构可以很好的通过json模块进行字符化(
json.dumps()
,json.loads()
)
import os
import jsontest_payload = {"msgtype": "markdown","markdown": {"title":"Test", "text": "# {}".format(message, )}}cmd = '''curl '{}' \-H 'Content-Type: application/json' \-d '{}''''.format(webhook,json.dumps(payload) )os.system(cmd)
- 关于展示里的图片可以参考上面两个图床的实践,首先把图片上传到图床获得链接,然后通过markdown语法
[外链图片转存失败,源站可能有防盗]!链机制,建(img_url-vig_url)]
插入到文本中发送即可 - 最后就是发挥创造力结合自己的需求做出适合自己的机器人让服务器跟自己实时汇报喽!
【补充】
企业微信机器人跟钉钉机器人基本一样,基本换一下企业微信机器人提供的Webhook即可