全国咨询热线:021-54902525
您的当前位置: 首页 > 产品展示 > 无线测距

无线测距

FCS 文章解读:高性能计算系统软件弹性技术综述

咨询热线:021-54902525

时间: 2024-04-27 08:28:15    来源: 雷竞技登录

  • 产品详情

  近年来,随着高性能计算系统规模的逐步扩大,其可靠性不断下降,因此,系统弹性被认为是大规模高性能计算系统面临的关键挑战之一,人们提出了各种技术和系统来确保并行程序的正确执行和完成。本文提供了对现有软件弹性方法的全面调查。首先,对软件弹性办法来进行了分类;然后介绍了主要的方法和技术,包括检查点、复制、软错误恢复、基于算法的容错、故障检测和预测。此外,还讨论了系统规模和异构架构带来的挑战。

  检查点和复制都能处理几乎所有的故障停止故障,同时保持对应用程序的透明性。但是,复制方法需要消耗至少2倍的资源,因此对于大型系统和应用程序不是很着迷。此外,检查点可以与其他弹性方法一起使用来处理软错误。由于上述原因,检查点目前是在高性能计算系统中使用最广泛的弹性方法。然而,检查点的可扩展性对于大量的进程来说并不令人满意。基于算法的容错(ABFT)是最轻量级的方法,但不幸的是,它依赖于算法,这在某种程度上预示着必须针对不一样的算法提出不同的方案。软误差方法是专门研究软误差的方法,它们大多关注于怎么检验测试软错误,并依赖于检查点来恢复错误。类似地,故障检测和预测充当警报或触发器,一旦检测到或预测到故障,就可以执行相应的故障恢复或主动操作。

  检查点,或称检查点/重启(CR),记录应用程序和系统在执行过程中的快照。在失败的情况下,它使用先前保存的检查点文件恢复应用程序执行。

  检查点能定期触发,也可以由特定事件触发,例如应用程序中的函数调用或异常。CR对需要长时间运行以避免从头重新再启动的程序很重要。检查点概念能应用于所有级别:系统级检查点、用户级检查点和应用程序级检查点。系统级检查点由内核实现。它使用起来更便捷,并为所有应用程序提供弹性。用户级检查点通常在并行库中实现,用户级弹性不会修改内核,因此,更容易迁移到其他HPC系统。应用程序级检查点意味着用户要在其应用程序中添加检查点和重新再启动功能,通常,这在某种程度上预示着大量的工程,但它也允许用户为他们的应用程序设计更有效的弹性检查点机制,它们的对比如表2所示。

  进程对位于进程级别,进程对由两种类型的进程组成:主进程和备份进程,其中备份进程是主进程的克隆。每个进程对的进程在不同的处理器上同时运行,主进程还一定要通过MPI向备份进程传输消息。通过这一种方式,当主进程崩溃时,备份进程能够继续工作,这使得在主进程失败的情况下应用程序仍能够继续执行。原则上,进程对消耗的资源数量是未复制执行的两倍。流程对的输出通常依赖于主流程,有时,虽然备份过程是正确的,但主输出是错误的,结果仍然是错误的。因此,在某些领域,流程对可以与检查点结合使用,当主进程的输出和备份的输出不同时,可以回滚到最近的检查点并重新启动。

  复制大范围的使用在MPI应用程序中的弹性工作。rMPI透明地为MPI应用程序提供复制,rMPI库入到应用程序和在链接时间使用MPI分析接口的MPI库之间。双冗余情况下,程序在2n个计算节点上启动,n为原始执行规模。应用程序能看到秩0到秩n-1, rMPI使用剩余的节点进行冗余,每个冗余节点都由rMPI维护,并重复其活动伙伴的工作。为了尽最大可能避免非确定性MPI函数(例如,接收带有通配符的操作,对传入消息进行探测操作)产生的发散结果,rMPI库在冗余节点之间协调和复制消息,并强制活动节点及其镜像为MPI函数返回相同的值给应用程序。但是,同步协议和附加消息会导致很严重的开销。

  MMPI为MPI应用程序提出了一个冗余执行协议集,它具有不一样的复制分区和比较方案,MMPI依赖于繁琐的源代码修改来实现这些冗余协议。冗余的最大缺点是它消耗更多的资源,效率较低。HPC复制的热点问题是如何减少复制量,Hussain通过实验证明,在不同节点故障率下,部分复制通常比完全复制产生更高的性能。Elliott等人将部分复制与检查点相结合,通过MPI应用程序中的故障注入证明了适当的冗余度和检查点频率能获得最大的性能,在他们的实验中,2倍的冗余效果很好。George基于故障预测自适应地动态地改变复制过程集的数量,最大限度地减少能源消耗。但是,部分复制方案应该要依据HPC应用定制,最优部分复制是一个NP难题,所以部分复制不能得到很好的通用性。

  软错误又称故障继续错误,是一种不同于故障停止错误的故障,也就是说,系统和应用程序在出现软错误时不会崩溃或停止运行,相反,它们会产生错误的输出。软错误通常是由于辐射或硬件错误导致内存或处理器的位翻转,由于采用了制造小型化、硅的老化和动态电源管理周期,比特翻转的速率能够获得显著的提高。根据程序中的错误行为,可将软错误分为控制流错误(CFE)和静默数据损坏(SDC)两种类型。

  CFEs是由硬件组件(如程序计数器、地址电路或存储器子系统)中发生的瞬态和永久性故障引起的,这些故障将影响处理器中指令执行顺序的正确性和可预测性。

  控制流检查(CFC)是一种监视程序执行流的关键方法,它将程序划分为基本块,并为每个块分配预先计算的签名。然后,在程序执行期间获取运行时签名,并比较这两个签名,以确定是不是发生了非法跳转。这些方案用于通过种种方法生成基本块的签名,例如,在编译时为给定块代码的每个基本块或计算生成唯一的全局静态签名,然后在程序执行期间重新计算运行时签名。假设在程序执行期间发生了一个CFE,导致在基本块内非法跳转,在这种情况下,执行的指令序列与编译时获得的指令序列不同,故在预先计算的和重新计算的签名之间出现分歧。因此,能够最终靠比较签名在基本块的末尾检测到该CFE,CFC能够最终靠基于硬件或基于软件的方法实现。由于基于硬件的方法超出了本文调查的范围,本文只介绍了基于软件的方法。

  基于软件的错误检测技术采用了编码签名(SWTES),假设程序被分成几个包含基本块和分区块的块,它定义并考虑了程序执行期间这些块之间的七种CFEs类型,该技术基于每个块的签名分配和这些块末尾的签名比较。它包括两个主要部分,即标记算法和签名生成步骤。块签名自检(BSSC)方法为每个基本块分配一个签名,并在块末尾检查控制流,它在块的开始处调用子例程,用于将其第一条指令的地址作为签名推入堆栈顶部或将其存储在静态变量中。在块的末尾调用另一个子例程,以比较嵌入的签名和条目例程保留的签名,通过断言来控制流错误检测(CEDA)方法允许在编译时自动将额外的指令嵌入到程序中,以一直更新运行时签名,该签名将与预分配的签名作比较。由于计算签名的方法不一样,CEDA插入的指令更少,开销更小,但效率更高。

  在检测到CFE后,应该将控制权转移回发生非法分支的块,但是,仅仅纠正CFE是不够的,因为CFE有几率会使数据损坏,导致程序失败。CFEs的自动校正(ACCE)将程序代码分成具有一个或多个基本块的函数,ACCE使用CEDA检测CFEs,自动执行称为错误处理程序的预定义函数,并将控制转移到该函数,然后转移到发生非法跳转的基本块。带复制的控制流错误自动校正(ACCED)是ACCE的扩展,用于检验测试的数据损坏并通过复制指令来纠正它。但是,并不是所有的数据损坏都可以检测到,而且这种方法会导致严重的性能开销(超过100%)。

  虽然已有一些CFEs自动检验测试与校正的研究,但由于CFEs校正的复杂性和开销,使得其不适合大规模的HPC系统。可行的解决方案是将CFE检测的新方法与检查点相结合,将检查点视为CFEs纠正方法,可以在检测到CFEs后使其回滚到前一个检查点。

  在静默数据损坏(SDC)中,位翻转发生在应用程序数据(例如矩阵)中,不会导致异常行为,但会产生错误结果。因此,SDC比CFE更难检测。

  给定SDC的定义为其不能在低级硬件或软件堆栈中被检测到,检测SDC的一种方法是异常值检测,这种方法的思想是:高级软件能够最终靠利用数据动态的属性来发现异常值,这些异常值表明数据损坏的出现。Gomez L B等人提出了一种基于数据监测的SDC检测的新方法,通过学习其数据集的正常动态,快速定位异常。Berrocal E等人利用历史数据建立数据变化趋势模型,预测下一次迭代(当前迭代点的温度或空间相邻点)数据点的值,并将预测值与程序执行得到的实际值作比较。因此,如果两个值之间的差值超过给定的阈值,就能确定SDC。

  另一种方法结合了复制机制和消息验证来检测SDC。它们大多是在MPI层实现的,这种方法假定进程中的任何数据损坏都会导致被污染的消息,这些消息会被传输到其他进程。因此,能够最终靠比较来自不同复制的等效秩的消息来检测数据损坏。典型的作品有rMPI、MMPI、VoplexMPI和MR-MPI。

  Berrocal提出了一种部分复制机制,以减少SDC检测中完全复制的开销,它由两种自适应算法组成。在其中一种情况下,要复制的进程数量在整个执行过程中是不变的。在另一种情况下,这一个数字可以动态变化。为了更好的提高总体召回率,同时减少时间和空间开销,应该根据期望复制的流程的数据行为仔细选择流程。

  第三种方法跟踪对内存页的访问,并使用页的哈希值来检测这些页中的数据损坏,在某一些程度上,这种方法是一种软件实现的页级内存检查机制。典型的作品包括LIBSDC、FlipSphere和Mini-ckpt。

  LIBSDC在系统级保护内存中的SDC,它拦截对内存页的访问操作,并在这些页处于保护范围内时触发信号。信号的处理程序负责计算内存页的散列值,然后将该值与最后一个已知的正确值作比较,以查看是不是出现发散。这种方法只适用于DRAM,而不适用于其他组件(如CPU、寄存器和逻辑设备)。此外,缺乏相应的机制来判断发散是由SDC还是由计算操作引起的。

  基于LIBSDC, FlipSphere利用MMU跟踪页面访问,并在访问新页面时删除最近最少使用的页面权限,以提供基于软件的级别保护。

  Mini-ckpt认为,如果SDC发生在操作系统占用的内存中,并导致内核panic,则应用程序没办法继续运行。为了尽最大可能避免回滚、恢复和计算损失,小型二进制文件将正在运行的应用程序的内核状态信息记录到非易失性内存中。之后,重新再启动内核并恢复目标应用程序的执行状态。这种方法需要修改操作系统内核,它引入的开销依赖于内核panic后错误处理程序的过程。

  这里,本文比较了SDC挑战中的检查点/重启、复制和ABFT,如表3所示,ABFT将在下一节中介绍。

  考虑到对于大多数科学应用程序具有通用性,其执行过程是对有限数量的底层算法的多次调用,基于算法的容错(ABFT)是一种针对特定算法的弹性方法,它是基于输入数据和特定算法的校验和之间的关系来检测和纠正错误。如果校验和不正确,则说明发生了错误。第一种ABFT方案使用行-列校验和来检测和纠正多处理器系统上的乘法、转置和LU分解等矩阵运算中的错误。与检查点和复制相比,ABFT可以以最低的成本确保弹性。不幸的是,它是特定于算法的,这需要额外的努力来为不同的算法设计不同的方案。与检查点和复制相比,ABFT的开销更小,计算复杂度更低。然而,ABFT只能处理有限腐败的错误。

  在矩阵乘法的ABFT基础上,Luk F T等人将ABFT扩展到矩阵分解和基本的线性代数运算,如LU、QR、Cholesky。这些方案是针对离线问题的。离线是指在矩阵运算之后进行错误的检测和修正,能够适用于一般的矩阵分解问题,而不需要仔细考虑具体的算法。尽管离线ABFT技术通常具有最小的运行时开销,但它们不能防止错误的传播和积累。当故障数量超越校验和校正能力时,要重新计算矩阵,因此ABFT不足以为大规模长时间运行的应用提供容错能力。

  因此,Chen Z、Tao D等人关注的是矩阵乘法的在线变体,在线意味着在计算过程中不间断地进行故障检测和纠正,而不单单是在计算结束时才进行。在线变量要设计基于特定矩阵算法的ABFT方案,及时检测和纠正错误,防止错误传播。如Chen Z等人采用Krylov子空间的迭代法,在计算过程中动态验证程序的正交关系和残差。

  除了密集线性代数的ABFT外,最近的研究还涉及到稀疏矩阵。高性能计算的许多科学应用通常涉及稀疏线性代数,因此开发稀疏线性代数的ABFT格式具备极其重大意义。由于稀疏矩阵的数据结构不同(如CSR、COO),传统的ABFT方案不适合稀疏矩阵。最近的研究针对SpMV、PCG等稀疏矩阵的数据结构和计算特性,降低了错误检测和纠错的运行成本。

  需要指出的是,许多ABFT研究大多分布在在集成电路层面的容错,而不是高性能计算系统。在HPC系统中,大多数并行矩阵算法,如Cannon、Fox、High Performance Linpack (HPL)等,都是将矩阵划分为块,并将块分配给不同节点和流程以实现可扩展性和灵活性,因此,不能在高性能计算系统上直接用基于行和列校验和的传统ABFT机制。

  Zhu提出了一种基于块校验和的大规模并行系统矩阵容错机制。他将矩阵分成块,并在每个块中添加校验和。然后将这些块放入并行矩阵乘法中。在数学运算中,块校验和的计算为原行列ABFT的1/k,其中k为块的大小。然而,k越大,越容易出现舍入误差。为了在准确性和效率之间取得平衡,他提出了一种选择正真适合大小的块的方法。此外,基于块的校验和用于实现FT-PBLAS,这是PBLAS的容错版本。

  与传统的同构系统类似,异构系统也经常存在错误。近年来人们对异构系统的ABFT格式进行了一些研究,这些研究大多分布在在两个方面:一是将ABFT方案从CPU移植到GPU,二是提高ABFT在GPU上的可靠性。

  Chen提出了一种专对于GPUs异构系统的在线增强ABFT Cholesky分解方案,校验和验证是ABFT中的关键操作,由于其性能效率较低,故其在GPU上的开销相对较大。由于GPU内核可以并行运行,Chen使用多并发CUDA内核来加速校验和验证。对于LU和QR这两种单边矩阵分解算法,Chen根据GPU架构逐步优化了其编码校验和的内核,提供了一个更好的ABFT解决方案。

  GPUs通常执行大量的浮点计算,其结果不可避免地有可能会出现舍入误差。因此,基于GPU系统的ABFT必须处理校验和中的舍入错误,以避免误报。A -ABFT使用浮点运算中出现的舍入误差的概率模型来确定矩阵乘法的ABFT校验和比较的误差界限。

  1.本文对现有的高性能计算系统软件弹性办法来进行了全面而系统的研究,对这一些方法进行了介绍和总结,分类不仅包括传统的容错方法,还包括新的技术,如静默数据损坏和ABFT方法,这项调查可以帮助研究人员了解HPC软件弹性的进展和整体情况。

  2.本文讨论了在高性能计算系统的最新发展中软件弹性方法所面临的挑战,主要是在可伸缩性和异构架构方面。此外,还讨论了随着超级计算机规模的扩大而出现的故障缓慢故障的挑战,这是未来需要更多关注的问题。

  随着高性能计算系统规模和复杂性的增长,弹性已成为大规模高性能计算系统面临的关键挑战之一。本文对高性能计算系统的软件弹性办法来进行了更为全面、更系统性的综述,并对这些办法来进行了分类,还总结了每种方法的优缺点,介绍了最流行的弹性方法及其最新进展和工作。

  随着高性能计算系统慢慢的变复杂和异构,本文还跟踪每个部分中遇到新挑战的最新工作,并迅速跟进每个分类的最新进展,本文的工作对研究人员检索高性能计算系统弹性的主要工作提供了更全面、更具有时效性的帮助。

  Frontiers of Computer Science (FCS)是由教育部主管、高等教育出版社和北京航空航天大学共同主办、SpringerNature 公司海外发行的英文学术期刊。本刊于 2007 年创刊,双月刊,全球发行。主要刊登计算机科学领域具有创新性的综述论文、研究论文等。本刊主编为周志华教授,共同主编为熊璋教授。编委会及青年 AE 团队由国内外知名学者及优秀青年学者组成。本刊被 SCI、Ei、DBLP、INSPEC、SCOPUS 和中国科学引文数据库(CSCD)核心库等收录,为 CCF 推荐期刊;两次入选“中国科技期刊国际影响力提升计划”;入选“第4届中国国际化精品科技期刊”;入选“中国科技期刊卓越行动计划项目”。

  由教育部主管、高等教育出版社主办的《前沿》(Frontiers)系列英文学术期刊,于2006年正式创刊,以网络版和印刷版向全球发行。系列期刊包括基础科学、生命科学、工程技术和人文社会科学四个主题,是我国覆盖学科最广泛的英文学术期刊群,其中12种被SCI收录,其他也被A&HCI、Ei、MEDLINE或相应学科国际权威检索系统收录,具有一定的国际学术影响力。系列期刊采用在线优先出版方式,保证文章以最快速度发表。