查看原文
其他

科学计算领域的低数值精度加速问题

壁仞科技研究院 壁仞科技研究院 2021-09-19



摘要

科学计算已经渗入到几乎所有涉及到科学与工程应用问题中,是科技行业不可或缺的技术手段。近年来,深度学习方法的流行,极大地推动了以GPU为代表的并行计算硬件的发展。由于深度学习特有的计算特性,在合适的场景下只需要较低的中间计算数值精度即可完成任务,且最终计算结果并不依赖于中间计算的数值表达精度,最终结果精确性也不受到大的影响。而数值精度降低之后,在硬件上的计算成本可以成倍数的下降。通过降低中间计算环节的数值精度来加速计算任务,引发了科学计算领域新的变化。为了更好地梳理科学计算领域融合深度学习的发展趋势,本文对低数值精度加速应用在科学计算领域上的问题进行了探讨。




引言

科学计算已经渗入到几乎所有涉及到科学与工程计算相关问题的解决过程中,目前广泛应用在能源勘测、游戏渲染、气象与海洋、金融保险、计算机辅助设计等行业。对于中间计算数值精度的需求,不同的领域呈现不同特征。在诸如能源勘测等领域,由于对计算结果有高精确性的需求,因此在相关计算中,往往会选择比较高的浮点数精度,而双精度FP64则成为一个默认的选择。然而,涉及到游戏渲染、动画制作、计算机辅助设计等部分领域往往并不需要很高的精度。

近年来,深度学习方法的流行,极大地推动了以GPU为代表的并行计算硬件的发展。由于深度学习的计算特性,在合适的场景下只需要较低的中间计算精度即可完成计算任务,且最终计算结果的精确性并不受到很大的影响。通过降低中间计算的数值精度之后,计算在硬件上的成本可以成倍数的下降,因此目前流行一种低精度加速计算的方式,例如使用较低数值精度如FP32,甚至是FP16来进行计算,或者是采用混合精度方式。

在GPU硬件上,使用更低的中间精度来进行计算的趋势,引发了科学计算领域新的变化。为了降低在硬件上的计算成本,并加快计算速度,那么是否可以在保证最终计算结果的精确性(或牺牲较少精度)的同时,使用低精度来完成科学计算的计算任务?就目前而言,低精度表达方案在科学计算领域的应用大致有两种。一种是改造科学计算中的算法使其适配低精度计算方式,另一种是将深度学习与传统的计算方法融合。相比较而言,第二种方案更加简单易行,也会更好地适配深度学习搭建起来的软硬件环境,相信这是未来AI融合科学计算的一种趋势。



背景

由于数字计算设备的物理限制,科学计算中的实数必须由有限位长的浮点数来表示,比如64位双精度(FP64)、32位单精度(FP32)以及16位半精度(FP16)表示法。下图是IEEE对浮点数表达规范的示意图。

图1 IEEE754浮点数表示[1]

为了减少由此带来的截断误差,科学计算中一般尽可能选取高数值精度完成运算。然而高精度运算需要更高的软硬件资源支持,因此限制了芯片在功耗和运算速度上优化效果[2]。同时,FP64双精度64位中的许多位通常是冗余的,包含的信息往往并不重要,从而导致了宝贵的内存和带宽的浪费。

近年来,深度学习的兴起推动了以GPU为代表的计算硬件的发展。与科学计算不同,深度学习方法具有更强的精度容错能力。为了与迅速发展的深度学习应用相匹配,许多面向AI的加速器都强化了在低精度FP32,FP16的并行运算速度。实践证明这些强化了低精度运算速度的硬件设备,在确保AI应用准确性的同时,极大地提升了中间计算过程的执行性能。

随着AI技术的发展,深度学习也被广泛用于科学计算领域以提升计算方法在仿真、成像等各类应用的性能。因此,主流的AI低精度高速运算硬件对融合AI的科学计算应用可能的影响成为一个值得关注的问题。许多分析工具被开发出来用于诊断、调试和优化浮点数精度对计算结果影响,其中常见的方法如确定性的算法来进行评估,或者是通过实验对比多种数值精度计算结果,以及利用随机方法来评估阶段误差的不确定性。然而低数值精度计算在以往的工程实践上并不流行,这是因为低精度计算的表达往往会带来比较大舍入误差。为了直观地展示各种精度的影响,这里以常见的数值求解微分方程的方法为背景。例如常见的差分方法,经常出现计算1/(a-b)或者1/(a+b)这样的情形。以1/(a-b)为例,如当a为2且b为2.01时,其计算误差并不大,但是,当a为2,b为2.001或者是2.0001时,其计算结果差异将比较明显,尤其是当1/0.0001时,在FP16的情况下,将产生除以0这样的数值溢出问题。如下图:

图2 浮点数运算结果示例

但是对于另外一种情况,如1/(a+b)时,其计算误差并不明显,不同精度带来的舍入误差只对结果造成很小的影响。然而为了减少对低数值精度在某些情况下带来的误差的担忧,以往的科学计算在权衡精度与速度的时候,往往倾向于舍弃计算效率而选择更高的精度。



误差影响因素
事实上,浮点数表达精度对计算结果的影响自计算机诞生起就一直存在。影响科学计算最终计算精度的因素有许多,远不止计算时数值浮点精度这一项。最终计算误差的来源大体上可分为三类:方法误差、应用误差、计算表达误差。
  • 方法误差
以科学计算应用中最常见的流体力学为例。首先,其涉及的偏微分方程本身就是对真实物理过程的近似描述。而这些非线性偏微分方程很少可以解析求解。为方便求解,各类方法往往简化处理问题中的受力等条件。在方便计算的同时,这些简化假设在具体问题中也引入了误差。此外将非线性方程离散化为线性方程是流体力学常规的手段,比如有限体积、有限元等方法,这些操作也同样引入了离散误差。其他类型应用中,各类对方法或模型的近似也被广泛应用,例如在CT反演成像中,射线传播衰减过程一般被近似为频率单一且不存在串扰的线性模型。因此方法类的误差广泛存在于各类科学计算应用,制约了科学计算求解的精度。
  • 应用误差
    具体应用能确定的计算条件不同,对计算精度的要求也千差万别。因此,具体计算实现会主动或被动的采取一些近似。比如,实际道路的湍流的情况无法准确测量。因此汽车风阻仿真计算往往将气流假设为均匀的。在面向影视的图形学仿真计算中,设计者往往会主动选择一些策略来简化计算,比如减少对动物毛发和水流细节的计算。这些应用中的约束也会在最终求解中引入求解误差。
  • 计算表达误差
    数值计算过程中引入的误差。许多科学计算是通过迭代方式求解的,当前结果依赖之前求解得到的数值结果。每次迭代的误差会逐步累积以至迭代结果越来越偏离正确的结果。浮点数精度(FP16,FP64等)对这类带有截断误差的问题,往往有较大的影响。然而在主流应用中,高精度浮点数表示法带来较高的数值冗余度。事实上,许多工程应用软件是从早期低精度时代版本迭代而来,其核心仍是与当时硬件条件相匹配情况下开发的算法。长期实践证明,只需规避已知的相关问题,包含低精度计算的工具将是可靠的。



重新认识低数值精度
无论是工程建模,分子动力学仿真还是天体分析,研究者都倾向于用尽可能高的浮点精度来完成科学计算。尽管不是必须,但为了避免相关计算表达误差所带来的困扰,实际应用中缺省的数值精度选项都是双精度浮点格式。虽然研究者本身对这种高精度数值表达的冗余性有一定的认知,但受限于传统上对此类低精度计算的软硬件方案关注度不高,也忽略了该方案对计算的实际加速效果。但低精度带来的计算速度加速效果具有巨大的优势。特别是由于深度学习的推动,目前主流的运算设备如GPU、TPU都强化了单精度和半精度的并行矩阵运算能力,使得超算设备的单精度、半精度计算性能与性价比远超双精度计算。如果不能有效发挥超算设备的算力,无疑限制了科学计算应用的发展。

因此许多研究者对科学计算应用中合适的浮点精度要求进行了深入研究。总的来看,对科学计算数值精度的探索目前有几个不同的方向:科学计算中可以低精度计算的部分应用;适配低精度的数值计算方法;混合AI的科学计算,AI驱动的科学计算。而随着深度学习方法替代科学计算中传统的计算方法成为一种趋势,这种低精度加速计算的硬件设备将覆盖科学计算相关领域中的大多数应用场景。

  • 低数值精度的科学计算应用

    一个不容忽视的事实是,并非所有科学计算都需要高精度计算。而科学计算应用也并非所有的部分都需要高精度运算。一般来看,用于可视化的图形学仿真过程,使用单精度甚至半精度即可满足要求。在图像反演计算中,对图像或信号的预处理往往也可以用低精度完成。

  • 面向低数值精度的算法
    许多科学计算的算法在设计时往往并没有针对特定精度优化,因而不适合低数值精度计算。通过针对性的优化,许多科学计算的算法可以在低浮点精度上保证计算结果的可靠性,同时充分发挥计算设备的硬件优势。在AI融合科学计算已经愈发受到关注的趋势下,超级计算机上也进行了一些低数值精度加速计算的尝试,如HPL-AI基准测试集项目[3-5]。HPL-AI项目致力于通过提供改进算法与硬件混合的形式,使得具有数十年历史的HPL框架的解算器能够支持低数值精度模式下的运算,从而对世界上最大的超级计算机进行基准测试。HPL-AI的创新之处在于在整个求解过程中放弃64位精度计算的要求,而是选择低精度(例如16位)的LU精度,以及修改迭代算法来恢复因式分解中损失的精度。通过这些算法的组合使得硬件设备支持低数值精度加速科学计算。目前该项目显示,大约有4倍以上的加速效果,其汇总结果如下(截止2020年11月):

图3 HPL-AI项目基准测试加速效率比

  • AI融合的科学计算应用

    目前,越来越多新型的AI算法融入到了科学计算项目。在刚刚结束的GTC21专题上,学者们介绍了赢得SC20 Gordon Bell特别奖励的病毒仿真工作[7]。该工作用传统科学计算中的算法生成不同尺度和时空维度的新冠病毒仿真,并用AI方法融合了多尺度和维度的仿真。另外,学者也在尝试用AI方法(部分)代替传统科学计算的仿真方法[8]。在可接受的计算精度损失下,融合了AI的科学计算在单精度实现上可以大大提升计算效率。在深度学习时代下,随着半精度、混合精度的计算软件和硬件设备的发展,AI与科学计算的融合是大势所趋,其发展非常值得期待。

  • AI驱动科学计算新趋势
    相比于前几种情况,由AI驱动的科学计算的核心思路是通过使用训练神经网络的方法来替换科学计算中的方法。由这个思想展开,目前最为流行的是一个称为PINN(Physics Informed Neural Network:物理导引神经网络)的方法[9]。通过利用神经网络来不断优化逼近微分方程的解的方式,从而来替换需要进行数值离散的过程。这种PINN算法不仅适用于常规类型的常(偏)微分方程,也适用于积分微分方程、分数偏微分方程和随机偏微分方程。由于使用神经网络来表征微分方程的解,并且使用神经网络训练的方式来代替微分方程求解的过程,使得一大批科学计算问题可转化深度学习方法能够处理的问题,从而使得低精度加速计算方法变为可能。而且,这种PINN方法还有一个令人意想不到优点,通过神经网络训练得到的微分方程的解,可比传统方法的精度提高好几个数量级(理论上数值精度可以任意倍)。目前这种类似方法的应用到科学计算问题上,已成为新的趋势,可想而知,这类AI驱动的计算方法为低精度硬件加速提供了技术上的可行性。
  • 混合精度科学计算

    针对具体应用选择合适的而不是最高的精度更能充分利用当前的硬件设备。事实上,混合精度并不是一个新的概念。它早已融于深度学习的训练与推理中。主要的深度学习框架如Tensorflow、Pytorch均支持这项功能。但由于计算目标和模式的差异,适用于深度学习的混合精度计算并不能直接用于科学计算。包括英伟达在内的众多科学计算软硬件开发与应用者都在探索科学计算中的混合精度计算,即:在科学计算中,对单个操作使用不同的数值精度,从而在保证整体求解精度条件下提升计算效率[10]。运用混合精度计算技术,EPFL的学者研究了用于宇宙探索的强引力透镜建模。同传统CPU集群相比,在英伟达V100GPU上取得了170倍的加速,并证实即使采用以低精度为主的英伟达1080Ti也可以取得不错的加速效果[11]。当然如何选择合适的精度本身是一个具有挑战。对此,劳伦斯利弗莫尔国家实验室Hittinger等人提出了Variable Precision Computing (VPC) 的概念[12],期望开发出一种有损压缩算法,根据需要动态调整数值精度,并期望说服业界接受对数值精度的合理压缩并不会导致最终求解的精度损失。欧洲的一些学者还研究了面向科学计算架构的软件编译中16位和32位浮点到定点表达的自动转换技术,并证实利用该技术足以在32位精度上以可接受的误差显著提升计算速度。
从趋势来看,深度学习时代下引领的计算潮流,正朝着一种以新型的数值精度方案来适配各种科学计算的新目标,从而使得支持低精度加速的硬件设备能够更好地服务于科学计算。相信这是未来科学计算融合深度学习的一种新的特征。



结论与思考

本文讨论了数值精度表达对科学计算的影响,以及在深度学习推动下,低数值精度计算在科学计算领域的价值。当前的研究发现,不是所有的科学计算应用都需要高精度表示。目前的趋势是以混合精度的形式尽可能的将运算以单精度表达来实现。这样可以大大提升科学计算整体计算效率,并减少传输存储带宽,进而可以将科学计算进一步拓展到以前受限于计算资源的情形中。通过引入深度学习方法,降低了计算成本,同时不减少最终的计算精度。因此,深度学习方法替代科学计算中传统的计算方法已成为一种新的趋势。相信在未来的大部分科学计算应用场景中,都将由一种支持低数值精度加速的硬件设备来驱动上层的算法计算,从而迎来科学计算领域的新面貌。


参考文献
[1] Using Tensor Cores for Mixed-Precision Scientific Computing, https://developer.nvidia.com/blog/tensor-cores-mixed-precision-scientific-computing/
[2] R.Sakamoto, et.al.,The Effectiveness of Low-Precision Floating Arithmetic on Numerical Codes: A Case Study on Power Consumption, 2020
[3] HPL-AI Mixed-Precision Benchmark, https://icl.bitbucket.io/hpl-ai/collaborators/
[4] AzzamHaidar, et.al., Harnessing GPU Tensor Cores for Fast FP16 Arithmetic to Speed up Mixed-Precision Iterative Refinement Solvers, In Procedeedings ofSC18, 2018.
[5] Nicholas J. et.al., Squeezing a Matrixinto Half Precision, with an Application to Solving Linear Systems, SIAM J. Sci. Comput., 41(4), A2536–A2551, 2019
[6] PierreBlanchard, et. al., Mixed Precision Block Fused Multiply-Add: Error Analysis and Application to GPU Tensor Cores, 2019
[7] L.Casalino, et. al., AI-Driven Multiscale Simulations Illuminate Mechanisms of SARS-CoV-2 Spike Dynamics, preprint, PMID: 33236007
[8] W.Jia, et.al., Pushing the limit of molecular dynamics with ab initioaccuracy to 100 million atoms with machine learning, SC20
[9] Raissi,Maziar, et.al., Physics-informed neural networks: A deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations. Journal of Computational Physics 378 (2019): 686-707.
[10] Mixed Precision: A Strategy for New Science Opportunities,https://www.olcf.ornl.gov/2018/10/09/mixed-precision-a-strategy-for-new-science-opportunities/
[11] M.Rexroth,et.al., High Performance Computing for gravitational lens modeling: Single vs double precision on GPUs and CPUs, Astronomy and Computing Volume 30, January 2020, 100340
[12] J.A. Hittinger, et.al. Variable Precision Computing, LLNL-TR-795750,2019

     往期推荐

1、MLIR编译技术应对硬件设计挑战?—初探CIRCT项目

2、擎天柱: 训练超大模型的高效二维方法

3、图神经网络加速器深度调研(下)



关于壁仞科技研究院


壁仞科技研究院作为壁仞科技的前沿研究部门,旨在研究新型智能计算系统的关键技术,重点关注新型架构,先进编译技术和设计方法学,并将逐渐拓展研究方向,探索未来智能系统的各种可能。壁仞科技研究院秉持开放的原则,将积极投入各类产学研合作并参与开源社区的建设,为相关领域的技术进步做出自己的贡献。

扫码关注我们


: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存