科普 | 单精度、双精度、多精度和混合精度计算的区别是什么?
转自:https://zhuanlan.zhihu.com/p/93812784
我们提到圆周率 π 的时候,它有很多种表达方式,既可以用数学常数3.14159表示,也可以用一长串1和0的二进制长串表示。
圆周率 π 是个无理数,既小数位无限且不循环。因此,在使用圆周率进行计算时,人和计算机都必须根据精度需要将小数点后的数字四舍五入。
在小学的时候,小学生们可能只会用手算的方式计算数学题目,圆周率的数值也只能计算到小数点后两位——3.14;而高中生使用图形计算器可能会使圆周率数值排到小数点后10位,更加精确地表示圆周率。在计算机科学中,这被称为精度,它通常以二进制数字来衡量,而非小数。
对于复杂的科学模拟,开发人员长期以来一直都依靠高精度数学来研究诸如宇宙大爆炸,或是预测数百万个原子之间的相互作用。
数字位数越高,或是小数点后位数越多,意味着科学家可以在更大范围内的数值内体现两个数值的变化。借此,科学家可以对最大的星系,或是最小的粒子进行精确计算。
但是,计算精度越高,意味着所需的计算资源、数据传输和内存存储就越多。其成本也会更大,同时也会消耗更多的功率。
由于并非每个工作负载都需要高精度,因此 AI 和 HPC 研究人员可以通过混合或匹配不同级别的精度的方式进行运算,从而使效益最大化。NVIDIA Tensor Core GPU 支持多精度和混合精度技术,能够让开发者优化计算资源并加快 AI 应用程序及其推理功能的训练。
单精度、双精度和半精度浮点格式之间的区别
IEEE 浮点算术标准是用来衡量计算机上以二进制所表示数字精度的通用约定。在双精度格式中,每个数字占用64位,单精度格式占用32位,而半精度仅16位。
要了解其中工作原理,我们可以拿圆周率举例。在传统科学记数法中,圆周率表示为3.14 x100。但是计算机将这些信息以二进制形式存储为浮点,即一系列的1和0,它们代表一个数字及其对应的指数,在这种情况下圆周率则表示为1.1001001 x 21。
在单精度32位格式中,1位用于指示数字为正数还是负数。指数保留了8位,这是因为它为二进制,将2进到高位。其余23位用于表示组成该数字的数字,称为有效数字。
而在双精度下,指数保留11位,有效位数为52位,从而极大地扩展了它可以表示的数字范围和大小。半精度则是表示范围更小,其指数只有5位,有效位数只有10位。
圆周率在每个精度级别表现如下:
多精度和混合精度的计算的差异
多精度计算意味着使用能够以不同精度进行计算的处理器,在需要使用高精度进行计算的部分使用双精度,并在应用程序的其他部分使用半精度或单精度算法。
混合精度(也称为超精度)计算则是在单个操作中使用不同的精度级别,从而在不牺牲精度的情况下实现计算效率。
在混合精度中,计算从半精度值开始,以进行快速矩阵数学运算。但是随着数字的计算,机器会以更高的精度存储结果。例如,如果将两个16位矩阵相乘,则结果为32位大小。
使用这种方法,在应用程序结束计算时,其累积得到结果,在准确度上可与使用双精度算法运算得到的结果相媲美。
这项技术可以将传统的双精度应用程序加速多达25倍,同时减少了运行所需的内存、时间和功耗。它可用于 AI 和模拟 HPC 工作负载。
随着混合精度算法在现代超级计算应用程序中的普及,HPC 专家 Jack Dongarra 提出了一个新的基准,即 HPL-AI,以评估超级计算机在混合精度计算上的性能。当 NVIDIA 在全球最快的超级计算机 Summit 上运行 HPL-AI 计算时,该系统达到了前所未有的性能水平,接近550 petaflop,比其在 TOP500 榜单上的官方性能快了3倍。
如何开始使用混合精度计算
NVIDIA Volta 和 Turing GPU 具有 Tensor Core,旨在简化和加速多精度计算和混合精度计算。只需几行代码,开发人员就可以在 TensorFlow、PyTorch 和 MXNet 深度学习框架中启用自动混合精度功能。该工具可为研究人员提供高达3倍的 AI 训练速度提升。
NGC GPU 加速软件目录还包括迭代优化求解器和 cuTensor 库,可轻松地为 HPC 部署混合精度应用程序。
混合精度计算的用途是什么
研究人员和公司依靠 NVIDIA GPU 的混合精度功能来支持科学模拟、AI 和自然语言处理工作负载。以下为一些示例:
地 球 科 学:东京大学(University of Tokyo)、橡树岭国家实验室(Oak Ridge National Laboratory)和瑞士国家超级计算中心(Swiss National Supercomputing Center)的研究人员将 AI 和混合精度技术用于地震模拟。通过对东京的 3D 模拟,科学家能够模拟地震波如何对硬土、软土、地上建筑、地下商场和地铁系统产生影响。他们的新模型在 Summit 超级计算机上运行,并结合了双精度计算、单精度计算和半精度计算,其速度提高了25倍。
劳伦斯伯克利国家实验室(Lawrence Berkeley National Laboratory)的一个 Gordon Bell 获奖团队使用 AI 从高分辨率气候模拟中识别极端天气模式,从而帮助科学家分析未来极端天气将如何变化。在 Summit 上使用 NVIDIA V100 Tensor Core GPU 的混合精度功能,他们实现了1.13 exaflops 的性能。
医 学 研 究 与 健 康 事 业:总部位于旧金山的 Fathom 是 NVIDIA 初创加速计划的成员,该公司正在 NVIDIA V100 Tensor Core GPU 上使用混合精度计算,以加快对其深度学习算法的训练,该算法可实现医学编码自动化。这家初创公司可与许多美国最大的医疗编码机构合作,将医生输入的备注转换为字母数字代码,代表保险公司和患者出具的每个诊断和程序。
橡树岭国家实验室的研究人员因其在阿片类药物成瘾方面的开创性工作而获得了 Gordon Bell 奖,该研究利用混合精度技术实现了2.31 exaops 的峰值通量。该研究分析了种群内的遗传变异,确定了导致复杂性状的基因模式。
核 能:核聚变反应非常不稳定,对于科学家来说,持续超过几秒钟都很棘手。橡树岭国家实验室的另一个团队正在模拟这些反应,以向物理学家提供有关反应堆中变量的更多信息。使用 Tensor Core GPU 的混合精度功能,该团队能够将其模拟速度提高3.5倍。