2021年第二季度工作总结

目录

第二季度深切体会到坚持“充电”需要强大的自控力。 无论是工作还是家庭,总能找到理由来说服自己寻找各种各样的方式来消磨时间,逃避充满艰辛的充电奋斗之路。 第二季度尤其是整个 6 月,我几乎没有利用任何可自由支配时间进行有效学习。 也许是因为空闲时间变得比之前更为零散,但归根到底还是没有坚持的魄力,让我不禁怀疑自己是不是已进入了 35 岁魔咒时期。

计划完成情况

上一季度总结中计划今年第二季度完成以下工作:

  • ✔️ 现代化专项验收
  • ✔️ TYM 升级
  • nwpc-data
    • ❌ 格式支持
    • ✔️ 数据处理 API
    • ❌ 数据源
    • ✔️ ML 算法
  • ❌ ESMValTool + 工作流组件
  • sokort
    • ✔️ 完善功能
    • ❌ 加工流水线
  • ❌ 升级 ecFlow

工作

业务系统升级更新

第二季度的重点任务是完成 GRAPES TYM 3.1 版本升级。对于流程构建来说,新版本仅增加全球台风报文获取和云分析模块,其他变化隐藏在系统脚本之中。 整合脚本有利于快速完成业务系统流程构建任务。 6月份的特殊保障服务要求 MESO 从 36 小时延长到 72 小时,鉴于之前已优化过后处理系统流程,仅需要修改少量代码就可以实现对特定时次预报时长的修改。

原计划在第二季度完成的 GRAPES MESO 版本升级推迟到第三季度,TYM 代替 MESO 10KM 也将在第三季度完成。

随着系统逐渐增多,流程整合的需求变得越来越强。 如果时间充裕,可以考虑从后处理系统入手,研究如何能将业务系统的流程构建进行整合,共享相同的组件,简化 ecFlow 系统构建代码,为进一步整合业务系统构建进行前期探索。

数据工具

数据工具是第二季度的主要工作。为用户提供方便易用的数据处理工具是我最近两年的核心目标。

数据处理

更新 nwpc-oper/nwpc-data 库:

  • 添加附加变量描述表格,列出 ecCodes 无法识别 shortName 的变量,目标是支持检索 GRAPES 系列模式 GRIB 2 文件中的所有要素场
  • 支持将任意 GRIB key 作为检索条件
  • 添加数据操作:extract_point()extract_area()

变量描述的更多信息请参看文章:

工具库软件包必须根据用户反馈进行持续迭代,开发的数据处理功能必须能方便地用在 CMA-PI 上。 下一阶段需要开发更多的数据处理功能,在 CMA-PI 上进行详尽的测试,并编写说明文档。 另外,继续第一季度总结中的计划:完善对多种数据格式的支持,添加新的数据源。

MOML 实现

利用 nwpc-data 库开始尝试实现机器学习算法 MOML,目前已完成:

  • 数据预处理 (抽取要素,裁剪区域)
  • 数据集 (dataset 3,running time period)
  • 线性回归 (lr_3_r)
  • MOS (mos_3_r)

部分代码集成到 nwpc-data-tool 项目中。 这是我第一次按论文尝试实现的 ML 算法。 论文使用的机器学习方法本身不复杂(线性回归、随机森林),使用 scikit-learn 可以直接实现,但数据处理部分却花费大量时间。 在处理实际 GRAPES GFS 数据时才发现真实数据必须要考虑缺失的问题,好在论文中数据集没有时间标签,缺失数据的时次直接剔除即可。 编写代码时也发现 nwpc-data 库存在的一些问题。 只有动手实现真实的案例,才能发现工具库是否有用,也能为后续开发指明方向。

下一阶段计划继续实现 MOML 论文设计的其他实验方案,结合第二季度参加的由单位组织的机器学习技术培训班,尝试实现卷积神经网络版的 MOML 算法,进一步检验 nwpc-data 库的实际性能,并为该库持续添加适合 ML 算法的新功能。

CMADaaS 数据检索

nuwe-cmadaas-python 库增加更多检索接口,部分接口因权限问题无法测试。 详情请查看文章:

一种封装CMADaaS MUSIC Python接口的方法

绘图工具

以在业务系统应用为目标,对去年编写的业务系统 NCL 脚本绘图封装库 nwpc-oper/sokort 进行大幅度更新。 目前已在 GRAPES GFS、GRAPES MESO 3KM 两个系统中进行集成测试。 计划在第三季度 GRAPES GFS 更新时在后处理系统绘图任务中应用 sokort 版本,并逐步应用到 GRAPES MESO、GRAPES TYM 等系统的图形绘制任务中。

sokort 版本将 cp/ln 等环境配置操作隐藏在包中,任务脚本无需再关注 NCL 脚本运行的细节,而仅需执行 draw 命令,并给定需要的命令行参数:

python -m sokort draw \
  --config ${SOKORT_CONFIG_PATH} \
  --system ${SYSTEM_NAME} \
  --plot-type ${SOKORT_PLOT_TYPE} \
  --start-time ${start_time} \
  --forecast-time ${forecast_hour}h \
  --data-dir ${DATA_DIR} \
  --work-dir "."

其中部分参数含义如下:

  • SOKORT_CONFIG_PATH:配置文件路径
  • SYSTEM_NAME:系统名称,例如 grapes_gfs_gmf
  • SOKORT_PLOT_TYPE:图片类型,例如 mslp_sfc_fc_aea 表示海平面气压图
  • start_time:起报时次,例如 2021070600
  • forecast_hour:预报时效
  • DATA_DIR:绘制时次的 GRIB 2 文件路径

下一步计划增加对包括 GRAPES TYM 在内更多系统绘图脚本的支持,同时对 sokort 包进行封装,尝试能否在气象大数据云平台加工流水线中应用。

其他工作

消息平台

完成现代化专项验收工作。

nwpc-oper/nwpc-message-client 项目新增 log 命令,用于发送通知类消息,例如背景场资料使用情况。 已在 GRAPES TYM V3.1 版本中背景场制作模块中进行初步测试。 脚本中执行命令行程序

${NWPC_MESSAGE_CLIENT_BIN} log \
      --system grapes_tym \
      --start-time ${SMSDATE}$HH \
      --level info \
      --log-type bckg \
      --rabbitmq-server ${NWPC_MESSAGE_CLIENT_RABBITMQ_ADDRESS} \
      --broker-address ${NWPC_MESSAGE_CLIENT_BROKER_ADDRESSS} \
      --disable-send \
      -- \
      --forecast_time="$(echo ${TTT} | bc)h" \
      --source=ncep \
      --start_hour_offset=$1

生成消息如下所示(注:消息 type 字段有误,尚需修改):

{
  "app": "nwpc-message-client",
  "type": "production",
  "time": "2021-07-06T04:20:15.591234608Z",
  "data": {
    "system": "grapes_tym",
    "start_time": "2021-07-06T00:00:00Z",
    "time": "2021-07-06T04:20:15.591233833Z",
    "level": "info",
    "type": "bckg",
    "content": {
      "forecast_time": "6h",
      "source": "ncep",
      "start_hour_offset": "0"
    }
  }
}

下一步计划将 log 命令实装,形成面向通知类消息的完整处理链条,包括消息发送、接收、存储和展示,尝试将其集成到值班维护平台中。

思考

第二季度前期阅读了一些论文,包括:

论文阅读:气候模式代码可访问性调查

论文阅读:FV3GFS模式的Python封装

论文阅读:科学攻陷云平台

《论文阅读:科学大数据的云原生存储库》

同时也阅读了一些文章和技术文档,包括:

视界:推动数值预报进步的科技之人工智能和机器学习

视界:ECMWF在线-社区、协作和赋权

视界:ECMWF走向开放科学

视界:IFShub - 开展IFS试验的新方式

总结

第二季度最有代表性的工作就是在 6 月下旬我决定将实验性质 (玩具性质) 的 sokort 库逐步引入到业务系统中,并为此进行定制开发。 没有投入业务/科研实际应用的项目都无法体现价值。 无论后续评价机制有何变化,将工具库融入到业务系统流程中始终是最可靠的一种方式。 空有主导业务系统构建的宝藏,却不进行大胆尝试,简直就是在浪费这个将工作成果业务化的最好机会。 我应该逐渐转变开发工具库的指导思想,采用更积极主动 (激进) 的策略推进工具库的应用落地,争取将项目引入到单位工作流程中,在实践中持续迭代。

第二季度对运维的关注大幅度降低,没能尝试将业务系统 ecFlow 版本升级,没能完成对日志消息全套流程的构建,也没有在运维技术上进行探索。 我也开始怀疑自己专注数据处理方向而忽略运维技术研发是不是在本末倒置。 目前我在数值预报业务系统建设、维护方面仍缺乏具有核心竞争力的技术,第二季度末我也在思考是否应该将工作重点转到系统运维上。

业务系统构建流程 (R2O) 已成型多年,在系统数目逐渐增多、流程日趋复杂的现在,当前分散的系统建设模式显得越来越疲软。 中试平台就是一种有效的尝试,统一研发和业务运行的流程,有助于形成更高效更具有整合性的业务系统构建模式。 我的困惑在于是否需要在中试平台之外重新开发一套流程整合工具,新开发的工具能否实现研发/业务流程的统一。 这也是我即使在认为流程需要整合的情况下,也迟迟不愿切入该领域的原因。

工作流软件也是业务系统建设的一个核心技术。 计划第二季度在 ploto-esmvaltool 项目中尝试开发轻量级工作流组件,没有完成。 我在犹豫是否重启几年前搁置的简易工作流项目,是否能克服重重困难进行高难度项目开发。

第二季度从中段开始对于工作的态度有所转变,开始放松自我,尤其到 6 月份,没有利用空闲时间自主学习,博客也几乎没有更新。 我应该警惕这种状态,寻找工作与生活的平衡点,尽快进入学习提高的正循环中。 不过,也许这只是在内圈的道路上一路狂奔,我也不知道未来会怎样。

下一步计划

第三季度的核心任务:

  • 业务系统:完成业务系统建设任务,包括 GRAPES MESO 3KM 升级,GRAPES GFS v3.1 台风模块升级,GRAPES TYM 替代 GRAPES MESO 10KM
  • 科研项目:推进青年基金课题项目,研究分布式数据处理技术,总结业务系统中常见的数据处理任务,编写相应的并行版本,并比较效率。

技术开发工作包括:

  • 数据处理工具 nwpc-data
    • 数据类型:增加 GrADS,完善对业务系统生成的表格类观测数据的读取
    • 数据来源:结合 nuwe-cmdaas-python 项目增加对气象大数据云平台支持,更新对接 NWPC 数据平台的接口
    • 数据操作:参考 ESMValTool 增加更多数据操作
    • 应用示例:开发用于多文件操作的应用示例函数,比如抽取剖面图数据、抽取时间序列数据
    • ML:延续第二季度工作,继续开发 MOML 实现,尝试实现 CNN 版的 MOML
    • 文档:开始编写用户文档,为接口参数的各种功能提供详细说明
  • 应用绘图工具 sokort
    • 完成 sokort 在业务系统中的实际应用
    • 完成附带绘图脚本的完整 Docker 镜像封装
    • 尝试通过信息化工程项目将 sokort 用于加工流水线
  • 消息通知工具 overfor (nwpc-message)
    • 完成 log 类型消息的全流程处理,至少应用在 GRAPES TYM 系统中

其他相关工作:

  • 如果有时间,尝试重新开启工作流项目 takler,评估自行开发工作流工具的可行性

参考

2021年第一季度工作总结