摘要: 高性能计算(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)蕴含如下局部:

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

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

• OpenMPI:下层通信环境,兼顾通信库,编译,分布式启动工作的性能

上述三局部中,PBS和Maui对于用户来说是齐全通明的,用户只须要依照PBS提供的形式提交作业即可,不须要理解外部细节。而OpenMPI则须要用户进行相干理解,来编写可能并行计算的利用。

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

• 调用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流程:

该解决流程包含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并行运算来晋升计算速度,例如

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

后处理零碎

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

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

HPC on Volcano

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

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

将运行的容器分为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:

作业执行结束:

查看master pod的后果

通过上述执行后果能够看出,在作业执行完结后,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上运行形式。

作者:金喆

点击关注,第一工夫理解华为云陈腐技术~