摘要: 高性能计算(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 上运行形式。
作者:金喆
点击关注,第一工夫理解华为云陈腐技术~