4-HPC场景下Volcano批量调度能力实践
Posted 琦彦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4-HPC场景下Volcano批量调度能力实践相关的知识,希望对你有一定的参考价值。
4-HPC场景下Volcano批量调度能力实践
今天的分享主要包括4个部分:
-
什么是HPC
-
介绍典型的气象领域HPC应用WRF
-
Volcano如何支持传统的HPC作业
-
在Volcano上如何运行一个例子
什么是HPC
HPC是高性能计算(High Performance Computing,缩写HPC) 是指利用聚集起来的计算能力来处理标准工作站无法完成的数据密集型计算任务。一般来讲,HPC指的是一个完整的HPC集群。那么提到集群,我们应该清楚它通常不止一台机器,集群是将一组松散的计算机软件或硬件连接起来高度紧密地协作完成某些计算工作。
并行计算指许多指令可以同时进行的一种计算模式,再同时进行的前提下可以将计算的过程分解成各个小的部分,最后以并发的方式来解决问题。
高性能主要是强调性能,一般包括计算单元、内存、存储网络等一系列的硬件,对这些资源有很高的性能要求。所以高性能运算系统还会涉及到异构计算、并行文件系统、高速网络等等。
如果我们想在集群里运行一个并行计算作业的话,需要涉及到三部分内容:
- PBS:资源管理器,负责管理集群中所有节点的资源
- Maui:第三方任务调度器,支持资源预留,支持各种复杂的优先级策略,支持抢占机制等
- OpenMPI:上层通信环境,兼顾通信库,编译,分布式启动任务的功能
在这三部分中, PBS和Maui类似于一种平台管理软件,用户其实不需要了解这个平台管理软件的实践细节,只需要了解如何运用PBS把Maui作业提交上去就可以了。但是OpenMPI这个部分是需要用户自己去了解它的细节的,因为用户是需要根据MPI提供的库来编写自己的可执行程序,去实现并行计算。
MPI作业如何运行
MPI作业是如何运行的?我们以mpirun这条命令为例子来说明。
用户需要调用MPI库来编写自己的源代码。我们看到的这个例子,就是调用了MPI的库之后,输出了一条hello word。在这里用户就需要使用支持MPI的编译器,把源代码编译成一个MPI的可执行程序,编译好之后,其实用户还需要做的一件事情就是要将这个程序分发到各个机器上。分发之后,用户就可以直接调用 mpirun命令,把写好的并行计算程序跑起来。
什么是WRF
WRF( Weather Research and Forecasting Model ),是一种中尺度数值天气预报系统,设 计用于大气研究和业务预报应用,可以根据实际的大气条件或理想化的条件进行模拟。
WRF是天气研究和预报模型的简称,是一种中尺度数值天气预报系统,设计用于大气研究和业务预报应用,可以根据实际的大气条件或理想化的条件进行模拟。说的直白一点,就是可以进行天气预报或者灾害预报等,属于一种比较典型的HPC应用。介绍它的目的就是想通过这个,让大家能直观感受HTC的应用。
下面这个图简单列举了WRF的处理流程。我们需要注意的是,因为WRF里有很多高级模块,要实现不同的模拟或者预报,用到的模块也不一样。
黄色的椭圆形部分,是WRF编译好的工具,平行四边形里的就是程序执行时需要用到的配置文件。一个完整的WRF处理流程包括4个部分:外部数据源,前处理系统、核心模拟系统、后处理系统(数据的传递需要手工来完成)。
real.exe和wrf.exe
eal.exe和wrf.exe都支持MPI并行计算, 这两个就是核心模拟.
我们可以看到real.exe执行完之后,会生成两种类型的文件,这两种类型的文件最终都会被wrf.exe后面的进程用到,通过对这个数据进行模拟演算,最终生成一个结果。
简单列了一个Conus 2.5km 算例示意,让大家能直观的感受一下WRF运行完之后就生成的结果到底是什么样子?
Conus 2.5一个美国本土的气象数据,它的分辨率就是2.5千米,说的简单点就是它把地图上的这片区域都划成了一个2.5×2.5×2.5的小格子,每个格子里的气象信息被认为是一致的,然后在这种情况下进行推演。
HPC on Volcano
接下来介绍Volcano是如何支持这种传统的 HPC作业。刚刚我们提到了一个传统的 HPC系统会涉及到三部分的内容,在Volcano这个对应关系就发生了一些变化。
在资源管理器部分,从 PBS我们换成了我们的K8s,第三方调度器其实就是我们的Volcano了。
在这种情况下,其实Volcano不仅仅是起到了调度的作用。我们知道在K8s里,作业也好,应用也好,都是在容器里运行的,但是原生的MPI作业在容器里运行的话会有一些问题。
所以Volcano除了执行调度功能外,还会对遇到的问题做一些处理,使MPI作业能够顺利地在K8s环境里跑起来。而第三部分则还是用户需要自己来完成应用的编写。
在容器中运行MPI作业
在Volcano里为了运行一个MPI作业,我们把整体得容器划分成了两部分。一部分称之为Master容器,另一部分是Worker容器。Master容器可以简单理解为运行mpirun命令的容器,Worker容器是真正执行MPI进程容器。
Volcano如何支持MPI作业:
- Volcano job中支持定义多个pod模板
- 支持 Gang scheduling
- Master/Worker容器内部主机IP映射(Headless service)
- Master/Worker容器之间ssh免密登录
- 作业生命周期管理
MPI作业配置
如果我们想在环境里去执行一个MPI作业的话,需要做哪些配置?一般来讲我们定义一个Volcano的job类型就可以了。但在定义的时候有几个点需要注意一下:
- 在label标签里要加上作业的类型,只有这样Volcano才会把它当做一个MPI作业来进行调动;
- spec里有一个minAvailable值,这个值其实要小于我们后面master容器worker容器的总数;
- 在作业里一定要添加上两个plugins,一个是ssh,一个是svc;ssh提供了各个节点之间免密认证的功能,svc提供了作业运行时所需要的网络信息等;
- 配置作业的policies,当有pod被被杀掉的时候,会重启整个作业再次去运行;
Worker容器配置
因为只是一个Worker容器,所以我们这里只需要启动一个ssh服务就可以了,其他的操作都不需要进行,启动之后等待Master容器把作业提交过来就可以。
Master容器配置
Master容器里配的东西会稍微多一点。首先要配一个policies,其意义其是当Master进程结束的时候,就会认为整个作业已经结束了。其次启动命令与Worker有区别,它会获取所有 worker的节点列表。除此之外还启动了一个ssh服务直接运行 mpirun。
WRF作业配置
Master容器配置
如果我们想在Volcano上跑一个WRF作业的话,需要做哪些配置或准备工作?这里列举了作业提交时yaml文件里需要修改的内容:
①用户需要定义自己镜像文件,这个镜像文件里包括WRF完整的运行环境。
②要处理对应的气象数据,而这些数据尺寸占用磁盘空间比较多,所以一般会作为一个卷,挂载到容器里,在容器里直接用就好。注意这个地方挂载的数据一定要保证在每个开发节点上都能有,不然的话会出现问题。
③在运行的时候,WRF作业要求可执行程序和它的数据在同一个目录下,那么默认情况下,是可执行文件链接到我们目录里,气象模拟才能真正在容器里启动起来。
Worker容器配置
Worker配置就非常简单,只需要把ssh服务启动起来,镜像、挂载数据和我们Master配置保持一致就可以了。
HPC操作实践
• 在Volcano上运行MPI作业
• Fork Volcano主仓库(欢迎顺手点个star)
• 参考文档部署volcano
就非常简单,只需要把ssh服务启动起来,镜像、挂载数据和我们Master配置保持一致就可以了。
[外链图片转存中…(img-T3nv4Yem-1649323545132)]
HPC操作实践
• 在Volcano上运行MPI作业
• Fork Volcano主仓库(欢迎顺手点个star)
• 参考文档部署volcano
• 运行一个MPI作业,参考 https://github.com/volcano-sh/volcano/blob/master/example/kubecon-2019-china/mpi-sample/mpi-example.yaml,修改job name和namespace
以上是关于4-HPC场景下Volcano批量调度能力实践的主要内容,如果未能解决你的问题,请参考以下文章