2019年7月24日,阿里云峰会开发者大会在上海开启。在IT基础设施云化专场上,阿里云高性能计算总监何万青向开发者们分享了阿里云高性能计算技术产品的发展历程和生态模式,对阿里云高性能计算的核心性能、场景应用以及在加速计算、资源节约上做出的一系列系统优化做了精彩介绍。
何万青指出,当高性能计算上云之后,真正带来性能的是云计算资源的调配、安排怎么有效使用,阿里云E-HPC与SCC双剑合璧,云超算应用开发者需兼顾云计算弹性和神龙裸金属并行性能做双向性能优化。
以下为何万青现场分享全文实录:
何万青:今天的会议假设在座的都是高性能计算的编程者、使用者,我今天以使用者的角度,使大家看阿里云高性能计算2017年上线两年多来现在的一个技术和产品的情况。
E-HPC,整个弹性计算的专场,我们知道ECS主要讲弹性,弹性的根源就是虚拟化。现在在高性能计算行业,这几年阿里云带动以来有一种说法叫超算云,各大超算中心,第三方软件中心提供二次租赁,基石是超算云,不具备弹性,力度是一台主机,没有做虚拟化。云超算和超算云是两件事情,我们经常看到云计算出来XX公司,XX政府部门搞一个云,把数据中心的牌子揭下来改成云计算,XX云,在技术上来讲这是完全两码事情。
高性能计算,这个行业做了15、16年,之前实际上从05年开始做,原来在英特尔做高性能计算的优化,也做过天河1、天河2。中国每次两次的SCC,超级计算大会,每年评两次世界TOP500,这些技术的发展,超计算是所有技术的峰顶,会往下进行技术的扩散。特别在05年以后,基本上是用通用服务器,通过高速互联的网络,并行的系统连成超计算机。TOP500全部都是计算集群。
后来出现一个事件,大家叫做网格计算,最早是亚马逊,接着是微软,接下来是阿里云。高性能计算的算法,模式上云是有障碍的,这来自几个方面。高性能计算或者超算用户,第一是存量用户,不管是做有仓模拟,地震资料模拟,气象模拟,所有的资料是跟互联网公司、云公司的基础结构完全不一样,互联网公司或者云公司计算架构是出自大数据,包括阿里云刚开始做大数据的处理,是分步式计算,异步计算,每个节点上由当地的数据互联网上,当地完成计算,异步通信,高性能计算由于解方程,每个时间迭代上算完所有的节点,才能进行下一步,所以有几个核心要求:
第一,单个节点的性能非常高,高主频,多核,还有一点是有很大的心理障碍,就是说虚机是有损失的,所以不愿意用云。
第二,同步通信带来的对延迟的极致的要求。在阿里云用RDMA跟它同一个延迟数量级两个微妙之间完成点对点。另外一点就是,RDMA的网络对大量的互联网应用,会有大量普惠性,而高性能计算具有垂直和分多个行业,每个行业有头部应用,有汽车碰撞或者渲染。
第三,高吞吐并行软件系统。互联网上云公司做的最好的是数据的保护和稳定,弱点在与没有并行运动,没有办法做几十个GB的吞吐,国家气象级需要几十GB的吞吐。阿里云要做的就是近似裸金属的性能,但是具备云的弹性,才能叫云超算。二是网络,还要把并行软件系统做到盘古上去。
面对大计算,大家听过神龙,在神龙虚拟化出现之前,我们说的Znn的KPI都需要一部分的CPU拿来做High Performance。云公司之间的底层之间的差距在于,谁能把更多的水卖出去,你总要喝水,这是虚拟化的开销。我们做的神龙就是把High Performance通过软硬件的方式实现了。
一方面如果实现了HP High Performance之后,整个的输出是弹性的,可以连上VPC、云盘,连上阿里云所有的存储产品,IO网络。剩下的计算部分,刚刚讲到的整倍速输出,高性能计算最大的问题,一是需要裸金属的性能,二需要隔离性,这可以都做到。每一代的处理器的推出,像英特尔不会所有的新的feature马上虚拟化,没有办法通过完全虚拟化的方式得到feature。这一部分跟超算中心是一样的东西,提供顶级超算的配置,如果喜欢,就可以用8K的GPU再加上48核,我们会算成倍,这样就可以达到顶级超算的性能。云计算,当高性能计算上云之后,真正带来性能的是我们刚刚说的,云计算资源的调配、安排怎么有效的使用。
三年前的测试数据,全国的超算中心CPU使用率30%以下,没有办法做更小的切割。在计算过程中,伸缩是没有办法释放和扩展的。
在做高性能计算的时候有几种选择。一种是亚马逊把实例做出来,上云维出一个超算,这叫松耦合。还有微软起步晚,就干脆买来克雷机器用。阿里采用一种native cloud的模式。线下超算是这样子,计算节点,文件存储、图形节点、头节点。阿里云上百种instance用高速互联的racky而连在一起,形成网络之后,可以跟我其他的文件存储产品登录节点。所有的超算都是这样,立项、OEM应标,最后下来只有一套配置,没法再变了,只能拿应用对它优化。
另外一种是在云上提交,使用这份资源的时候,这一部分的机器是公共的。但是在你的VPC你是私有的,你不用的时候别人在用,这才是真正摊平成本最重要的事情。不能说我用别人不能用,那你就不要买便宜货,你就不能省钱。这一部分是专线连上公有云让你用,整个使用方式是一样的,怎么样部署集群,提交任务,我后面大概讲一下。
在阿里云上去做高性能计算,实际上它是在基础上做了一个PaaS平台,把所有的计算节点、登录节点、软件存储,通过软件站变成一个并行计算的环境和编程的环境。和超算中心很不一样的地方是第一个要买,按量付费,一般来讲大型的行业知道自己的工作的模式,他会按年包月。但是我们看到很多的基金用户使用安量付费,因为它的科研和任务是变动的,这个时候需要能够自动伸缩保证它每次用的是正好够用的,像每次买电一样。
还有就是在阿里云和公共云上都有一种竞价实例,这个适合搞科研的同学。因为不能保证每天算多少,是脑袋来灵感才运算,所以竞价实例正好跟高性能计算行业长期形成的东西,叫断点续算。大部分的预算,气象预算,他们的超算中心硬件故障率蛮高,算上几天突然间有一个节点坏了,不可以从头开始算的,就不预报了。其实隔一定的时间,隔两分钟再往下算,这个跟阿里云竞价实例在一起,这样成本基本上没有什么损失。其他的功能,大家会后可以看到材料。通过几个键的点击就可以在公共云上形成自己一套超算,最大的好处对于搞科研和工程人来讲,真的不需要学习怎么样构建集群等这一套东西。
我刚刚来的时候做了一个实力演示,发现我们只能用工作人员的,不能用自己的。在公共云平台上,通过硬件配置、软件配置、基础配置,最后形成类似你点开有一个拓扑,这是标准的拓扑,我单个节点,单个实力,两台加上三台计算节点,计算过程中可以变配,形成这样一个集群。还有一点,会把你在上面的文件导入导出,可以动作阿里云通过计算流数据流的方式在自己的集群上。我自己编程是两种模式,我这个脚本可以通过内部给弄上去,然后提交就可以了。
高性能计算里面,又不可或缺,又容易被忽视的是调度器。调度器在物理集群上发挥不了多少作用,对你来说它就是把一个job发出去,规定多少进程,然后排队。因为本身它的硬件没办法做伸缩或者细颗粒度的切片。在云上高性能计算,大家发现所有的好处都来自调度器,我们在上面调度,最常用的PBS、SLURM、SGE、OpenGrid、CUBE。我们可以在切片的力度上追踪每一个job排队有多少,现在有多少节点,有多少节点等待,通过资源编排和自动伸缩可以实现高密度的调度。我们有车厂的客户,上汽、吉利集团,吉利集团是最大用阿里云的集团,公共云,一万七千核,90%以上的利用率。上汽在扩容,90%以上的利用率已经用了一年多,靠的是底层的非常灵活的切片和调度。
在用云上做计算的时候,老师包括开发者会忘记一件事情,上传数据的时候,永远是保密的,是免费的。数据停留的时间和最后下拉还是有一点费用,这个是通过类似云盘的方式,把数据通过商户上OSS上门去,导入并行系统再做计算。好多老师算完以后,忘记往下拉,过一段时间想起还有数据在那挪用,他在那放了一个月,它肯定还在那,我们一般是保留的。现在的方式就是一方面数据是可以用私有云,因为可以建很多的集群,互相可以分享,也可以自己用。模式是这样的,可以用控制台。
后面讲很重要的技术,在高性能计算领域大部分的软件工程师其实是做性能优化和并行工作的,我做了十多年,我们发现很有意思的事情,针对一个应用,针对某一平台的优化只能用在自己机器。作为公共云,大量的用户跑同样特征的应用的时候,我们没有业务数据,不触碰客户的数据,但是CPU利用怎么样,我是可以侦测到的。我可以通过优化和搜集底层的行为,去优化系统配置应用。
简单来讲,像智能手机一样,你越用越聪明,其实集群也应该这样,阿里云通过机器学习优化什么时候做热迁移。在云上有不同的侦测工具,这些工具就是一个试拨器。试拨器在并行过程中,跟进程绑定,和进程起始和线程绑定,会找TOP的进程,会把所去选择的指标进行时间对齐。很有意思的是,跑一遍之后,随时可以调出数据进行解剖,验试程序,看到底能不能跑更快。它跟高性能计算的领域长期发展的一套优化的方法论是相关的。
高性能计算的优化是分层的,最上面的都是大尺度的,而且相对容易一点。优化到底层需要一些工具,每一层的优化,处理器发展到现在,英特尔处理器大概几年前有四百个以上的PMU测试指标。真正关心的是头部几个,这几个是工程师的知识储备。我们把这种基于工程师的技术产品化,它会一层一层的,一开始看集群,整个大盘上是不是均衡,进入节点级,然后做时间对齐,然后进入时间进程,到函数一级。这些我们会选TOP指标,这些分布在四个象限,所有的性能,单节点,多节点,在四个象限上面,该选哪些指标是真正见功夫的。如果拿这个看搜索引擎,该选的指标不一样。搜索引擎在8毫秒IPOS多大,这个叫顶级指标。所以形成在云上面一个应用有什么样的一个特征,完了之后通过它来知道你该选什么样的集群。
云上的超算,最大可以做的地方就是弹性伸缩。做高性能计算现在为止十多年来,圈子里有一个特点,都是性能优化的高手,每次讲完大家感觉就是这人很牛,但是他做的我学不来,优化高手提高三倍,好牛,但是没有用。原因是,它没有办法转化成产品或者知识。
在云上看似觉得没有门槛,但是真正给你带来性能和资源的是这个。我在进去的时候,任务提交是四个节点,接着提交四个节点,它会自动增加,这么简单的事情在线下是做不了的。我现在画的是节点,我可以做到VCPU。怎么做?弹性伸缩做成什么样,在十个节点,现在发八个节点工作上去,然后再两个四个节点上去,每两分钟,看头节点上放有调度器侦测,在计算节点侦测它的使用率,它有两个控制。我现在增加八个,我只要增加六个就可以了。甚至可以做到额外节点,总会有一些调度出问题,所以会增加一些水位,包括会有一个扩容比例,不希望每个进去都不用排队马上做到,扩40%。其实就是排排队,这些做法完全在云上全部自动。
你可以设置这种policy,比如说你是学生,我就这么点钱,我想算一个东西,我不在乎时间多长,我想起来就算算,那就买便宜的资源,但是我规定好多少个节点。有些老师让后天马上交论文,那就找云,因为找任何超算中心都要排队,每个上面的工作都不敢剔掉。缩容,如果老是检测,连续几个节点一直没有工作,我就把它放弃掉,这一部分就不用付钱了。我们很多的算法都是围绕着弹性伸缩来做的,这是云弹性计算产品的核心。
闲时计算,大量超算应用和开源都有Check-point的功能,国家气象局只用两家公司IBM和ICI。原因只有他们两个做Check-point。今天要预报24小时三公里,我要算8个小时,算到6个小时的时候,存储出问题了,如果重新算,新闻联播就播不了了。那怎么做呢?正好跟阿里云抢占式资源,我们现在很多的资源放在一个大池子里,你抢到以后,一个小时自动释放掉,这样搞下去,就很便宜,一折。每次放掉以后,马上抢到下一个,抢到下一个之后从上次计算的断点算,这是可以的。这是分子动力学GROMACS,设置每两分钟把计算状态存到BT里面去,把每次计算的结果放到一个文件里面,我们算的时候就会发现闲时计算的成本比常规计算低了不止一半。
大家可以看一个视频,现在生成它的集群了,我作为用户登进去,这是自动伸缩的模式定下来,我把作业提交上去,它是一个压缩的,上去之后展开。这是在分析它计算过程中,节点1被抢占释放,稍后扩容到节点2运行,我们可以看进程的方式,就是这个模式。第一个进程在算的过程中,一个小时被抢断,抢断之后,迅速抢到另外一个资源继续算。这个方式特别适合大的调研组或者学院,就用这个方式算。
高性能计算还有一个很重要的环节,基本上做科学和工程计算,很重要的一点有大量的钱处理网格。第二一定要有可视化,无论做流场、压力场等磁场,里面有一大类计算需要GPU或者远程桌面要求。现在由于背后的计算资源越来越大,石油公司会用几十台的渲染集群去做,然后逐层解释,解释之后改回再算。这个过程是完全可以上云,阿里云上除了做GPU加速计算,还有云图站。
我们怎么做呢?先去创建graph集群,这个集群和存储和计算节点输出绑定,之后可以调用渲染的APP,或者在直接在上面进行物理计算再输出,这都是可以的。使用也是一样,把它看成一种计算资源,它是拿来做可视化的,它要交互。最重要的问题是,这台机器和你的办公室连线的延迟,问题不在它有多强,而在延迟。一般来看,超过几十毫秒,就感觉到不爽。现在有很多的公共超算在延迟上,这是阿里云为什么在全世界,在中国建立这么多可用区,可用区建在哪里都是可以的,如果很在乎交互,延迟是很重要的。
刚刚看到在阿里云超算的时候,这个过程,首先按账户上传到OSS上。石油中心用闪电立方一下传过去,通过OSS下载在云上的并行文件系统,然后计算,可视化,这是一个流程,数据流和控制流的关系。在用的时候要转化思维,不是用旁边的机器,你在使用一个付费的资源。
阿里云过去是做IaaS为主,随着场景越来越复杂,高性能计算分成多个行业的场景,每个场景都不一样,有并行调度。就把PaaS做出来,基本上不碰SaaS。大量的应用本身是付费的,而且特别贵,我们是和底层资源调度,尤其弹性伸缩绑定再生一起,怎么把license能够用得更高效。像石油行业,一套license可以上千万,整个系统都是它的。阿里云把我们的调度和我们整个的PaaS能力输出给第三方合作伙伴,他们根据我们最终用户做出他们的业务系统,这个业务系统调动的都是高性能计算并行的公益软件。
作为开发者,你们看到的EHPC是什么样的?这是阿里云的高性能计算的生态模式,我讲的是这一部分。谢谢!
您也可以关注我们的官方微信公众号(ID:ctoutiao),给您更多好看的内容。