写点什么

转角遇上 Volcano,看 HPC 如何应用在气象行业

发布于: 2021 年 01 月 27 日

摘要: 高性能计算(HPC)在各个领域都有广泛的应用。本文通过典型的 HPC 应用 WRF,介绍了 HPC 应用在 Kubernetes+Volcano 上运行方式。


Kubernetes 已经成为云原生应用编排、管理的事实标准,越来越多的应用选择向 K8S 迁移。HPC 作为传统的分布式计算模式,在很多领域都有着广泛的应用,很多用户都希望能将 HPC 应用迁移到容器中运行,通过 Kubernetes 强大的功能来进行作业管理。Volcano 作为 CNCF 首个面向批量计算的分布式调度系统,也支持 MPI 作业的调度,本文以传统的 HPC 应用 WRF 为例,探讨 Volcano 是如何支持 HPC 应用的。


HPC 简介


HPC 是 High Performance Computing(高性能计算)的缩写。平时提到的 HPC,一般指代高性能计算机群(HPCC),它将大量的计算机软件/硬件整合起来,将大的计算作业分解成一个个小部分,通过并行计算的方式加以解决。HPC 高性能计算在 CAE 仿真、动漫渲染、物理化学、石油勘探、生命科学、气象环境等领域有广泛的应用。


一般来说,高性能计算集群(HPCC)包含如下部分:


image


• PBS:Protable Batch System,资源管理器,负责管理集群中所有节点的资源。除了 PBS 意外,常用的资源管理系统还有 Slurm,LSF 等


• Maui:第三方任务调度器,支持资源预留,支持各种复杂的优先级策略,支持抢占机制等。资源管理器中内置了默认的任务调取器,但功能往往比较简单


• OpenMPI:上层通信环境,兼顾通信库,编译,分布式启动任务的功能


上述三部分中,PBS 和 Maui 对于用户来说是完全透明的,用户只需要按照 PBS 提供的方式提交作业即可,不需要了解内部细节。而 OpenMPI 则需要用户进行相关了解,来编写能够并行计算的应用。


下面以 mpirun -np 4 ./mpi_hello_world 为例介绍 mpi 作业是如何运行的:


image


• 调用 openmpi 或者其他 mpi 的库来编写源代码,例子里就是输出 hello world 字符串了


• 使用支持 MPI 的编译器来编译出可执行程序 mpi_hello_world


• 将 mpi_hello_world 分发到各个节点,也可以通过共享文件系统来实现对 mpi_hello_world 的访问


• 运行 mpirun 来并行执行 mpi_hello_world


WRF 简介


WRF 是 Weather Research and Forecasting Model(天气研究和预报模型)的简称,是一种比较常见的 HPC 应用。WRF 是一种中尺度数值天气预报系统,设计用于大气研究和业务预报应用,可以根据实际的大气条件或理想化的条件进行模拟。


由于 WRF 包含多个模块,因此处理流程可能不尽相同,这里仅以 WPS 和 WRF 这两个模块为例介绍一下完整的 WRF 流程:


image


该处理流程包括 4 部分:


• 外部数据源


• 前处理系统(WPS)


• 核心模拟系统(WRF)


• 后处理系统


外部数据源


包含静态地理数据,网络数据等。静态地理数据可以理解为某区域内的地理信息,例如山川,河流,湖泊,森林等等。网络数据是某区域内的气象环境数据,例如气温,风速风向,空气湿度,降雨量等等。


前处理系统(WPS,WRF Pre-processing System)


前处理系统用于载入地理和气象数据,对气象数据进行插值,为 WRF 提供输入数据。该部分包含 3 个程序:


• geogrid.exe:定义模型投影、区域范围,嵌套关系,对地表参数进行插值,处理地形资料和网格数据


• ungrib.exe:从 grib 数据中提取所需要的气象参数


• metgrid.exe:将气象参数插值到模拟区域


经过这 3 个程序处理后,生成可以用来进行气象模拟的数据。这 3 个处理程序目前不支持 mpi 并行运算。


核心模拟系统(WRF)


核心模拟系统对前处理系统生成的气象信息进行模拟和预报,是 WRF 的核心模块。该部分包含 2 个程序:


• real.exe:初始化实际气象数据


• wrf.exe:模拟及预报结果


real.exe 和 wrf.exe 可以通过 mpi 并行运算来提升计算速度,例如


image


上图中 wrfinput_d0X 和 wrfbdy_d0X 为 real.exe 的运算结果,wrf.exe 以该结果为输入进行模拟演算,生成最终的气象模拟结果 wrfout_dxx_yyyy-mm-dd_hh:mm:ss,并由后处理系统进行验证展示。


后处理系统


后处理系统用来验证和显示核心模拟系统的计算结果。主要由各种第三方图像和验证工具组成。下图展示了 Conus 2.5km 算例中各个地区相对湿度的模拟预报结果:


image


Conus 2.5km 是指美国本土气象数据,分辨率为 2.5km(将整个区域分成一个个 2.5km2.5km2.5km 的方格,每个方格中的气象信息被认为是完全一致的)。


HPC on Volcano


image


上面介绍了一个 HPCC 包括资源管理器,调度器和 mpi 并行计算库三部分,其中资源管理器由 Kubernetes 负责,调度器由 Volcano 负责。


在 Kubernetes+Volcano 环境中运行 HPC 应用,本质上就是在容器中运行 HPC 作业,示意图如下:


image


将运行的容器分为 Master 容器和 Worker 容器两种。Master 容器负责启动 mpirun/mpiexec 命令,Worker 容器负责运行真正的计算作业。


因此 Volcano 为了支持 MPI 作业运行,添加了如下功能:


• Volcano job 支持定义多个 pod 模板,能够同时定义 master pod 和 worker pod


• 支持 Gang scheduling,保证作业中所有的 pod 能够同时启动


• Master/Worker pod 内部主机 IP 映射


• Master/Workerpod 之间 ssh 免密登录


• 作业生命周期管理


Volcano mpi 作业配置 mpi_sample.yaml:


apiVersion: batch.Volcano.sh/v1alpha1


kind: Job


metadata:


name: mpi-job


labels:


# 根据业务需要设置作业类型


"Volcano.sh/job-type": "MPI"


spec:


# 设置最小需要的服务 (小于总 replicas 数)


# 这里等于 mpimaster 和 mpiworker 的总数


minAvailable: 3


# 指定调度器为 Volcano


schedulerName: Volcano


plugins:


# 提供 ssh 免密认证


ssh: []


# 提供运行作业所需要的网络信息,hosts 文件,headless service 等


svc: []


# 如果有 pod 被 杀死,重启整个作业


policies:


- event: PodEvicted


action: RestartJob


tasks:


- replicas: 1


name: mpimaster


# 当 mpiexec 结束,认为整个 mpi 作业结束


policies:


- event: TaskCompleted


action: CompleteJob


template:


spec:


# Volcano 的信息会统一放到 /etc/Volcano 目录下


containers:


# master 容器中


# 1. 启动 sshd 服务


# 2. 通过/etc/Volcano/mpiworker.host 获取 mpiworker 容器列表


# 3. 运行 mpirun/mpiexec


- command:


- /bin/sh


- -c


- |


MPI_HOST=`cat /etc/Volcano/mpiworker.host | tr "\n" ","`;


mkdir -p /var/run/sshd; /usr/sbin/sshd;


mpiexec --allow-run-as-root --host ${MPI_HOST} -np 2 mpi_hello_world;


image: Volcanosh/example-mpi:0.0.1


imagePullPolicy: IfNotPresent


name: mpimaster


ports:


- containerPort: 22


name: mpijob-port


workingDir: /home


resources:


requests:


cpu: "100m"


memory: "1024Mi"


limits:


cpu: "100m"


memory: "1024Mi"


restartPolicy: OnFailure


imagePullSecrets:


- name: default-secret


- replicas: 2


name: mpiworker


template:


spec:


containers:


# worker 容器中只需要启动 sshd 服务


- command:


- /bin/sh


- -c


- |


mkdir -p /var/run/sshd; /usr/sbin/sshd -D;


image: Volcanosh/example-mpi:0.0.1


imagePullPolicy: IfNotPresent


name: mpiworker


ports:


- containerPort: 22


name: mpijob-port


workingDir: /home


resources:


requests:


cpu: "100m"


memory: "2048Mi"


limits:


cpu: "100m"


memory: "2048Mi"


restartPolicy: OnFailure


imagePullSecrets:


- name: default-secret


提交 mpi Volcano job:


image


作业执行完毕:


image


查看 master pod 的结果


image


通过上述执行结果可以看出,在作业执行结束后,Volcano 只清理 worker pod,保留 master pod,这样用户 kubectl 命令获取执行结果。


此外,由于网络构建可能会出现延迟,在作业运行开始时,master pod 会出现连接 worker pod 失败的情况。对于这种情况,Volcano 会自动重启 master pod,保证作业能够正确运行。


通过以上示例我们可以看出,Volcano 想要运行 WRF 作业的话,理论上需要将其中的 mpi_hello_world 替换为 real.exe/wrf.exe,此外,用户还需要进行如下准备:


• 自建 docker images,包含完整的 WRF 运行环境


• 将计算所需要的数据(原生数据或者中间结果数据)挂载到相应的容器中


这样就能在 Kubernetes+Volcano 上运行气象模拟作业了。


总结


高性能计算(HPC)在各个领域都有广泛的应用。本文通过典型的 HPC 应用 WRF,介绍了 HPC 应用在 Kubernetes+Volcano 上运行方式。


作者:金喆


点击关注,第一时间了解华为云新鲜技术~


发布于: 2021 年 01 月 27 日阅读数: 19
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
转角遇上Volcano,看HPC如何应用在气象行业