Arm为加速机器学习拥抱谷歌提出的BFloat16
雷锋网按,为了提升AI性能,AI芯片公司从多个方面进行优化,包括采用更先进的工艺制程、进行架构创新,数据类型的支持也是其中之一。如今,为了加速机器学习性能,Arm宣布将会采用Bfloat16数据类型,这种数据类型会成为主流吗?
Arm Holdings宣布其ArmV8-A架构的下一版本将支持bfloat16,这种浮点格式越来越多地用于加速机器学习应用。如今,谷歌、英特尔和少数初创公司的芯片都选择了支持bfloat16。
Bfloat16,又名16位脑浮点(brain floating point),由Google发明,最初在其第三代Tensor处理单元(TPU)中支持。英特尔认可以将bfloat16整合到其未来的“Cooper Lake”Xeon SP处理器,以及即将推出的“Spring Crest”神经网络处理器中。Wave Computing、Habana Labs和Flex Logix也采用了定制的AI处理器。
bfloat16的主要思想是提供16位浮点格式,其动态范围与标准IEEE-FP32相同,但精度较低。相当于指数区和FP32保持了相同的8位,并将FP32分数字段的小数区缩减到到了7位。
根据Arm的ISA架构师和Fellow Nigel Stephens的说法,大多数情况下,用户在进行神经网络计算时,bfloat16格式与FP32一样准确,但是以一半的位数完成任务。因此,与32位相比,采用bfloat16吞吐量可以翻倍,内存需求可以减半。在大多数情况下,blfloat16可以成为这些机器学习算法中FP32的“插入式”替代品。“幸运的是,神经网络由于其统计性质,只要数据类型具有足够的范围和精度,就可以很好地适应少量噪声,” Stephens告诉我们。
在Arm,附加支持将适用于ArmV8-A下支持的所有浮点指令集,即SVE(可扩展矢量扩展),AArch64 Neon(64位SIMD)和AArch32 Neon(32位SIMD))。附加支持旨在用于基于Arm的终端和服务器的机器学习推理和训练。虽然Arm服务器的规模仍然很小,但其终端市场规模巨大,这意味着未来的手持式和物联网设备将很快能够利用更紧凑的数字格式。
Stephens 8月份撰写的一篇博客中写到,将增加四条新指令来支持bfoat16值的乘法运算,这是用于训练和推理神经网络的最常用计算。据他介绍,在大多数情况下,应用程序开发人员不会在底层代码中添加这些指令,因为这些支持很可能由Arm自己的机器学习库提供。对于那些对细节感兴趣的人来说,这四条新指令如下:
-
BFDOT 是BF16元素的[1×2]×[2×1]点积,累积到SIMD结果中的每个IEEE-FP32元素中。
-
BFMMLA, 包括两个有效地 BFDOT 操作,执行BF16元素的[2×4]×[4×2]矩阵乘法,累积到SIMD结果内的每个[2×2]矩阵的IEEE-FP32元素中。
-
BFMLAL是偶数或奇数BF16元素的简单乘积,累积到SIMD结果中的每个IEEE-FP32元素中。
-
BFCVT,将IEEE-FP32元素或标量值转换为BF16格式。
在SVE中包含对bfloat16的支持特别有趣,因为这些向量指令是专门为高性能计算开发的。截至目前,唯一已知的实现SVE是富士通的A64FX芯片,这款处理器将为即将推出的Post-K超级计算机提供动力,该超级计算机现在名为Fugaku。但这还为时过早,无法获得bfloat16的好处,但后来的那些,就像为欧洲处理器计划(EPI)开发的Arm处理器肯定会包含它。
Stephens说,鉴于传统HPC用户对机器学习的兴趣增加以及他们的高性能系统对训练大型神经网络的适应性,在SVE中包含bfloat16似乎是一种自然的补充。他还指出,有一些HPC研究人员正在调查使用新的16位格式来加速传统科学应用的混合精度计算。
“再次强调,bfloat16的优势在于它具有与FP32相同的动态范围,这使得使用FP 32的代码,在转换的早期阶段使用bfloat16更容易。”他解释说。
并且由于SVE可以针对不同的向量长度,实现从128位到2048位,理论上bfloat16吞吐量应该相应于128位Neon实现进行扩展。但实际上,Stephens说吞吐量还取决于具体的硬件实现选择,例如SVE执行单元的数量与给定实现的Neon执行单元的数量。
然而,当转换为具有较小范围的数据类型(例如INT8和FP16)时,基于blfoat16的网络的易部署性与其最终大小和性能之间存在折衷。Stephens表示,使用blfoat16进行推理可能对那些无法承担额外费用和重新训练网络的开发人员来说是有吸引力的,因为只有一种类型可用于训练和推理,因此可以使用这些较小的类型(可能需要几个月)。
另外,需要注意的是bfloat16类型没有标准,因此无法保证相同计算的结果在不同的处理器上完全相同。但正如Stephens所指出的那样,FP32关于如何对点积进行排序(IEEE保持开放排序),甚至存在可变性。无论如何,四舍五入的噪音几乎总是可以接受的,因为正如斯蒂芬斯所说,机器学习是一种统计游戏。
Arm对bfloat16的支持,使得GPU(目前广泛使用的机器学习引擎)包括Nvidia和AMD,成为唯一仍然不提供该格式原生支持的机器学习引擎。但作为现在使用最广泛的处理器架构,GPU支持bfloat16几乎是不可避免的,包括英特尔即将推出的X e GPU加速器。IEEE是否曾接受bfloat16并提供了一些标准?这还有待观察。
雷锋网编译,via nextplatform 雷锋网 (公众号:雷锋网)
。