机器学习模型训练过程往往耗时较长,很难长时间盯着日志判断训练状态。本文将介绍通过python向飞书发送训练日志的方法,让模型的开始结束都会在飞书上留痕。这样每天早上一起床,不需要打开服务器也能知道前一晚的训练情况了。首先需要一个飞书账户,并在电脑客户端登录。接着点击左上角的“+”,再点击新建群聊不需要在这个群聊中加任何人(当然如果想把训练通知发给其他人,可以把其他人一起拉到这个群聊中)。接着你就拥有了一个以你为名字的群聊,依次点击右上角的“...-设置-群机器人-添加机器人-自定义机器人”,点击添加。接着将下面这个界面的webhook链接复制到本地,我会建议放在.env文件里。注意这个webhook相当于是这个机器人的密码,一定不可以外传,否则别人可以通过这个链接操作你的机器人发消息。接着就可以到代码端,打开一个新的python文件,我叫notification.py,贴入如下的代码。.env要放在项目根目录下。import osimport requestsfrom dotenv import load_dotenvload_dotenv()def send_slack(message: str) -> None: webhook_url = os.environ.get("SLACK_WEBHOOK_URL") if not webhook_url: return response = requests.post( webhook_url, json={"text": message}, timeout=10, ) response.raise_for_status()def send_feishu(message: str) -> None: webhook_url = os.environ.get("FEISHU_WEBHOOK_URL") print(webhook_url) if not webhook_url: raise ValueError("webhook not found") response = requests.post( webhook_url, json={ "msg_type": "text", "content": { "text": message, }, }, timeout=10, ) response.raise_for_status()def send_notification(message: str) -> None: """同时向已配置的平台发送消息;单个平台失败不影响另一个。""" for sender in (send_slack, send_feishu): try: sender(message) except Exception as exc: print(f"Notification failed: {exc}")if __name__ == "__main__": try: send_feishu("✅ Python Webhook 最小测试成功") print("请求已发送,请检查 Slack 或飞书") except Exception as exc: print(f"发送失败:{type(exc).__name__}: {exc}") raise
接着,在我们的训练脚本中,通常会写一个main函数,然后if __name__ == "__main__": main()
args = parser.parse_args()task_name = f"\"{args.experiment_name}_{args.dataset}_{current_time}\""send_feishu(f"Task: {task_name} starts")try: main(args)except Exception as error: error_message = (f"Task: {task_name} failed\nError: {type(error).__name__}: {error}") send_feishu(error_message) # 在终端输出完整报错栈 traceback.print_exc() # 继续抛出异常,使脚本以非零状态码退出 raiseelse: send_feishu(f"Task: {task_name} completed")
task_name不一定要来自args,可以自己定义。这样的好处是几乎没有侵入原本代码,而且如果不嫌烦的话也可以把所有的日志都输出到飞书,改起来非常方便。除了飞书,Slack也是可以的,方法差不多,不过不是建群聊,而是建一个新的APP。另外要注意下,飞书最好自己是管理员(建个人账户就可以了),不然可能没法设置机器人。相关的代码已经传在我的github ml template上了(也可以点文末阅读原文):https://github.com/LinyongGAN/Machine_Learning_Templates/,欢迎大家帮忙点点star⭐