HPC解决方案是微软产品历史长河中的一个砂砾,国内很少有人提及,因此老王准备把这个砂砾擦擦,为大家呈现出来


开始之前我们不妨先来看下HPC的概念,前面我们花了将近50篇左右的文章,讲了微软高可用性群集,除了高可用群集,微软事实上还有负载均衡群集和高性能群集技术,负载均衡技术无非是ARR,NLB,DNS轮询,这些大家都常用的技术,而微软的高性能群集技术,就连专门做微软itpro的人也很少知道,因此本文我们就来从一个入门的角度,争取让不懂HPC的微软ITpro可以看懂,也可以让懂HPC但不了解微软产品的人看懂。


首先我们先来看下高性能群集与其它几种群集的不同


高可用群集:群集所有节点,来维持一个应用的持续运作,如果当前应用所在节点失败,自动故障转移至其它节点

负载均衡群集:群集所有节点来平衡一个应用的访问请求,利用每个节点的响应,以提高应用效能,同时支持故障转移

分布式群集:群集所有节点来共同完成一件事,一件事可以被分散成若干小事由不同节点处理,最终汇总结果

高性能群集:群集所有节点来共同完成一件事,通常以计算为主,综合群集的性能来达到快速完成计算目的


分布式群集与高性能群集进一步探讨


这两种群集模型,某些程度上存在一定相似度,但某些程度又不太一样


例如,一个分布式群集的节点,可以是server,pc,hpc,可以是跨机房,跨地区,跨国,可以是windows,linux,unix,可以分布式计算里面再包括多个群集,多个节点,基本上分布式群集最大的一个特点,就是对提供计算的节点没有更多的要求,只要能够提供计算能力就行,是松耦合化的,不会和某一种OS,某一种硬件绑定


高性能群集在这一点上则与分布式群集不同,高性能群集强调的是高性能,因此,如果这个群集里面各个节点来自不同国家,肯定无法完成高性能的目的,因此,一个高性能群集的各个节点,肯定是通过高速网络很快的连接在一组的服务器,不可能是分散在不同国家的,同时高性能群集一般不会由PC,普通server参加,起码会由相对性能高一些的server,或专门为高性能计算设计的server来组成,一个高性能群集的节点通常是标准化的,或者定制化硬件。


分布式计算通常会把一个作业分成多个小作业,然后交由各个节点,高性能计算通常是并行作业


分布式计算更加适用于在计算寻找模式的东西,分析计算,相加计算

高性能计算群集更多的会被应用于数学,工业,科研领域等,需要在短时间内处理多维度的计算


高性能计算是否就是云计算?


从运作形态来讲,老王把云计算分为两个角度来看

对于最终用户,个人用户,或企业使用云计算的部门而言,云计算就是一种新的IT消费模型,它自助化,自动化,只要付钱就可以使用,部署快捷,弹性收费,不需要花费其它前置费用和时间

对于云提供商或企业提供云计算的部门来说,云计算就是一种新的IT管理模型,将原来分散的架构开始集中化,通过软件定义+资源池,就可以执行大部分存储,网络工作,同时使用云后可以做一些自动化的维护操作,减轻IT维护时间,另外云计算将成本管理,SLA引入,有助于IT部门进一步体现自身价值


因此大家可以看到从运作形态上来讲,云计算更加像是一种企业信息化的选择,企业选择云计算来辅助现有数据中心,提升资源申请效率


高性能计算与云计算有一点非常冲突的是,云计算主要是要求提供弹性,要快速部署,快速响应用户的请求,甚至要基于程序的性能做部署,因此后台会引入虚拟化,多租户等技术,高性能计算通常不会是虚拟化,都会是由实体的物理机承担,以获得最好的性能。


近些年来,也有些公司提出将高性能计算和云计算集合,主要还是公有云厂商提出的概念,可以从iaas或paas层对接本地高性能计算群集,将公有云作为高性能计算的一部分,但是一些高性能计算用户还是会对此持有怀疑态度,主要的计算还是会在本地跑,什么场景下适用于公有云呢,可能是要做一些模拟计算的时候,本地高性能群集排队已满,这时候可以临时把作业提交到公有云,最好是不产生数据,仅看结果,这类计算可以适用于公有云。


高性能群集名词与常见功能


高性能计算(Highperformance computing,缩写HPC)  最早我们提到高性能计算通常是指某台高性能主机,通过分片等技术将作业提交到这台主机进行计算,随着信息技术不断发展,高性能计算逐渐也面向企业,现在的的高性能计算通常是指某一群集中组织的几台计算机(作为单个计算资源操作)的计算系统和环境,更多的是通过高性能群集软件+服务器实现高性能计算效果


高性能计算服务器架构选择


SMP(Symmetrical Multi-Processing),是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构,SMP服务器的主要特征是共享,系统中所有资源(CPU、内存、I/O等)都是共享的。也正是由于这种特征,导致了SMP服务器的主要问题,那就是它的扩展能力非常有限。对于SMP服务器而言,每一个共享的环节都可能造成SMP服务器扩展时的瓶颈,而最受限制的则是内存。由于每个CPU必须通过相同的内存总线访问相同的内存资源,因此随着CPU数量的增加,内存访问冲突将迅速增加,最终会造成CPU资源的浪费,使 CPU性能的有效性大大降低


NUMA(Non-Uniform Memory Access),由于SMP在扩展能力上的限制,人们开始探究如何进行有效地扩展从而构建大型系统的技术,NUMA就是这种努力下的结果之一,利用NUMA技术,可以把几十个CPU(甚至上百个CPU)组合在一个服务器内,NUMA服务器的基本特征是具有多个CPU模块,每个CPU模块由多个CPU(如4个)组成,并且具有独立的本地内存、I/O槽口等。由于其节点之间可以通过互联模块(如称为Crossbar Switch)进行连接和信息交互,因此每个CPU可以访问整个系统的内存(这是NUMA系统与MPP系统的重要差别)。显然,访问本地内存的速度将远远高于访问远地内存(系统内其它节点的内存)的速度,但NUMA技术同样有一定缺陷,由于访问远地内存的延时远远超过本地内存,因此当CPU数量增加时,系统性能无法线性增加。如HP公司发布Superdome服务器时,曾公布了它与HP其它UNIX服务器的相对性能值,结果发现,64路CPU的Superdome (NUMA结构)的相对性能值是20,而8路N4000(共享的SMP结构)的相对性能值是6.3。从这个结果可以看到,8倍数量的CPU换来的只是3倍性能的提升。


MPP(Massive Parallel Processing) 由多个SMP服务器通过一定的节点互联网络进行连接,协同工作,完成相同的任务,从用户的角度来看是一个服务器系统。其基本特征是由多个SMP服务器(每个SMP服务器称节点)通过节点互联网络连接而成,每个节点只访问自己的本地资源(内存、存储等),是一种完全无共享(Share Nothing)结构,因而扩展能力最好,理论上其扩展无限制,目前的技术可实现512个节点互联,数千个CPU。目前业界对节点互联网络暂无标准,如 NCR的Bynet,IBM的SPSwitch,它们都采用了不同的内部实现机制。但节点互联网仅供MPP服务器内部使用,对用户而言是透明的。

在MPP系统中,每个SMP节点也可以运行自己的操作系统、数据库等。但和NUMA不同的是,它不存在异地内存访问的问题。换言之,每个节点内的CPU不能访问另一个节点的内存。节点之间的信息交互是通过节点互联网络实现的,这个过程一般称为数据重分配(Data Redistribution)。

但是MPP服务器需要一种复杂的机制来调度和平衡各个节点的负载和并行处理过程。目前一些基于MPP技术的服务器往往通过系统级软件(如数据库)来屏蔽这种复杂性。举例来说,NCR的Teradata就是基于MPP技术的一个关系数据库软件,基于此数据库来开发应用时,不管后台服务器由多少个节点组成,开发人员所面对的都是同一个数据库系统,而不需要考虑如何调度其中某几个节点的负载


通常情况下SMP和NUMA是过去人们实现高性能计算的选择,实现高性能计算的一个关键标准,是能够让作业程序在多个节点并行执行,以获得最快的计算结果,现在大家更多的是选择通过MPP架构或普通服务器组成的群集,以实现高性能计算,针对于并行,从原来单独的硬件层面,延伸到软件层面,通过并行程序和高性能群集系统的结合,以达到高性能计算。



高性能计算群集常见指标


GFLOPS 就是 Giga Floating-point Operations Per Second,即每秒10亿次的浮点运算数


一个 MFLOPS (megaFLOPS) 等于每秒1百万 (=10^6) 次的浮点运算

一个 GFLOPS (gigaFLOPS) 等于每秒10亿 (=10^9) 次的浮点运算

一个 TFLOPS (teraFLOPS) 等于每秒1万亿 (=10^12) 次的浮点运算

一个 PFLOPS (petaFLOPS) 等于每秒1千万亿 (=10^15) 次的浮点运算


Linpack理论峰值计算 = CPU主频 X CPU每个时钟周期执行浮点计算的次数 X 系统中CPU核心数 


是否支持GPU高性能计算,在浮点运算、并行计算等部分计算方面,GPU可以提供数十倍乃至于上百倍于CPU的性能


高性能计算常见角色


管理节点:负责整个高性能群集的监控,资源分组,资源调度,作业调度,授权控制,系统推送(通常会在头节点安装DHCP,WDS等PXE部署组件,当进行大规模部署的时候,直接pxe引导部署其它计算节点,或结合BMC实现唤醒部署)

计算节点:用于运行作业,这种类型的节点通常不能成为不同类型的节点(即更改角色)

用户访问节点:作为高性能群集对外的入口,用户登录到这个节点提交作业,通常会有Web,console,api,脚本等接口

存储节点:存储高性能群集产生的数据,或存储高性能群集需要的数据,通常会映射这个节点的NFS,SMB至其它计算节点上

数据库节点:高性能计算群集通常会有一套数据库系统,用于存放群集作业调度,报告,诊断等数据,通常会直接使用头节点,或部署远程数据库节点


整个架构中最关键的是管理节点,数据库节点,实际环境中通常会把高性能与高可用结合,针对于管理节点和数据库节点实现高可用。

如果是计算节点坏了,通常情况下管理节点会把它标记为失败,下次分发计算任务排除该节点,理想情况下计算节点应该是无状态的,坏了直接新加,计算所需数据来自存储节点。

用户访问节点,如果实现了门户访问,可以搭建多台,结合负载均衡群集实现高可用


高性能计算常见术语


作业:高性能群集最终会提供给用户门户,控制台,或接口,以供用户向高性能计算群集提供请求,作业就是你希望让高性能群集执行的计算任务,通常一个作业里面可以包含多个任务,可以设计作业里面不同任务之间的优先顺序与关联性

队列:成功提交的作业,会提交到HPC群集头节点,再由头节点根据调度器规则,调度到合适的资源分组执行作业,如果当前高性能群集所有资源正在使用,或者有优先级更高的计算正在进行,则新提交的作业将被排队进入队列,直到有计算资源释放

资源分组:通过管理节点可以针对于当前群集内所有的计算节点进行资源分组,将资源由服务器,转换为计算能力,转换后按照分组计算能力,对使用方进行交付,用户使用时可以选择,要将作业放到什么样计算能力的资源分组执行,如果该资源分组正忙,则用户作业也会进入队列。


MPI是什么


MPI并不是一种新的开发语言,它是一个定义了可以被C、C++和Fortran程序调用的函数库。这些函数库里面主要涉及的是两个进程之间通信的函数,采用分布式内存模型,MPI是一种消息传递编程模型,驻留在不同节点上的进程可以通过网络传递消息相互通信,实现进程之间的信息交换。


简单来说,MPI是一种可以用于不同节点进程之间传递消息的编程模型,透过MPI我们可以实现进程级别的跨节点通信,进而实现并行计算


一个MPI应用程序的执行如下

  1. MPI初始化

  2. 由管理节点将消息分发给计算节点并行执行

  3. 计算节点执行完成后经过通信将结果返回给应用程序


除了MPI,还有其它实现并行计算的方法,例如OpenMP,OpenMP通过在节点间共享变量,已达到并行计算效果,以线程作为并行计算粒度,采用共享内存模型


当我们要将作业提交到高性能群集时,虽然群集具备实现高性能计算的能力,但是如果我们提交的作业不是并行的,依然不能实现高性能计算效果,因此也需要考虑如何让作业并行执行。


通过上面的介绍老王简单为大家介绍了下高性能计算的一些术语,以及实际运作的形态,我并没有一味介绍高性能计算概念,而是通过对比,举例的方式使大家更便于理解,构建自己脑中的模型


下面我们将专注于微软对于HPC的解决方案,微软进入HPC领域大概是在2003的时候,那时微软第一次推出windows computer cluster server解决方案,进入高性能计算领域,整个解决方案当时有两部分 ,Windows Server 2003 Compute Cluster Edition和Microsoft Compute Cluster Pack,一个系统版本和一个组件包,事实上核心的高性能计算功能,例如资源分区,作业调度,都是在cluster pack中,Computer Cluster edition仅是一个经过优化的操作系统版本,到了2008时代也是如此,2008时代改叫HPC server和hpc pack。从2012开始,微软已经不再发行hpc server系统版本,hpc pack可以直接在标准版,数据中心版OS运行,最后发行computer cluster版本原因当时的OS还不能和硬件很好的感知,例如RDMA,ODX等功能,2012开始这些都已经完美的内嵌在Server版本中。


最新的hpc pack版本是 hpc pack 2016 ,通过hpc pack可以帮助我们配置hpc解决方案所需要的角色,提供管理hpc群集的工具


微软HPC解决方案的角色如下,以最新hpc 2016为例


头节点:负责整个高性能群集的监控,资源分组,资源调度,作业调度,系统推送(hpc pack将自动为头点安装dhcp,wds)

计算节点:用于运行作业,这种类型的节点通常不能成为不同类型的节点(即更改角色)

代理节点:Windows Communication Foundation(WCF)代理节点用于将WCF调用从面向服务的体系结构(SOA)客户端路由到在群集中的节点上运行的SOA服务,这种类型的节点可以在不重新部署的情况下将角色更改为计算节点

工作站节点和非托管服务器节点 :工作站节点和非托管服务器节点是组织中的计算机,它们也可以运行作业,但它们不是专用的群集资源。他们可以安排在特定时间运行工作,也可以按需提供。这种类型的节点不能更改角色

Microsoft Azure Paas节点: 如果您有Microsoft Azure订阅,则可以根据需要添加Azure节点,以便在需要时增加群集容量。与计算节点,工作站节点和非托管服务器节点一样,Azure节点也可以运行作业。添加Azure节点时,还可以在Azure部署中配置固定或可变数量的代理节点,以便实现本地头节点和Azure节点之间的通信。

Microsoft Azure IaaS节点:如果您拥有Microsoft Azure订阅,则可以根据需要添加Microsoft Azure IaaS节点,以便在需要时增加群集容量


hpc pack 2012 - 2016重要功能更新


1.HPC Pack 2016支持计算节点工作组部署

2.HPC Pack 2012 R2 Update 2支持Azure linux计算节点部署

3.HPC Pack 2012 R2 Update 3支持本地linux计算节点部署

4.HPC Pack 2012 R2 Update 3 支持Windows计算节点的GPU

5.HPC Pack 2012 R2 Update 3 中Linux节点的管理和调度体验类似于我们已经支持的Windows节点,可以看到Linux节点的热图,使用特定于Linux节点的cmdlet创建作业,监视作业,任务和节点状态等,Linux节点开始支持便利的工具clusrun


hpc pack头节点部署要求


操作系统:Windows Server 2016,Windows Server 2012 R2,头节点必须加入域

SQL Server:默认情况下hpc pack会直接在头节点本机安装一个sql express,并自动配置数据库,也可以使用远程数据库实例,支持数据库群集或alwayson

.net framework:要求4.6.1或更高版本,Windows Server 2016自带,Windows Server 2012 R2需单独安装,在HPC pack安装文件DotNetFramework目录有安装包,2012R2安装前还需按顺序安装KB2919442,KB2919355补丁

其它必备组件会由hpc pack自动安装


hpc pack 数据库列表


HPCManagement : 群集管理信息

HPCScheduler:作业调度

HPCReporting:群集报告

HPCDiagnostics:群集诊断

HPCMonitoring:群集监控数据


如需进行数据库优化请参考链接,适用于hpc pack 2012 2012R2 2016

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/hpc-server-2012-R2-and-2012/hh407109(v=ws.11)



微软HPC群集网络角色如下

企业网络企业组织网络,用于连接到企业内部基础架构服务器,如AD,并需要接入用户网络,用户会将作业通过该网络提交至头节点,并且在某些情况下连接到群集中的其他节点,除非专用网络和应用网络也连接群集节点,否则所有群集内管理和部署流量都将在企业网络中进行
专用网络承载节点间群集内通信的专用网络。如果不存在应用网络,则专用网络包含管理,部署和应用程序通信
应用网络
专用网络,最好具有高带宽和低延迟。此网络通常仅用于群集节点之间的并行消息传递接口(MPI)应用程序通信。


详细HPC网络拓扑规划请参考https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/hpc-server-2012-R2-and-2012/ff919486(v=ws.11)



实作环境介绍


08dc :10.0.0.2 255.0.0.0

hpc-headnode

企业网络10.0.0.9 255.0.0.0 

专用网络18.0.0.1 255.0.0.0


hpc pack 2016下载地址 https://www.microsoft.com/en-us/download/details.aspx?id=56360


下载完成后在头节点打开如下,点击新建安装或将新功能添加到现有安装 

2018-04-19_220342.png

选择安装类型,我们第一次安装选择 创建头节点,并创建新的HPC群集

2018-04-19_220947.png

如果针对头节点进行了高可用部署,这里可以选择高可用,我们这里只有一台,所以选择单头

2018-04-19_221006.png

评估安装规则

2018-04-19_221023.png

需要注意的是千万不要自作聪明提前安装WDS,否则这里会报错

2018-04-19_220753.png

选择数据库部署模型,默认hpc pack 2016安装的是sql server 2016 express,如果远程部署则至少SQL 2008R2标准版或企业版

远程部署SQL server参考 https://docs.microsoft.com/en-us/previous-versions/orphan-topics/ws.10/ee783551(v=ws.10)

2018-04-19_221038.png

证书这里,可以从导入设置中选择新建一个自签名证书

2018-04-19_221919.png

或者直接向AD申请一张允许导出密钥的计算机证书,点击浏览 hpc pack会识别到这张证书,这张证书被用做HPC pack各节点间通信安全,因此需导出一份带密钥的PFX,后期添加计算节点时需导入此证书

2018-04-19_222024.png

最后hpc pack会根据自带的离线安装包为头节点安装必备组件,这时候可以泡杯绿茶,等待所有选项变成绿勾

2018-04-19_222101.png

安装完成必备组件后,提示输入HPC群集连接串,这是HPC群集和高可用群集不一样的地方,高可用群集我们是给一个逻辑的名称,而HPC群集的对外连接始终是头节点

2018-04-19_230126.png

点击完成后会自动打开HPC Pack 2016群集管理器,在开始执行管理之前要完成部署任务

2018-04-19_230714.png

配置网络拓扑,这里老王选择企业和私有网络上的所有节点,考虑到节点中可能会有加入域节点,因此老王设计每个节点两个网络,企业网络,和专用的HPC网络,但最终对外只发布管理节点企业网络地址

2018-04-20_154448.png

配置完成如下,如果检测到网卡支持RDMA Direct这里会显示出来,建议为HPC网络启用RDMA,同时私有网络配置部分,会在管理节点创建一个DHCP作用域,用于部署计算机节点时使用,该作用域为HPC网段

2018-04-20_154623.png

设置安装节点账户,本地管理员权限即可

2018-04-20_162030.png

配置新节点命名规则,主要适用于通过HPC管理节点 批量部署时的计算节点名称

2018-04-20_162517.png

三个必备任务完成后即可看到HPC群集完整内容,像极了SystemCenter 2007 2012时的UI

2018-04-20_162747.png

接下来还有一些可选配置的内容

为HPC群集添加管理员权限,通常建议在AD里面创建一个安全组,这个安全组的用户可以对HPC群集具备资源管理,群集配置,报表查看,作业调度等权限

2018-04-20_163053.png

添加用户权限,被添加的用户,有权限通过客户端应用程序,cmd,api,powershell,webportal向hpc群集提交作业,通常也建议使用组进行管理

2018-04-20_163333.png

配置作业调度器策略

2018-04-20_163723.png

配置作业电子邮件通知,实现作业开始结束使用邮件通知作业所有者

2018-04-20_163742.png

创建不同级别的节点组

2018-04-20_164105.png

创建作业模板,作业模板会作为用户提交作业预约时显示

2018-04-20_164638.png

限制作业运行时间,如果某一类型作业执行有时限限制,可以通过此处进行配置

2018-04-20_164651.png

设置该作业模板优先级,凡是通过这个作业模板创建的作业,作业优先级默认及最大可调整范围

2018-04-20_164711.png

限制节点组,可以配置透过此模板创建的作业,仅允许在那些节点组运行

2018-04-20_164823.png

也可以针对于作业模板限定使用权限

2018-04-21_153258.png

为HPC群集开启Web门户,进入安装bin目录,输入以下命令即可,脚本会自动帮助我们安装IIS,配置HPC门户所需内容

2018-04-20_170632.png

如果配置无误,接下来可以通过访问头节点名称/hpcportal路径,打开HPC portal,打开网页前会需要身份验证,经过身份验证的HPC用户或管理员可以在portal上面在线提交作业,目前只有英文版

2018-04-21_122935.png


添加Windows计算节点


Windows计算节点系统要求


操作系统:Windows Server 2016,Windows Server 2012 R2,Windows Server 2012,Windows Server 2008 R2 SP1,支持域或工作组

.net framework:要求4.6.1或更高版本,Windows Server 2016自带,Windows Server 2012 R2需单独安装,在HPC pack安装文件DotNetFramework目录有安装包,2012R2安装前还需按顺序安装KB2919442,KB2919355补丁


拷贝头节点证书带密钥的pfx版本至计算节点

2018-04-21_143900.png

在windows计算节点上开启HPC pack安装向导,选择创建新计算节点加入现有HPC群集

2018-04-21_143943.png

加入群集处输入头节点名称,如果有多个头节点,可以按照逗号隔开输入

2018-04-21_144011.png

添加证书,并输入证书密码

2018-04-21_144047.png

向导自动为计算节点安装必备组件

2018-04-21_144105.png

安装完成后在头节点群集管理器可以看到节点,当前为未批准状态,在HPC群集中出于安全考虑,防止恶意添加的计算节点进来拷贝群集数据,每个被添加的计算节点,都必须经过管理员批准后方可加入群集


批准方法可以通过添加节点向导,或分配节点模板,节点模板的概念是指一组规范,凡是添加进来的节点,要选择一种节点模板套入规范,才可以正常加入HPC群集

2018-04-21_145018.png

选择节点模板后,HPC会自动根据我们的设置,为计算节点套入规范

2018-04-21_145109.png

当所有规范和设定都已经执行完毕,节点变成联机状态,这时候计算节点就可以正常运行作业

2018-04-21_145138.png

我们可以通过修改节点模板,配置当新加入节点时,需要执行那些操作

2018-04-21_145331.png

2018-04-21_145338.png


2018-04-21_145347.png


2018-04-21_145357.png

将计算节点添加到节点组

2018-04-21_150141.png


微软HPC群集调度模型


在微软HPC群集调度模型中分为作业和任务两个概念,其中作业主要是指对高性能群集资源的预约,通常包括申请的处理器数目,运行作业所需要的节点组,计划运行的时间


作业调度算法


在使用过程中我们可以通过API,CMD,Powershell,门户,控制台,对HPC群集提交作业,作业会被记录至HPCScheduler数据库,同时由头节点将作业进行调度,提交作业相当于预定一个资源窗口,在作业包括的时间内可以完成所需要的任务,HPC群集头节点负责维护一个作业队列,如果调度器发现现有资源可以满足队列中的第一个作业最小需求,则将其取出投入运行,否则调度器不做任何工作


作业调度算法例外:当所有正在运行的作业表明了计划运行时间,而当前的空余资源不够队列的第一个作业之最小需求时,可以从队列找出最靠前的一个作业进行调度(backfill),其必须满足

backfill作业也表明了计划运行时间

backfill作业可以置入当前的空余资源

根据当前正在运行的作业可以计算出何时才能有足够多的资源供队列中第一个作业运行,该时间距现在的距离必须大于backfill的计划运行时间


任务是描述需要完成的具体工作


HPC群集支持提交空作业,随后为作业附加任务,但任务必须依赖于作业运行

每个任务只能使用该作业所分配到的资源来完成自己的工作

虽然作业是对应单个程序,但有些程序需要跨多个节点并行运行,所需在任务定义也需要指明最小和最大的资源需求

任务可以明确表明自己需要各节点组,如果有权限也可以直接指定专属节点

任务需要提供程序在计算节点的启动地址,工作目录(工作目录通常会选择一台存储服务器映射至各计算节点相同网盘,用于存放程序文件),及启动该程序所需要的参数

任务定义中可以指定对程序运行过程中的标准输入,输入出和错误流进行重定向

同一作业中的任务之间可以定义依赖关系


任务调度算法


如果某个任务所依赖的任务都已经被执行完毕或没有任何依赖任务,则该任务进入无依赖状态(调度器内部状态)

每个作业中都维护一个任务队列,当出现资源空余时,调度器将选择最靠前的一个无依赖状态并能够被容纳在该资源中的任务进行调度



微软HPC群集功能支持


  1. 支持资源分组,默认采用节点组方式进行分组,也可以采用资源池方式进行资源分组

  2. 支持群集节点状态,性能,日志监控

  3. 支持作业调度,任务调度,支持手动控制任务或作业执行

  4. 支持工作组节点作为计算能力

  5. 支持通过API/CMD/Powershell/Console/portal等方式提交作业

  6. 支持执行MPI,MS-MPI是为Windows开发的消息传递接口(MPI)的Microsoft实现,它允许MPI应用程序在HPC群集上作为任务运行

  7. 采用作业模板作为高性能计算群集服务质量限定,可以在作业模板中限定通过此模板执行的作业优先级,能够使用的处理器,节点组,内存,以及能够利用此作业模板申请作业的权限,管理员可以通过创建不同的作业模板,结合节点组,用户组来对需要不同质量服务的用户进行分类

  8. 采用节点模板作为添加节点基线,通过配置节点模板,让各新添加的节点符合基线后加入高性能群集,也可以通过在节点模板中封装操作系统 驱动 软件,实现通过头节点PXE批量引导部署计算节点

  9. 和微软其它组件整合,利用Exchange服务器作为邮件通知,利用SCOM,OMS作为群集监控,利用***S/SSAS/PowerBI配置分析报表,头节点支持WSFC部署,数据库支持Always On或WSFC部署,计算节点支持Azure Paas或Iaas方式部署,授权可以使用AD或AzureAD,任务工作目录可以是映射到各结算节点的NFS/SMB网盘,背后可以来自于S2D,传统文件服务器群集或经过2016存储复制的UNC路径。


微软HPC群集可以提交的作业类型


MPI作业:可以选择新建作业新建单任务作业来创建MPI作业,对于运行MPI应用程序的任务,任务命令必须以mpiexec开头:因此,并行任务命令必须采用以下格式:mpiexec [mpi_options] <myapp.exe> [arguments],其中myapp.exe是要运行的应用程序的名称,对于并行任务,Windows HPC Server 2008开始包含基于阿贡国家实验室MPICH2标准的MPI软件包。微软的MPI实现(称为MS-MPI)包括启动程序mpiexec,每个节点的MPI服务以及用于开发用户应用程序的软件开发工具包(SDK)


参数扫描作业:

参数化扫描作业由同一应用程序的多个实例组成,通常是串行应用程序,并行运行,输入由输入文件提供,输出指向输出文件。输入和输出通常是一组索引文件(例如,input1,input2,input3 ...,output1,output2,output3 ...),它们设置为位于单个公用文件夹或单独的公用文件夹中。任务之间没有沟通或相互依存关系。这些任务可能并行也可能不会并行运行,具体取决于作业运行时群集上可用的资源。


任务流程作业


在任务流作业中,一组不同的任务按照规定的顺序运行,通常是因为一个任务取决于另一个任务的结果。作业可以包含许多任务,其中一些是参数化的,一些是串行的,还有一些是并行的。例如,您可以创建一个由MPI和参数化任务组成的任务流作业。您可以通过定义任务之间的依赖关系来确定运行任务的顺序。


下图说明了任务流作业:

2018-04-21_215144.png

任务1首先运行。请注意,只有任务2和3可以并行运行,因为两者都不依赖于另一个。任务4在任务2和3都完成后运行。



SOA工作作业

面向服务的体系结构(SOA)是构建分布式,松散耦合系统的一种方法。在SOA系统中,不同的计算功能被打包为称为服务的软件模块。服务可以分布在整个网络上并由其他应用程序访问。例如,如果应用程序执行重复的并行计算,则核心计算可以打包为服务并部署到群集。这使开发人员能够解决令人尴尬的并行问题,而无需重写低级代码并快速扩展应用程序。通过在多个服务主机(计算节点)之间分配核心计算,应用程序可以更快运行 最终用户在他们的计算机上运行应用程序,群集节点执行计算。


甲客户端应用程序提供了一种用于最终用户访问的一个或多个服务的功能的接口。开发人员可以创建群集SOA客户端应用程序,以提供对部署到Windows HPC群集的服务的访问。在后端,客户端应用程序向群集提交包含服务任务的作业,启动与代理节点的会话,并发送服务请求并接收响应(计算结果)。根据作业调度策略,头节点上的作业调度器将资源分配给服务作业。服务任务的一个实例在每个分配的资源上运行并加载SOA服务。作业调度程序尝试根据服务请求的数量调整资源分配。


如果客户端创建了持久会话,则代理使用MSMQ存储所有消息。客户端随时可以检索代理存储的回复,即使在有意或无意断开连接后


下图说明了SOA作业在微软HPC群集上的运行方式:

2018-04-21_215412.png


Microsoft Excel计算卸载


包含在HPC Pack的某些版本中的HPC Services for Excel支持许多用于将Excel计算卸载到HPC Pack群集的模型。适用于群集加速的工作簿包括可以并行运行的独立计算。许多复杂和长时间运行的工作簿都是迭代运行的 - 也就是说,它们在不同的输入数据集上多次执行单个计算。这些工作簿可能包含复杂的Microsoft Visual Basic for Applications(VBA)函数或计算密集型XLL加载项。HPC Services for Excel支持将工作簿卸载到群集,或将UDF卸载到群集。


通过使Excel 2010 UDF能够在Windows HPC群集中运行,Microsoft Excel 2010将UDF模型扩展到群集。当受支持的群集可用时,用户可以通过选择群集连接器并在“ Excel选项”对话框的“ 高级”选项中指定群集名称来指示Excel 2010使用该群集。在群集中,UDF的工作方式与传统UDF非常相似,只是计算由一台或多台服务器执行。关键的好处是并行化。如果工作簿包含对长时间运行的UDF的调用,则可以使用多个服务器同时评估函数。为了在群集上运行,UDF必须包含在群集安全的XLL文件中



微软HPC群集可以提交的任务类型


基本:运行串行应用程序或消息传递接口(MPI)应用程序的单个实例。MPI应用程序通常在多个核心上并发运行,并且可以跨越多个节点

参数扫描:通常在索引输入和输出文件中运行指定次数的命令(以开始,结束和增量值表示)。扫描的步骤可能并行也可能不同步,具体取决于任务运行时群集上可用的资源。

节点准备:即使在动态添加节点(增长策略)时,也会在每个计算节点分配给作业时运行命令或脚本。该节点准备任务在工作的任何其他任务前的节点上运行。

如果节点准备任务无法在节点上运行,那么该节点将不会添加到作业中。

节点释放:

即使在节点被动态删除(收缩策略)时,也可以在每个节点计算每个节点时运行命令或脚本,因为它是从作业中释放的。

节点发布任务的最长运行时间(以秒为单位)由具有NodeReleaseTaskTimeout群集参数的群集管理员定义。您无法覆盖此运行时间限制。默认情况下,超时设置为15秒。要查看此群集参数的值,可以运行以下命令(搜索字符串区分大小写):cluscfg listparams | find“NodeReleaseTaskTimeout”

节点发布任务在作业被取消时运行。强制取消作业时节点发布任务不运行。

如果作业有最大运行时间和节点发布任务,则作业计划程序将在作业的运行时间到期(作业运行时间减去节点发布任务运行时间)之前取消作业中的其他任务。这允许节点发布任务在分配的作业时间内运行。

服务:

在分配给作业的所有资源上运行命令或服务。将新资源添加到作业时,或者如果先前正在运行的实例退出并且运行的资源仍然分配给作业,则该命令的新实例会运行。服务任务将继续启动实例,直到作业被取消或停止,最大运行时间到期或达到最大实例数(子任务)为止。

通过面向服务的体系结构(SOA)客户端提交的任务作为服务任务运行。

您不能将基本任务或参数扫描任务添加到包含服务任务的作业


定义作业或任务后,可以将作业或任务规范导出到XML文件,下次可以直接从XML导入作业或任务


微软HPC群集作业及任务状态

(实际显示中文,使用英文解释名称更为准确)

Configuring:作业或任务在系统中,但尚未提交到队列中。

Submitted:作业或任务已经提交并且正在等待验证,然后才能排队

Validating:HPC作业计划程序服务正在验证作业或任务。在验证过程中,HPC作业计划程序服务确认权限,为作业所有者未指定的任何属性应用默认设置,并根据约束验证每个属性。默认设置和约束由作业模板定义。HPC作业计划程序服务还确认作业属性包含所有任务属性(例如,没有任务的运行时间的值大于作业的运行时间)。

在验证过程中,作业也可能会通过群集管理员定义的自定义提交筛选器应用程序。

如果作业通过验证,则会移至队列状态。如果作业未通过验证,则作业显示错误消息,作业将转至失败状态。

Queued:作业或任务已通过验证,正在等待安排并激活(运行),当正在运行的作业,基本任务或参数扫描子任务被HPC作业计划程序服务抢占时,它将移回队列状态(除非该任务不可重新运行,在这种情况下,它将标记为失败)。

Dispatching:此状态仅适用于任务。HPC作业计划程序服务已将资源分配给该任务,并正在联系分配的节点以开始运行该任务。当任务开始时,它将转到运行状态。

Running:作业或任务正在一个或多个节点上运行

Finishing:工作或任务已完成,工作或任务清理正在进行中

Finished:工作或任务已成功完成。

Failed:工作或任务已成功完成。作业或任务未能完成,停止运行或返回指示失败的退出代码(默认情况下为非零退出代码)。此外,正在运行的任务在以下情况下标记为失败:

  • 作业所有者或群集管理员取消该任务。

  • HPC作业计划程序服务取消了一项任务,因为它已超过其最大运行时间。

  • HPC作业计划程序服务抢占未标记为可重新运行的任务。

  • HPC作业计划程序服务抢先启动以每个资源为基础启动的子任务(节点准备,节点发布和服务子任务)。

如果某个作业或任务由于群集故障而无法启动,则该作业或任务会在标记为失败之前自动重试指定次数。

Canceling:工作或任务被取消,清理工作正在进行中

Canceled:作业已被作业所有者,群集管理员或HPC作业计划程序服务取消。例如,HPC作业计划程序服务可以取消作业,如果超过其运行时或作业被抢占。作业所有者或群集管理员在开始运行之前已取消该任务。如果正在运行的任务被取消,则该任务被标记为失败。



用户通过客户端提交作业


HPC pack 2016 客户端安装需求

操作系统:Windows Server 2016,Windows Server 2012 R2,Windows Server 2012,Windows Server 2008 R2 SP1,Windows 10,Windows 8.1,Windows 8,Windows 7 SP1,支持加入域客户端或工作组

.net framework:要求4.6.1或更高版本,Windows Server 2016,Windows 10 自带,其它操作系统需单独安装,在HPC pack安装文件DotNetFramework目录有安装包,win8,2012R2安装前还需按顺序安装KB2919442,KB2919355补丁,win7sp1,2008R2sp1不需要安装补丁


拷贝安装文件包至客户端,或放在网络路径,开启安装向导,选择仅安装客户端实用工具

2018-04-21_160741.png

安装完成后可以在客户端看到hpc powershell ,hpc 群集管理器, hpc job manager,点击job manager连接到头节点

2018-04-21_161342.png

打开作业管理界面,用户可以在这里将作业提交到高性能群集

权限判定以当前登录用户,或runas用户为准

经过老王测试,目前HPC pack的客户端如果希望连接到服务器需加入域才可以,客户端如果未加入域,打开job manager连接到头节点不会成功,如果实在不想每台作业客户端都加入域,可以考虑将一台Server作为网关节点,安装RDSH与HPC pack客户端,把这台机器上面的hpc pack console作为app发布到remoteapp或xenapp解决方案,或工作组客户端直接使用portal,cmd,powershell,api等方式提交作业

2018-04-21_163013.png

本文篇幅有限,老王这里仅做抛砖引玉,并不为大家进行各个作业的创建演示,感兴趣的朋友可以参考链接,自己动手创建作业和任务

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/hpc-server-2012-R2-and-2012/ff919653(v%3dws.11)



HPC群集管理器实用功能


批量选择节点,运行命令,按照节点输出结果

2018-04-21_222939.png


2018-04-21_223000.png

批量选择节点运行诊断,诊断包含SOA,MPI,Azure节点等自带测试项目

2018-04-21_223047.png

总结:通过本文老王为大家介绍了高性能计算概念,微软对于高性能计算的解决方案,产品的介绍,概念,群集创建,以及群集常用设置,一遍走下来看,老王认为微软的HPC群集虽然可能在业界并不是性能最好的,但是它也有它的优势,例如和自身产品整合密切,不需要安装多个功能实现HPC,只需要安装一个hpc pack即可,HPC该有的功能相对完备,如果不擅长linux命令的朋友,也可以尝试下使用微软GUI的方式构建HPC群集,希望可以为感兴趣的朋友带来收获,如果有问题欢迎与老王交流