ONNX中的8位浮点数(Float8)详解

ONNX中的8位浮点数(Float8)详解

onnx Open standard for machine learning interoperability onnx 项目地址: https://gitcode.com/gh_mirrors/onn/onnx

引言

在深度学习领域,模型规模的不断扩大对计算资源提出了更高要求。为了优化计算效率,研究人员开始探索使用更低精度的浮点数格式。ONNX作为开放的神经网络交换格式,在1.15.0版本中引入了4种8位浮点数(Float8)类型,为深度学习模型的存储和计算提供了新的选择。

Float8的背景与意义

传统深度学习通常使用32位浮点数(FP32)进行计算,但这会占用大量内存和计算资源。2022年,NVIDIA、Intel和ARM联合发表的论文提出了两种8位浮点格式(E4M3和E5M2),另一篇论文则探讨了不同指数和尾数分配方案。研究表明,虽然8位浮点数的精度较低,但对模型训练准确率的影响有限。

ONNX支持的Float8类型

ONNX目前支持以下4种Float8类型:

1. E4M3FN

  • 结构:1位符号位 + 4位指数位 + 3位尾数位
  • 特点:支持NaN值,不支持无限值(FN)
  • 典型应用:主要用于权重存储

2. E4M3FNUZ

  • 结构:1位符号位 + 4位指数位 + 3位尾数位
  • 特点:支持NaN值,不支持无限值(FN),无负零(UZ)
  • 典型应用:GraphCore硬件专用

3. E5M2

  • 结构:1位符号位 + 5位指数位 + 2位尾数位
  • 特点:标准IEEE格式
  • 典型应用:主要用于梯度计算

4. E5M2FNUZ

  • 结构:1位符号位 + 5位指数位 + 2位尾数位
  • 特点:支持NaN值,不支持无限值(FN),无负零(UZ)
  • 典型应用:GraphCore硬件专用

Float8的数值表示

E4M3FN和E5M2格式

| 特性 | E4M3FN | E5M2 | |------------|---------------------------|--------------------------| | 指数偏置 | 7 | 15 | | 无穷大 | 不支持 | S.11111.00₂ | | NaN | S.1111.111₂ | S.11111.{01,10,11}₂ | | 零值 | S.0000.000₂ | S.00000.00₂ | | 最大值 | S.1111.110₂ | 1.75×2¹⁵=57344 | | 最小值 | S.0000.001₂=2⁻⁹ | S.00000.01₂=2⁻¹⁶ |

数值计算公式:

  • 当指数≠0时:
    • E4M3FN: $(-1)^S 2^{\sum_{i=3}^6 b_i 2^{i-3} - 7} (1 + \sum_{i=0}^2 b_i 2^{i-3})$
    • E5M2: $(-1)^S 2^{\sum_{i=2}^6 b_i 2^{i-2} - 15} (1 + \sum_{i=0}^1 b_i 2^{i-2})$
  • 当指数=0时:
    • E4M3FN: $(-1)^S 2^{-6} \sum_{i=0}^2 b_i 2^{i-3}$
    • E5M2: $(-1)^S 2^{-14} \sum_{i=0}^1 b_i 2^{i-2}$

E4M3FNUZ和E5M2FNUZ格式

| 特性 | E4M3FNUZ | E5M2FNUZ | |------------|--------------------------|--------------------------| | 指数偏置 | 8 | 16 | | 无穷大 | 不支持 | 不支持 | | NaN | 1.0000.000₂ | 1.00000.00₂ | | 零值 | 0.0000.000₂ | 0.00000.00₂ | | 最大值 | S.1111.111₂ | S.11111.11₂ | | 最小值 | S.0000.001₂=2⁻¹⁰ | S.00000.01₂=2⁻¹⁷ |

数值计算公式:

  • 当指数≠0时:
    • E4M3FNUZ: $(-1)^S 2^{\sum_{i=3}^6 b_i 2^{i-3} - 8} (1 + \sum_{i=0}^2 b_i 2^{i-3})$
    • E5M2FNUZ: $(-1)^S 2^{\sum_{i=2}^6 b_i 2^{i-2} - 16} (1 + \sum_{i=0}^1 b_i 2^{i-2})$
  • 当指数=0时:
    • E4M3FNUZ: $(-1)^S 2^{-7} \sum_{i=0}^2 b_i 2^{i-3}$
    • E5M2FNUZ: $(-1)^S 2^{-15} \sum_{i=0}^1 b_i 2^{i-2}$

类型转换规则

向高精度转换(Float8→Float16/BFloat16/Float32)

这种转换相对简单且精确,但可能不保留特定值(如-0或-NaN)的符号。

向低精度转换(Float32→Float8)

转换需要找到最接近的Float8值,通常通过位移和截断实现。转换可分为饱和模式和非饱和模式:

饱和模式转换表: | 输入x | E4M3FN | E4M3FNUZ | E5M2 | E5M2FNUZ | |-------------|---------|---------|---------|---------| | 超出正范围 | FLT_MAX | FLT_MAX | FLT_MAX | FLT_MAX | | 超出负范围 | -FLT_MAX| -FLT_MAX| -FLT_MAX| -FLT_MAX| | 其他 | 就近舍入 | 就近舍入 | 就近舍入 | 就近舍入 |

非饱和模式转换表: | 输入x | E4M3FN | E4M3FNUZ | E5M2 | E5M2FNUZ | |-------------|-------|---------|-----|---------| | 超出正范围 | NaN | NaN | Inf | NaN | | 超出负范围 | NaN | NaN | -Inf| NaN | | 其他 | 就近舍入| 就近舍入 | 就近舍入| 就近舍入|

实际应用建议

  1. 硬件兼容性:不同硬件厂商对Float8的实现有差异,NVIDIA、Intel和Arm主要支持E4M3FN和E5M2,而GraphCore则使用E4M3FNUZ和E5M2FNUZ。

  2. 使用场景

    • E4M3系列适合权重存储
    • E5M2系列适合梯度计算
  3. 精度考量:虽然Float8能显著减少内存占用和计算开销,但在某些对精度敏感的场景中仍需谨慎使用。

  4. 转换策略:根据应用需求选择饱和或非饱和转换模式,前者能保证数值在有效范围内,后者则能更好地检测溢出情况。

通过合理使用Float8类型,开发者可以在模型精度和计算效率之间找到平衡点,为深度学习模型的部署和推理提供更多优化空间。

onnx Open standard for machine learning interoperability onnx 项目地址: https://gitcode.com/gh_mirrors/onn/onnx

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

资源下载链接为: https://pan.quark.cn/s/d0b0340d5318 在当今数字化时代,FPGA(现场可编程门阵列)凭借其高度灵活性和卓越性能,在电子设计领域占据着举足轻重的地。它能够使设计者根据自身需求对硬件逻辑进行定制,因而在通信、图像处理、嵌入式系统、数据中心等多个领域得到了广泛应用。本压缩包内提供的学习资料全面覆盖了FPGA的基础知识和实践应用,对于无论是初入此领域的学习者还是希望进一步提升技能的进阶者来说,都是一份极具价值的学习资源。 VHDL硬件描述语言:VHDL(超高速集成电路硬件描述语言)是FPGA设计中极为重要的高级语言之一。它不仅可以用来描述复杂的数字逻辑系统,还能用于系统仿真和综合。《VHDL硬件描述语言与数字逻辑电路设计》这本书将帮助读者深入了解VHDL的基本语法、数据类型、运算符、进程语句、结构体等核心概念,并通过大量实例讲解如何运用VHDL来描述和实现各种数字逻辑电路。 VHDL语言100例详解:实践是掌握知识的关键。《VHDL语言100例详解》通过丰富的代码示例,从基础的逻辑门到复杂的数字系统设计(如计数器、寄存器、移寄存器、加法器、比较器、编码器、解码器、多路选择器、状态机等)进行了全面覆盖。书中对每个例子的设计思路和工作原理都进行了详细解释,旨在帮助读者巩固理论知识并提升实际编程能力。 深入浅出玩转FPGA:这本书的目标是帮助读者轻松掌握FPGA的实战技能。它详细介绍了FPGA的基本架构,包括可配置逻辑块(CLB)、输入/输出块(IOB)、块存储器(BRAM)等;阐述了FPGA设计流程,如原理图输入、VHDL/Verilog编程、逻辑综合、布局布线、下载验证等;还提供了FPGA在实际项目中的应用案例,如信号处理、图像处理、协议接口设计等。 通过学习这三本书,你将能够: 熟练掌握VHDL语言的基本语法和设计技巧; 深入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

常煦梦Vanessa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值