转角遇上Volcano,看HPC如何应用在气象行业
摘要:高性能计算(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.5km*2.5km*2.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-joblabels:# 根据业务需要设置作业类型"Volcano.sh/job-type": "MPI"
spec:# 设置最小需要的服务 (小于总replicas数)# 这里等于mpimaster和mpiworker的总数minAvailable: 3# 指定调度器为VolcanoschedulerName: Volcanoplugins:# 提供 ssh 免密认证ssh: []# 提供运行作业所需要的网络信息,hosts文件,headless service等svc: []# 如果有pod被 杀死,重启整个作业policies:- event: PodEvictedaction: RestartJobtasks:- replicas: 1name: mpimaster# 当 mpiexec 结束,认为整个mpi作业结束policies:- event: TaskCompletedaction: CompleteJobtemplate: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.1imagePullPolicy: IfNotPresentname: mpimasterports:- containerPort: 22name: mpijob-portworkingDir: /homeresources:requests:cpu: "100m"memory: "1024Mi"limits:cpu: "100m"memory: "1024Mi"restartPolicy: OnFailureimagePullSecrets:- name: default-secret- replicas: 2name: mpiworkertemplate:spec:containers:# worker容器中只需要启动sshd服务- command:- /bin/sh- -c- |mkdir -p /var/run/sshd; /usr/sbin/sshd -D;image: Volcanosh/example-mpi:0.0.1imagePullPolicy: IfNotPresentname: mpiworkerports:- containerPort: 22name: mpijob-portworkingDir: /homeresources:requests:cpu: "100m"memory: "2048Mi"limits:cpu: "100m"memory: "2048Mi"restartPolicy: OnFailureimagePullSecrets:
- 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上运行方式。
华为云社区作者|金喆
点击关注,第一时间了解华为云新鲜技术~
转角遇上Volcano,看HPC如何应用在气象行业相关推荐
- 一分钟看懂mysql_冬天发财树“最怕”它,遇上就烂根,一分钟看懂就能养好
冬天发财树"最怕"它,遇上就烂根,一分钟看懂就能养好 在平时养殖一些花花草草的时候,经常会遇到植物烂根黄叶的情况,有些花友把花卉盆栽买回家没有多久,植株已经出现了烂根.黄叶,最后剩 ...
- 推荐系统遇上深度学习,9篇阿里推荐论文汇总!
作者 | 石晓文 转载自小小挖掘机(ID: wAIsjwj) 业界常用的推荐系统主要分为两个阶段,召回阶段和精排阶段,当然有时候在最后还会接一些打散或者探索的规则,这点咱们就不考虑了. 前面九篇文章中 ...
- 华为平板电脑_当5G遇上平板电脑,华为MatePad Pro 5G带来了什么?
5G已经来临,科技产品向5G升级已是大势所趋,这更是检验实力的探索之路. 2月24日,华为在巴塞罗那在线发布了一系列新品,其中,华为面向全球推出的5G高端旗舰平板,同时也是全球首款公开发布的5G平板华 ...
- html实体编码遇上js代码
单双引号 在js代码中 在js中单.双引号引起来的是字符串,如果我们要在字符串中使用单.双引号,需要反斜杠进行转义 let str='user\'s name'; // or let str=&quo ...
- 当深度学习遇上异构并行计算
当深度学习遇上异构并行计算 近几年来,以深度神经网络(DNN)为代表的深度学习如火如荼,深度学习的研究领域从开始的图像识别(如imagenet比赛)到现在的自然语言处理,几乎有席卷一切机器学习研究领域 ...
- 华硕无线路由打印机服务器,享受DIY的快乐 篇四:当普通打印机遇上智能路由器——网络打印机配置教程(以华硕AC66U B1为例)...
享受DIY的快乐 篇四:当普通打印机遇上智能路由器--网络打印机配置教程(以华硕AC66U B1为例) 2020-07-15 15:27:48 21点赞 238收藏 41评论 创作立场声明:本文系作者 ...
- 当Bert遇上Keras:这可能是Bert最简单的打开姿势
作者丨苏剑林 研究方向丨NLP,神经网络 个人主页丨kexue.fm Bert 是什么,估计也不用笔者来诸多介绍了.虽然笔者不是很喜欢Bert,但不得不说,Bert 确实在 NLP 界引起了一阵轩然大 ...
- [当人工智能遇上安全] 7.基于机器学习的安全数据集总结
您或许知道,作者后续分享网络安全的文章会越来越少.但如果您想学习人工智能和安全结合的应用,您就有福利了,作者将重新打造一个<当人工智能遇上安全>系列博客,详细介绍人工智能与安全相关的论文. ...
- [当人工智能遇上安全] 1.人工智能真的安全吗?浙大团队外滩大会分享AI对抗样本技术
您或许知道,作者后续分享网络安全的文章会越来越少.但如果您想学习人工智能和安全结合的应用,您就有福利了,作者将重新打造一个<当人工智能遇上安全>系列博客,详细介绍人工智能与安全相关的论文. ...
最新文章
- Shell 开发在运维中的经验总结
- UA MATH566 统计理论7 另一个例子:二项检验
- nebula-gql语句之时间差值计算
- C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它...
- CCKS 2018 | 前沿技术讲习班
- OSPF——多区域概念及配置、ABR简介、ASBR简介、路由重分发
- OpenCV算子速查表(持续更新)
- 自学python考哪些证书-自学python找什么书?
- 从零开始学习区块链(1)
- 秩和比RSR法算法C语言,秩和比法(用秩和比法计算权重时怎样编秩?)
- kali系统添加开机启动项
- img loading=“lazy“ 是什么意思?
- python实现下载小说并保存在本地
- 【你不知道的】win10 “你的手机” 正确打开方式:无缝连接手机电脑
- STM32F1串口通信控制LED和MG90S
- 大数据技术怎么自学?大数据开发如何自学?
- 非常详细的讲解在浏览器中输入bilibili.com后执行的全部过程,可结合我前面说的TCP协议食用
- Solidity随机数发生器原理与实现
- 国内固定电话和传真的正则表达式
- 行车记录仪开发方案比较--转载
热门文章
- Bootstrap3 折叠插件的使用方法
- 安装Bootstrap3源码版本
- ros的package.xml从format1到format2的修改方法
- ROS笔记(2) Kinetic 的安装和配置
- mysql5.7.17主从_mysql5.7.17主从同步配置
- 万有引力的意思_万有引力和引力有什么不同?四种基本性质力中电磁力最多
- linux 虚拟机大量udp请求失败_利用PXE远程装机服务批量部署Linux
- 10.11.5 brew mysql_mac os10.11下安装MySQLdb
- linux汇编stdin,汇编:从标准输入中读取整数,将其递增并打印到标准输出
- 白盒测试方法_软件测试的种类:白盒测试和黑盒测试