0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Arm宣布将会采用Bfloat16数据类型,这种数据类型会成为主流吗?

倩倩 来源:lq 作者:雷锋网 2019-09-20 10:23 次阅读

为了提升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并提供了一些标准?这还有待观察。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4572

    浏览量

    98745
  • 机器学习
    +关注

    关注

    66

    文章

    8122

    浏览量

    130556
  • AI芯片
    +关注

    关注

    17

    文章

    1652

    浏览量

    34380
收藏 人收藏

    评论

    相关推荐

    plc数据类型怎么理解和应用

    PLC(可编程逻辑控制器)是一种工业自动化设备,用于控制机械和工业过程。在PLC编程中,数据类型是非常重要的概念,因为它决定了程序中数据的存储和处理方式。正确理解和应用PLC数据类型是编写有效、可靠
    的头像 发表于 12-19 11:39 1391次阅读

    oracle的数据类型有哪些

    Oracle数据库中有许多数据类型可供选择,每种数据类型都有其各自的特点和适用场景。下面是对Oracle数据库中最常用的数据类型的详尽说明,
    的头像 发表于 12-05 16:45 638次阅读

    redis的五种数据类型

    Redis是一种高性能的内存数据库,常用于缓存、任务队列、分布式锁等场景。它提供了多种数据类型来满足各种不同的需求,包括字符串(string)、哈希(hash)、列表(list)、集合(set
    的头像 发表于 11-16 11:06 345次阅读

    Redis数据类型介绍

    支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(有序集合)。 string(字符串) 字符串类型是Redis的最基本数据结构。 字符串
    的头像 发表于 10-09 10:53 530次阅读
    Redis<b class='flag-5'>数据类型</b>介绍

    Redis的数据类型有哪些

    用的一种数据类型,普通的key- value 存储都可以归为此类。其中Value既可以是数字也可以是字符串。使用场景:常规key-value缓存应用。常规计数: 微博数, 粉丝数。 2、Hash:Hash 是一个键值(
    的头像 发表于 10-09 10:51 403次阅读

    FreeRTOS使用的数据类型有哪些

    数据类型 FreeRTOS 使用的数据类型主要分为 stdint.h 文件中定义的和自己定义的。其中 char 和 char * 定义的变量要特别注意。 FreeRTOS 主要自定义了以下四种数据类型
    的头像 发表于 09-28 11:49 411次阅读

    PostgreSQL中可用的各种数据类型

    PostgreSQL是一种功能强大的开源关系型数据库管理系统,具有广泛的数据类型支持。在本教程中,我们将介绍PostgreSQL中可用的各种数据类型,包括数值、字符串、几何、时间、日期、布尔、货币
    的头像 发表于 09-19 14:08 1023次阅读

    PLC 数据类型 (UDT) 的基本知识

    说明 PLC 数据类型 (UDT) 是一种复杂的用户自定义数据类型,用于声明一个变量。这种数据类型是一个由多个不同数据类型元素组成的数据结构
    的头像 发表于 09-10 09:46 2242次阅读
    PLC <b class='flag-5'>数据类型</b> (UDT) 的基本知识

    F型PLC数据类型与标准PLC数据类型(UDT)之间的差别在哪?

    可以像使用标准 PLC 数据类型 (UDT) 那样,声明和使用 F 型 PLC 数据类型 (UDT) 。可以在安全程序中以及标准用户程序中使用 F 型 PLC 数据类型 (UDT) 。
    的头像 发表于 08-27 09:54 756次阅读
    F型PLC<b class='flag-5'>数据类型</b>与标准PLC<b class='flag-5'>数据类型</b>(UDT)之间的差别在哪?

    浅谈PLC定义数据类型的应用

    PLC定义数据类型以下用一个例子介绍PLC定义数据类型的应用,以便进一步理解PLC定义数据类型
    的头像 发表于 07-24 16:07 815次阅读
    浅谈PLC定义<b class='flag-5'>数据类型</b>的应用

    ARRAY 数据类型的变量

    要求 全局数据块已打开。 操作步骤 要声明一个 ARRAY 数据类型的变量,请按以下步骤操作: 在“名称”(Name) 列中,输入变量的名称。 在“数据类型”列中输入“Array”数据类型
    的头像 发表于 07-06 11:08 650次阅读

    基本数据类型分享

    基本数据类型 基本数据类型:包括位、位序列、整数、浮点数、日期时间。此外字符也属于基本数据类型,请参见文档String与WString。 1.位和位序列 2.整数数据类型 3.浮点型实
    的头像 发表于 06-13 14:14 5897次阅读
    基本<b class='flag-5'>数据类型</b>分享

    GaussDB 数据类型介绍

    GaussDB 数据库 GaussDB 是华为基于 openGauss 自研生态推出的云化企业级分布式关系型数据库,它支持多种数据类型,包括数值、字符、日期等。在使用 GaussDB 时,可能需要
    的头像 发表于 06-05 16:40 1271次阅读
    GaussDB <b class='flag-5'>数据类型</b>介绍

    GaussDB数据类型转换介绍

    数据类型转换在实际应用中非常常见。GaussDB 作为一款企业级分布式关系型数据库,在实际业务场景使用中,也会避免不了数据类型的转换。以下是一些数据类型转换的应用场景。
    的头像 发表于 06-05 16:29 523次阅读
    GaussDB<b class='flag-5'>数据类型</b>转换介绍

    Verilog最常用的2种数据类型

    Verilog 最常用的 2 种数据类型就是线网(wire)与寄存器(reg),其余类型可以理解为这两种数据类型的扩展或辅助。
    的头像 发表于 05-29 16:27 1210次阅读
    Verilog最常用的2<b class='flag-5'>种数据类型</b>