高性能集群作业信息记录表模板教程 有时候我们在唐楼HPC上计算任务,想要较为准确地知道当前计算进展(例如,刚刚提交或者计算结束,又或者多个计算阶段到哪了),但是面临一堆Output文件不停 cat、 grep、 bpeek很不优雅…… 为了比较准确知道自己的作业当前的状态,有很多种方法,集群用户大多是这三种做法: 方法一(千万别这么干系列):自己写个无限循环的脚本不停查询然后维持校园网外网访问,检测到后通过SMTP给自己发邮件。作为eScience高性能计算交流群的年更节目,此方法几乎没有任何优点,不仅浪费一个校园网终端、邮件有概率被过滤、浪费大量登录节点资源导致其他用户也卡顿,还有可能得到集群管理员姚老师的特!别!关!照! 方法二:使用 bwait命令(详细用法自行搜索)在任务后执行通知,优点是够简单,缺点是登录节点如果出了什么问题,该命令也会失效。 方法三:直接将通知脚本集成在任务脚本里,放在任务前后执行。 本文将重点介绍方法三。你可能会说,那方法三不还是需要SMTP发邮件吗? 非也,如果你知道以下三个事实: 协同表格(table.nju.edu.cn)和计算节点直接连通,而且同属内网无需登录校园网账号 协同表格支持Webhook/邮件消息通知,其中Webhook包括企业微信机器人和钉钉机器人,甚至自定义Webhook 大多数手机系统都已经支持企业微信和钉钉的系统级推送(指无需后台驻留应用也能收到通知) 那么你就可以自然想到:通过协同表格的API从HPC计算任务提交信息至表格,然后利用表格自动化实现消息推送提醒;既能统一记录信息,方便后期统计分析计算效率,又可以实时通知,妙啊~ 那么,如何实现这一构想呢? 创建表格文件 获取模板 在协同表格的模板页,点击科研-HPC作业信息记录表,使用此模板: 这个模板预设的列名可以不用修改,因为后面的脚本预设的就是这些列名: 创建自动化 首先,打开钉钉或企业微信(本文以企业微信为例),在群聊内创建一个群机器人 之后,复制Webhook地址 回到之前创建的表格,我们打开第三方集成 可以看见,表格支持发送邮件/企业微信机器人/钉钉机器人。本文我们主要关注机器人,因此邮件就暂时略过了。 在此处,我们添加一个企业微信机器人并粘贴刚才的Webhook地址 测试可以发送消息,即设置完毕。 如果你需要更高级的Webhook触发其他外部工作流来实现更加强大的自动化,可以选择另一种方式 此自定义Webhook会被所有新增、复制、删除、修改行操作触发,并以特定的格式发送消息。详情见官方手册。 打开表格的自动化规则,新增一条规则: 在规则中,我们设置只要新增记录的任务状态列“不是空”, 然后增加一个动作,动作类型为发送企业微信,并选择刚才我们在“第三方集成”创建的那个企业微信机器人 如果你想要“花里胡哨”一些,可以选择Markdown格式,并且按照企业微信机器人官方文档的Markdown格式要求配合{列名}引用的模板语法来撰写。钉钉机器人同理。 下面是一个企业微信机器人的例子: 集群任务新动向: >任务ID:**{任务ID}** >队列信息:**{队列}** >节点信息:**{节点}** >任务状态:**{任务状态}** 保存这个自动化规则。至此,自动规则设置完毕。 获取脚本 在eScience的Seatable-Reporter代码仓库中,找到 seatable-reporter-LSF.py文件,这就是脚本了。你可以把这个脚本放置在你的home目录下或其他什么地方,本文示例放置在 ~下面。 这个脚本配合上边的模板,什么也不用修改,可以直接拿来用。 使用脚本 获取Base API Token 脚本读取两个重要的环境变量: SEATABLE_HOST与 SEATABLE_BASE_TOKEN,其中前者对协同表格用户而言填写 table.nju.edu.cn即可,后者需要自行填写之前创建表格的API Token。 API Token的获取方式: 获取后,通过 export命令将上述内容写入环境变量: # 偷懒的话,可以直接加到`.bashrc`里面去 export SEATABLE_HOST=table.nju.edu.cn export SEATABLE_BASE_TOKEN=<刚刚获取的API Token> 提交计算任务 由于提交作业之前的 alias无法继承至LSF作业环境里,为了简单起见可以在LSF作业脚本开头写入命令,例如叫 mylog。 在你想要的地方,直接 mylog你想要的信息即可,消息便被发送至协同表格。以下是一个示例LSF作业脚本, #BSUB -q 7702ib #BSUB -n 1 alias mylog="python ~/seatable-reporter-LSF.py" mylog "提交任务" mylog "计算结束" 表格上便会获得此消息 当然,根据计算任务不同,你也可以自定义更多的状态信息。表格接收到新的记录提交,便会触发自动化,在手机上相应提醒: 此外,表格本身留下的记录也可以用于一些信息统计—— 结语 本文主要实践通过协同表格与HPC的联动,在纯内网环境实现了低成本的计算任务实况通知。 事实上,类似的自动化案例在eScience的各种服务中比比皆是。得益于eScience多个服务的灵活性,看似不相关的服务平时各司其职;一旦互相协同,就能在小至办公智能化,大至工作自动化的各方面有很大便利。